|
上一篇文章中,Taichi团队介绍了基于Taichi实现的NeRF在3D重建场景的应用(代码库):从多个视角的2D图片重建出3D内容。作为自然延伸,如果我们能够将NeRF与生成式AI(Generative AI,国内一般称为“AIGC”),或许可以将大红大紫的2D AIGC拓展到3D。目前这个问题并没有被很好地解决,除了一些学术论文以外,我自己也暂时没找到专门讨论这个问题的文章。 8 p7 l" W( q( j1 m# k5 {# j
因此,在系列的下篇,我想先聊聊(Taichi)NeRF在3D AIGC的应用以及其他团队的学术研究。随后,作为一个创业者,我会花更大的篇幅探讨一下3D AIGC在产品化和商业化的挑战和机遇。
! f& g0 C0 g5 H6 _1 [. C4 I 当然,关于3D数字资产的AIGC,大家都处于探索阶段,我们团队目前也只是浅浅尝试(产品在meshy.ai),还没有大投入去做,这样决策的具体的原因后面会分析到。所以,本文的定位更多是分享一些不成熟的早期想法,以讨论为主,很多问题目前我自己也没有答案。一些不足之处欢迎大家批评指正!
2 ], |( G% a& D8 f/ r) S$ }7 T5 @ 选择一个好问题
' u6 H2 U4 V! Q+ v7 G6 G2 q s 2D AIGC基本上只有一种选择:生成图片。但是3D资产比2D内容复杂,因为3D资产有很多种:模型、贴图、骨骼、(关键帧)动画等等。这里我们只考虑最主流的资产,也就是3D模型。而3D模型的表示又分为网格(Mesh)、体素(Voxel)、点云、SDF、甚至上文提到的NeRF等等。一旦考虑到实际落地到渲染管线中,基本上只有一种主流表示可以选择:Mesh。 6 F7 t: ^( C2 _) j `. E& u8 }
三角网格。这个模型没有带贴图,所以看着是灰色,也就是下文提到的“白模”。
5 J% M; r- `- y7 D0 m2 h& `2 _' C 从CG工作流程来看,从文字生成3D模型分两步: U- T' x& L2 b ]9 N
AI建模:给定文字输入,产出3D白模(即无贴图的模型); 4 ?/ z1 r0 B' }- K' `4 a- ]
AI画贴图:给定文字和白模,画上diffuse贴图或者PBR贴图组合(base color,metallic,roughness等)。
% R3 J% B' x H* Y5 m 从工业生产可控性的角度来说,用户会希望两步能够分离。而在学术界,大家更喜欢一步到位,对于可控性和PBR追求不高。 , l% f8 k* k3 i L! [! c
Part I.学术研究
1 u0 } H/ C( }; I9 J7 J 学术界通常不太考虑AI建模和AI贴图的分离,往往会一步到位,输入文字,得到带贴图的3D模型。这部分工作有两个“流派”,下面我简单梳理一下。
# c9 V2 K/ _, Q: ~ A% h 注意这部分不是文献综述,我也没有花大量的时间去调研全部工作,远达不到学术论文“Related work”的标准。不过如果有什么特别有意思的工作我看漏了,还请大家在评论区留言讨论~
4 e$ Q. d# A' [7 J* H “原生3D派” . H* p$ o; J& B d6 G; D( l
这一流派的特点是直接在ShapeNet等3D数据集上进行训练,从训练到推理都基于3D数据。一些有趣的工作如下:
) h) a& B D9 g2 t4 F7 j 3D-GAN是NIPS 2016比较经典的早期工作了。比较直观,就是GAN的3D版本,以voxel为单位,生成3D模型。用ShapeNet dataset,输入是一个Gaussian noise,2016年的时候还没实现text conditioning。 2 v. N/ K3 G$ Z9 Q2 R3 ^5 n
3D GAN的原理和生成效果
1 I1 @- Z) M% y9 `# j GET3D:通过differentiable rasterizer(NVDiffRast)加上类似GAN的架构,分别生成mesh和texture,质量看起来也挺不错的,后面也会提到differentiable rasterizer会是3D AIGC很重要的基础算法。 ( s; P- r3 s' v9 Y
GET3D训练架构。
& s, ^) G' C% C. v0 ^$ d 这一类基于3D数据的工作还包括TextCraft(实现了text conditioning)、AutoSDF、MeshDiffusion等等。这类方法生成速度往往较快,但是也有比较直接的问题:由于3D数据集往往相对LAION等巨型数据集都小至少3个数量级(后续有讨论),这一类方法比较难实现数据多样性。比如说,生成数据集中存在的汽车、家具、动物等完全没问题,但是生成需要“想象力”的模型,比如“一只骑在马背上的兔子”、“带着皇冠的鹦鹉”、“手持大锤、生气的牛头怪”等,就比较有挑战了。由于Stable Diffusion等2D AIGC模型的想象力完全可以描述后者,用户自然也会期待在3D空间的AIGC也能做到类似的效果:给出各种奇奇怪怪的文字,AI能够得到高质量的3D模型。这种“想象力”(本质上是在多样的训练数据集中插值)是AIGC的核心价值所在,但是目前3D数据集却较难提供。 & D0 f; `; _8 }
“2D升维派” ; |; I7 U6 v& B) l: Z7 _9 k2 h5 N
既然3D数据集无法满足数据多样性的要求,不妨曲线救国,借助2D生成式AI的想象力,来驱动3D内容的生成。这个流派的工作在最近乘着Imagen、Stable Diffusion等2D AIGC基础模型的突破取得了很多进展,因此本文着重讨论。 . B4 L$ y7 m) o: O2 D
OpenAI Point·E 论文链接)只需要1-2分钟就可以在单块GPU上生成点云。第一步是以文字为输入,用2D diffusion模型(选择了GLIDE)生成一张图片,然后用3D点云的diffusion模型基于输入图片生成点云。 5 P7 q2 D. y/ n2 E4 l5 v- Q
Point-e的算法和生成的效果
8 w1 o8 {6 H7 J: N DreamFusion:很有意思的工作,大体思路是通过2D生成模型(如Imagen)生成多个视角的3D视图,然后用NeRF重建。这里面有个“鸡生蛋蛋生鸡”的问题:如果没有一个训练得比较好的NeRF,Imagen吐出的图会视角之间没有consistency;而没有consistent的多视角图,又得不到一个好的NeRF。于是作者想了个类似GAN的方法,NeRF和Imagen来回迭代。好处是多样性比较强,问题也比较明显,因为需要两边来回迭代15,000次,生成一个模型就需要在4块TPUv4上训练1.5小时。 - z7 A# _2 {, q- F& j k, X2 y
DreamFusion:3D NeRF和2D生成模型来回迭代优化 1 d" ~# |! |0 v" N% x
Magic3D reamFields的升级版本,巧妙之处在于将重建过程分为了两步。第一步仅采用NeRF(具体来说,是上一篇提到的InstantNGP)进行比较粗糙的模型重建,第二步则采用一个可微的光栅化渲染器。NeRF比较适合从0到1、粗糙重建,更多的表面细节还需要更加特定的算法,比如说differentiable rasterizer。 ! D% ^5 m% z$ b* q7 ]( W7 [; X
Magic3D从text生成的3D模型 - g5 ^1 V8 R) }6 Q, d
目前DreamFusion/Magic3D这一类算法的性能瓶颈有两点:一是NeRF,二是依赖的Imagen/e-diffI/SD等2D生成模型。如果沿着这个算法思路进行优化,可能有下面两点机会:
7 P9 P6 l6 u, h- n" Z" J NeRF是否是最佳的differentiable renderer?从直觉上来说,并不是。NN在NeRF中一开始只是作为一个universal function approximator,如Plenoxel等工作其实说明了NN在NeRF中甚至不是必要的。还有个思路是直接不用NeRF,直接用differentiable rasterizer,比如说nvdiffrast,一方面能够提速,另一方面由于直接在三角网格上优化,能够避免NeRF的结果转化到生产过程中需要用的三角网格的损失。 : ]8 m3 m5 q* m
2D生成式模型,如Stable Diffusion生成速度如果能够更快,那么对提速会相当有价值。GigaGAN让我们看到了希望,生成512x512的图只需要0.13s,比SD快了数十倍。 8 N+ P# C* Y/ E( l+ i
当然,SDF也是可微性(differentiability)比较好的一种表示。Wenzel Jakob组在这方面有一篇很棒的工作,重建质量非常棒,不过还没有和AIGC结合:
0 {8 n! F$ t; `+ l2 x/ \: [! b 另外,除了生成通用资产,数字人的生成也是一个独立的有科研、商业价值的方向。taichi影眸科技做的ChatAvatar、MSRA的Rodin,都是最近有代表性的工作。taichi https://taichi-lang.cn/ # H5 K$ F, U/ |, O6 d3 g
|