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