AIGC 能产出 3D 内容吗?难点在哪里?

您所在的位置:网站首页 3dmax影响反射在哪里 AIGC 能产出 3D 内容吗?难点在哪里?

AIGC 能产出 3D 内容吗?难点在哪里?

2023-04-10 23:33| 来源: 网络整理| 查看: 265

2D AIGC 基本上只有一种选择:生成图片。但是 3D 资产比 2D 内容复杂,因为 3D 资产有很多种:模型、贴图、骨骼、(关键帧)动画等等。这里我们只考虑最主流的资产,也就是 3D 模型。而 3D 模型的表示又分为网格(Mesh)、体素(Voxel)、点云、SDF、NeRF 等等。一旦考虑到实际落地到渲染管线中,基本上只有一种主流表示可以选择:Mesh

三角网格。这个模型没有带贴图,所以看着是灰色,也就是下文提到的 “白模”。

从 CG 工作流程来看,从文字生成 3D 模型分两步:

AI 建模:给定文字输入,产出 3D 白模(即无贴图的模型);AI 画贴图:给定文字和白模,画上 diffuse 贴图或者 PBR 贴图组合(base color, metallic, roughness 等)。

从工业生产可控性的角度来说,用户会希望两步能够分离。而在学术界,大家更喜欢一步到位,对于可控性和 PBR 追求不高。

学术界通常不太考虑 AI 建模和 AI 贴图的分离,往往会一步到位,输入文字,得到带贴图的 3D 模型。这部分工作有两个 “流派”,下面简单梳理一下。

“原生 3D 派”

这一流派的特点是直接在 ShapeNet 等 3D 数据集上进行训练,从训练到推理都基于 3D 数据。一些有趣的工作如下:

3D-GAN 是 NIPS 2016 比较经典的早期工作了。比较直观,就是 GAN 的 3D 版本,以 voxel 为单位,生成 3D 模型。用 ShapeNet dataset,输入是一个 Gaussian noise,2016 年的时候还没实现 text conditioning。

3D GAN 的原理和生成效果

GET3D:通过 differentiable rasterizer (NVDiffRast) 加上类似 GAN 的架构,分别生成 mesh 和 texture,质量看起来也挺不错的,后面也会提到 differentiable rasterizer 会是 3D AIGC 很重要的基础算法。

GET3D 训练架构。

这一类基于 3D 数据的工作还包括 TextCraft (实现了 text conditioning)、AutoSDF、MeshDiffusion 等等。这类方法生成速度往往较快,但是也有比较直接的问题:由于 3D 数据集往往相对 LAION 等巨型数据集都小至少 3 个数量级(后续有讨论),这一类方法比较难实现数据多样性。比如说,生成数据集中存在的汽车、家具、动物等完全没问题,但是生成需要“想象力”的模型,比如 “一只骑在马背上的兔子”、“带着皇冠的鹦鹉”、“手持大锤、生气的牛头怪” 等,就比较有挑战了。由于 Stable Diffusion 等 2D AIGC 模型的想象力完全可以描述后者,用户自然也会期待在 3D 空间的 AIGC 也能做到类似的效果:给出各种奇奇怪怪的文字,AI 能够得到高质量的 3D 模型。这种“想象力”(本质上是在多样的训练数据集中插值)是 AIGC 的核心价值所在,但是目前 3D 数据集却较难提供。

“2D 升维派”

既然 3D 数据集无法满足数据多样性的要求,不妨曲线救国,借助 2D 生成式 AI 的想象力,来驱动 3D 内容的生成。这个流派的工作在最近乘着 Imagen、Stable Diffusion 等 2D AIGC 基础模型的突破取得了很多进展,因此本文着重讨论。

OpenAI Point·E: (论文链接) 只需要 1-2 分钟就可以在单块 GPU 上生成点云。第一步是以文字为输入,用 2D diffusion 模型(选择了 GLIDE)生成一张图片,然后用 3D 点云的 diffusion 模型基于输入图片生成点云。

Point-e 的算法和生成的效果

DreamFusion:很有意思的工作,大体思路是通过 2D 生成模型(如 Imagen)生成多个视角的 3D 视图,然后用NeRF 重建。这里面有个“鸡生蛋蛋生鸡”的问题:如果没有一个训练得比较好的 NeRF,Imagen 吐出的图会视角之间没有 consistency;而没有 consistent 的多视角图,又得不到一个好的 NeRF。于是作者想了个类似 GAN 的方法,NeRF 和 Imagen 来回迭代。好处是多样性比较强,问题也比较明显,因为需要两边来回迭代 15,000 次,生成一个模型就需要在 4 块 TPUv4 上训练 1.5 小时。

DreamFusion: 3D NeRF 和 2D 生成模型来回迭代优化

Magic3D: DreamFields 的升级版本,巧妙之处在于将重建过程分为了两步。第一步仅采用 NeRF(具体来说,是上一篇提到的 InstantNGP)进行比较粗糙的模型重建,第二步则采用一个可微的光栅化渲染器。NeRF 比较适合从 0 到 1、粗糙重建,更多的表面细节还需要更加特定的算法,比如说 differentiable rasterizer。

Magic3D 从 text 生成的 3D 模型

目前 DreamFusion / Magic3D 这一类算法的性能瓶颈有两点:一是 NeRF,二是依赖的 Imagen / e-diffI / SD 等 2D 生成模型。如果沿着这个算法思路进行优化,可能有下面两点机会:

NeRF 是否是最佳的 differentiable renderer? 从直觉上来说,并不是。NN 在 NeRF 中一开始只是作为一个 universal function approximator,如 Plenoxel 等工作其实说明了 NN 在 NeRF 中甚至不是必要的。 还有个思路是直接不用 NeRF,直接用 differentiable rasterizer,比如说 nvdiffrast,一方面能够提速,另一方面由于直接在三角网格上优化,能够避免 NeRF 的结果转化到生产过程中需要用的三角网格的损失。2D 生成式模型,如 Stable Diffusion 生成速度如果能够更快,那么对提速会相当有价值。GigaGAN 让我们看到了希望,生成 512x512 的图只需要 0.13s,比 SD 快了数十倍。

当然,SDF 也是可微性(differentiability)比较好的一种表示。Wenzel Jakob 组在这方面有一篇很棒的工作,重建质量非常棒,不过还没有和 AIGC 结合:

另外,除了生成通用资产,数字人的生成也是一个独立的有科研、商业价值的方向。影眸科技做的 ChatAvatar、MSRA 的 Rodin,都是最近有代表性的工作。

开源的 3D AIGC,以及 Taichi NeRF 的一些微小贡献

目前 DreamFusion 和 Magic3D 尚未开源,不过 GitHub 网友ashawkey 用 Stable Diffusion 和 PyTorch 实现了一个开源的 AIGC 工具:stable-dreamfusion,我们也把 Taichi NeRF 也作为一个 NeRF 后端集成了进去,这样没有 CUDA 的同学也可以生成基于 NeRF 的 3D 模型了。在没有 Taichi 的时候,在不同机器上编译、运行 CUDA 代码并整合进管线是个需要一定技巧的活,有了 Taichi 就不用担心了,而且自动求导的问题也被解决了。

实际测试,生成一个 3D 模型大约需要 30 分钟,下面是 “a hamburger” 的生成过程:

饿了,用 3D AIGC 生成个汉堡

DreamFusion 会从利用多个视角的 SD 结果进行重建,上图里面是各个视角下 NeRF 渲染的结果,可以观察到收敛过程。

数据、算法、算力,谁更重要?

在 AI 领域一直有“数据、算法、算力三要素”的说法,这里我们讨论一下对于 3D AIGC 这三要素的重要性排序。

数据:目前 3D AIGC 比较大的一个问题是 3D 的数据集(ShapeNet 有 51 K 模型、Objaverse 有 800+K、商业模型网站 SketchFab 有 5M)和 2D 的 LAION 的 5B 数量级的数据差了至少三个数量级,并且这个状况很可能短时间不太容易改变,因为 3D 数据天然的稀缺性、收集的难度等客观原因。况且,就算收集到了大量数据,如何无损地把他们喂给深度学习系统,也是一个悬而未决的问题。算法:这里面比较核心的算法是 differentiable renderer,目前看更像是 differentiable rasterizer。另外,效果比较好的工作基本上都有 multiscale 的特性,比如从 NeRF 到 coarse mesh 再到 fine mesh 逐级优化,一方面跳过 local minima,另一方面加快优化速度,具体如何设计这些 stages,为算法研发者留下了空间。换个角度,生成 2D 512x512 的图片开销尚能接受,如果不去想好的算法,直接暴力扩展到 3D,变成 512x512x512,这个计算量是非常可怕的。算力:3D AIGC 会在训练、推理两部分都需要算力。基于前面的假设,3D AIGC 目前看来还是会基于 2D 的基础模型,如 Stable Diffusion,加上并没有真正大规模的 3D 数据集,3D AIGC 的训练部分其实并不需要除了 fine-tune 2D 模型以外的大量算力。在“推理”部分,目前主流的做法都依赖于 differentiable renderer,如果要提高这部分的性能,常见的写法是手写 CUDA,并且手动写出对应的 gradient kernels。而一个可微分的 SIMT 编程系统会显著加速相关的研发、提高正确性。(打个广告,这一点上看,Taichi 确实有一定的优势 :-)

综上,我们认为对于 3D AIGC,算法 > 算力 > 数据。这意味着 3D AIGC 需要对计算机图形学、人工智能、可微编程框架等问题比较有洞见的团队来攻关。

虽然学术界不断有激动人心的进展,AI 建模、画贴图要落地依然是很有挑战的。一是目前的技术依然不够成熟,无法达到工业生产的标准,甚至有很远的距离;二是市场方面的风险依然存在。

本条回答内容,节选自太极图形 CEO 胡渊鸣的专栏文章《Taichi NeRF (下): 关于 3D AIGC 的务实探讨》,这篇万字长文,用了很大篇幅探讨 3D AIGC 产品化和商业化的挑战和机遇,如果你对 3D AIGC 和 NeRF 感兴趣,欢迎阅读和评论。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3