0、前言
本文是自己最近在项目上的需要做的一些调研和自己的一些看法,以分享为主。
2D AIGC(文生文、文生图、图生图)在今天大放异彩,产生了许多惊艳的效果,如ChatGPT系列、Imagen、DALLE2、Stable Diffusion等,那我们自然会想到,如果延申到三维呢,如果能跳过Maya/Max/Blender/UE这些建模软件,我们仅需要输入我们对3D模型的描述或者它的一些2D图像就能生成呢,这会带来极大地便利,同样也是极大的挑战.
1、数据
生成3D资产要比生成2D内容复杂得多,3D资产包括模型、贴图、骨骼、关键帧等,这里我们暂时只考虑3D模型,3D模型数据可以分为欧几里得和非欧几里得表示,先熟悉一下这些表示,3D欧几里得数据有:
1)体素
体素用于表示规则间隔的三维网格上的单个样本或数据点,类似于二维空间中的像素,它在数据点中存储高维特征向量,如几何占用率、体积密度等。体素只表示该网格上的一个点,而不是体积;体素之间的空间不在基于体素的数据集中表示。体素的表示很简单,空间结构清晰,具有高度的可扩展性,可以很容易地应用于卷积神经网络。然而,它效率很低,因为它既代表了场景的占用部分,又代表了未占用的部分,这导致了大量的不必要的存储需求。这导致体素不适合表示高分辨率数据。
2)多视角图片
多视图图像是指其每个图像是从不同的角度表示对象或场景,例如正面、侧面和顶部,由于从现实世界收集 3D 数据非常耗时,并且深度学习范式依赖于大量数据进行训练,因此多视图图像的可用性是其最大优势。它的缺点是多视图图像不能严格定义为 3D 模型数据,但它提供了 2D 和 3D 可视化之间的桥梁。最近,NeRF已成为三维重建的新方法,非常适合大规模多视图数据集的基于学习的可泛化NeRF方法的大量数据需求。
3D非欧几里得数据表示有:
1)网格(Mesh)
3D网格是3D形状最流行的表示之一。3D网格结构由一组多边形组成,称为面,这些多边形是基于一组顶点来描述在3D空间的坐标,这些顶点都与一个连接列表相关联,该列表描述了这些顶点是如何相互连接的。由于网格只对场景表面进行建模,并且提供了表面点的连通性来建模点关系,因此它们更紧凑。
2)点云
点云是三维空间中三维形状的无序离散样本集。点云是深度传感器的直接输出因此在 3D 场景理解任务中非常流行,尽管很容易获得,但点云的不规则性使得它们难以使用传统的 2D 神经网络进行处理。
3)神经场
神经场是由神经网络完全或部分参数化的域,并由神经网络在 3D 空间中的场景或对象完全或部分表示。在 3D 空间中的每个点,神经网络可以将其相关特征映射到属性。神经场能够表示任何分辨率和未知或复杂拓扑中的 3D 场景或对象,因为它们的连续表示。此外,与上述表示相比,只需要存储神经网络的参数,导致内存消耗低于其他表示。NeRF 是神经场 3D 重建的最新新兴表示,具有高质量和逼真的 3D 模型生成的优势,以任何角度和距离呈现逼真的对象表面和纹理细节.此外,它可以从任意数量的输入图像生成 3D 模型,而无需特定的处理或标记输入。神经场的另一个优点是神经网络可以在训练后在低功耗设备上操作。多边形射线追踪以高帧率呈现高分辨率和逼真的场景,这需要昂贵的显卡,但高质量的神经场可以在手机甚至网络浏览器上渲染。然而,神经场技术也有一些缺点,例如需要大量的计算资源和时间进行训练,以及处理大规模场景和复杂的光照条件的困难,以及无法结构化数据,这使得直接应用于3D资产变得困难。
至今在3D表示方面也没有统一的表示,但如果3D-AIGC一旦考虑到实际落地到渲染管线中,只有Mesh一种主流的表示,因为其可以提供足够的灵活性(例如可以通过调整顶点的位置和连接关系创建各种形状和曲面)和可编辑性(例如可以添加、删除或移动顶点、面和边,从而改变物体的形状),以满足各种场景的需求,并且能够与现有的渲染技术和工具无缝集成。而像体素,对于复杂形状的表达能力相对较弱,难以精确地表示细节和曲面,同样也需要大量的内存和计算资源来存储和处理体素数据。像点云,通常是无须和不规则的,同样占用较多的存储空间,并且在进行渲染和处理时,需要额外的算法和技术来处理点之间的连续性和拓扑关系。
生成3d内容不只是一张单角度的图片。要达到像今天MJ和SD一样生成2D图片一样质量的3D网格,需要像MJ和SD一样,有海量的3d mesh来学习。或者海量的3d mesh对应的多角度图片。stable diffusion使用了大概20多亿张带文字的图片来训练。 这20多亿图片,代表人类从单视角描绘世间万物的内容。用提示词生成图片的内容特征,也就在这20多亿图片包含的内容里了。sd根据提示词指引,通过概率模型来创造出一副关于提示词描述内容的图片。sd能理解的提示词特征,其实也就在这20多亿图片上对应文字的内容里。要想使用类似stable diffusion的方法去生成高质量3d mesh 内容,可以认为也需要差不多数量级已经制作好的3d 内容(以及对应文字)来训练。如果算上可以优化的空间,几千万到几亿的3d物体内容还是需要的。或者几千万到几亿物体的多个角度图片也行。
目前 3D AIGC 比较大的一个问题是3D 的数据集(ShapeNet 有 51 K 模型、Objaverse 有 800+K、商业模型网站 SketchFab 有 5M)和 2D 的 LAION 的 5B 数量级的数据差了至少三个数量级,并且这个状况很可能短时间不太容易改变,因为 3D 数据天然的稀缺性、收集的难度等客观原因。况且,就算收集到了大量数据,如何无损地把他们喂给深度学习系统,也是一个悬而未决的问题。
3、现有技术
现有技术在3D-AIGC上的研究可分为两种,一种是从训练到推理都基于3D数据,一种是借助2D-AIGC的先验知识来驱动3D的生成。
前者的一些研究如下:
GET3D:基于可微表面建模、可微渲染以及2D 生成对抗网络,生成具有复杂拓扑结构、丰富的几何细节和高保真纹理的显式纹理3D 网格的生成模型。
CLIP-Sculptor:一种文本到图像 3D 形状生成方法,能够在不需要(文本、形状)对的情况下生成高保真和多样性的形状。
AutoSDF:将 3D 形状上的分布建模为 3D 形状的离散化、低维、符号网格状潜在表示上的非顺序自回归分布,提出了一种用于 3D 的自回归先验来解决多模态 3D 任务,例如3D形状制作、重建和生成。
MeshDiffusion:用可变形的四面体网格表示网格,然后在这个直接的参量化上建立扩散模型.
这类方法生成速度往往较快,但是也有比较直接的问题:由于 3D 数据集往往相对 LAION 等巨型数据集都小至少 3 个数量级,这一类方法比较难实现数据多样性。比如说,生成数据集中存在的汽车、家具、动物等完全没问题,但是生成需要“想象力”的模型,比如 “一只骑在马背上的兔子”、“带着皇冠的鹦鹉”、“手持大锤、生气的牛头怪” 等,就比较有挑战了。
后者借助2D-AIGC的先验知识来驱动3D的生成的一些研究如下:
ProlificDreamer:在这项工作中,我们建议将3D 参数建模为一个随机变量而不是分数蒸馏抽样中的常数,并提出了变分精馏(VSD) ,一个基于粒子的原则变分框架来解释和解决上述问题在文本到3D 生成。
Point·E: 以文字为输入,用 2D diffusion 模型GLIDE生成一张图片,然后用 3D 点云的 diffusion 模型基于输入图片生成点云,在单个 GPU 上仅 1-2 分钟生成3D模型,质量上没有达到sota,但能比其他方法快一到两个数量级。
DreamFusion:通过 2D 生成模型生成多个视角的 3D 视图,然后用NeRF重建。作者利用GAN的思想:如果没有一个训练得比较好的 NeRF,2D生成模型吐出的图会视角之间没consistency;而没有 consistent 的多视角图,又得不到一个好的 NeRF。NeRF 和 Imagen 来回迭代好处是多样性比较强,问题也比较明显,因为需要两边来回迭代 15,000 次,生成一个模型就需要在 4 块 TPUv4 上训练 1.5 小时。
Magic3D: 它旨在解决DreamFields的两个问题:NeRF优化慢和NeRF的低分辨率。先利用低分辨率扩散先验得到一个粗糙模型,然后使用稀疏的三维哈希网格结构加速,利用粗糙表示作为初始化,进一步优化了纹理三维网格模型与高分辨率潜在扩散模型相互作用的一个有效的可微渲染器。
Score Jacobian Chaining:利用扩散模型学习预测梯度向量场,提出在学习梯度上应用链式规则,并通过可微渲染器的雅可比变换反向传播扩散模型的得分,将其实例化为一个体素辐射场。这样将多个摄像机视点的2D 分数聚合为3D 分数,并重新使用预先训练好的2D 模型生成3D 数据。
Latent-NeRF:将分数提取法应用于公开的、计算效率高的潜在扩散模型,以文本引导一个 NERF 模型来生成一个三维物体。
Fantasia3D:其主要思想是几何和外观的分离建模和学习。对于几何学习,依赖于一个混合的场景表示,并提出编码的表面法线提取的表示作为输入的图像扩散模型。对于外观建模,将空间变化的双向反射分佈函数(BRDF)引入到文本到3D 的任务中,并学习生成的表面的真实感渲染的表面材料。其提出的分离框架与流行的图形引擎更加兼容,支持生成的3D 资产的重新照明、编辑和物理模拟。
TextMesh:主要针对以往3D生成模型的两个主要缺点。一是他们通常使用的不是3D 网格,而是神经辐射场(NeRF) ,这使得它们在大多数实际应用中不切实际。其次,这些方法往往会产生过于饱和的模型,使输出产生卡通化的效果。因此,其通过扩展NeRF,采用SDF骨干,改进了3D 网格提取,提出一种新的方法来调整网格纹理,消除高饱和度的影响,并改善输出的三维网格的细节。
Instruct-NeRF2NeRF:提出了一种用文本指令编辑 NERF 场景的方法。给定一个场景的 NERF 和用于重建它的图像集合,使用图像条件扩散模型(DirectPix2Pix)来迭代编辑输入图像,同时优化底层场景,产生一个遵循编辑指令的优化的3D 场景.
Zero-1-to-3:利用了大规模扩散模型对自然图像学习的几何先验。视点条件扩散方法可以进一步用于单幅图像的三维重建任务使用一个合成的数据集来学习相对摄像机视点的控制,允许在一个指定的摄像机变换下生成相同对象的新图像。给定一张RGB图像,视点条件扩散方法可以用于单幅图像的三维重建任务。
个人看法是如果3D数据集足够多,或许走前者的技术路线效果更好,但感觉短期内无法达到,而如果乘着现在大红的SD等2D AIGC基础模型的突破来走的话,就在算法上有很高的要求,也容易出现很多问题,比如结合 NeRF 和文本到图像先验实现文本到图像到 3D 生成,推理时间长、3D一致性问题、可控性差、生成内容等也存在很多问题,不能很好地应用于工业需求,无论是DreamFusion、Magic3D等在differentiable renderer上还需要很多优化(其放出来的demo大多是经过精心挑选的),此外,2D生成式模型性能也对其有影响。
感觉自己跑下来,Magic3D、TextMesh、zero-1-to-3这几个效果要好一些,这里放一个网址。上面集成了一些3D AIGC的一些方法,可以自己去试一下
4、应用场景
3D模型广泛应用于游戏、影视、动画、室内设计、建筑和各种科学领域,还能与AR、VR、3D打印等技术结合,为用户提供更丰富和更沉浸的三维体验,从市场角度,3D 资产的最大消耗者就是游戏产业。具体比较游戏与影视行业:游戏行业中,不少重资产品类(如 3D MMORPG)研发成本的1/3~1/2 用于美术,而美术开销中又有 1/2 以上是 3D 资产开销。影视行业中虽然也有特效镜头需要用到 3D 资产,但其中灯光、合成等环节却是比 3D 资产更大的开销。因此,游戏行业中的 3D 资产比重,要比影视大不少。
考虑到游戏市场整体比影视等其他市场大,而其中的 3D 资产占研发费用的比例又比其他市场更高,我们优先集中讨论 3D AIGC 在 游戏行业 的应用。这里又有两种:
一、面向专业的游戏美术。这边的主要挑战是游戏生产对于资产的质量要求是极高的,要做到质量达标,目前看来技术风险很大。
二、直接面向用户(UGC 场景)。质量要求会相对低一些。但是这里的问题是,和 2D 资产(图片)不一样,大众并不能直接消费 3D 资产,必须有一个好的场景。而 UGC 游戏是一个比较不错的场景。为玩家提供丰富创造自由度、并且创造巨大商业价值的游戏有很多,比如 Minecraft(史上销售份数最多的游戏)、Roblox(目前市值 $30B)、Fortnite($6B revenue) 等。
5、展望
3D-AIGC这方面其实产出还相对空白,需要走的路也很长,个人认为目前可走的路有两条:一是结合2D AIGC+NeRF走到3D,虽然NeRF不能直接应用于传统的3D应用场景,但其强大的表示能力使其能够具有无限的应用前景。未来,nerf的研究可能集中在从密度 MLP 中提取 3D 网格、点云或 SDF,并集成更快的 NeRF 模型。还有待观察纯文本引导形状生成的范式是否能够应对所有场景。也许结合更直观的指导机制,例如草图指导或图片指导,可能是更合理的选择。二是依靠LLM或者多模态模型来解决。
我个人认为要在现有3D AIGC的工作基础上,还需做到以下几点提升:
1)质量
对于 3D 生成,受 CLIP 的弱监督和低分辨率的限制,放大的结果并不完美。此外,在同一提示下很难生成更多样化的图像。对于相同的提示,CLIP 文本特征总是相同的。保真度和速度是两个指标,通常需要权衡。此外,在DreamFusion生成的3D场景中经常会遇到失真和模糊图像,当文本提示和随机种子发生变化时,可以观察到不稳定的3D场景。这个问题主要是由于缺乏从2D先验扩散模型中感知3D信息造成的,因为传输模型不知道从哪个方向观察到,通过从所有视点(包括侧面和背面)生成前视图几何特征,导致3D场景的严重失真。
在网格方面,在游戏资产需要有比较好的 topology(布线等)、UV 分布,对面数(poly count)也有较为严格的限制,目前的 3D AIGC 系统基本上无法满足这种需求。
在纹理方面,对于 PBR 流程的游戏,需要 AI 生成较好的 base color、metallic、roughness、normal 等贴图,需要较好的从 2D AIGC 分离出 PBR channel 的算法(其实已经有一些了);如果是风格化的游戏,一张高质量的 diffuse 也可以满足需求,只要质量够高。如果依赖于多个视角的 2D AIGC 来绘制 3D 模型的贴图,如何剔除光照、阴影的影响,且保持视角之间的一致性,会成为比较大的挑战。
质量是最令人担心的点,如果模型生成的质量差或者泛化性不够就白搭,这方面除了算法层面的创新。必然还需要做很多工程层面的 dirty work。
2)可控性
尽管 Text-to-3D 可以生成令人印象深刻的结果,因为文本到图像扩散模型本质上是不受约束的,但它们通常往往会受到引导崩溃的影响。这使得它们能够准确地将对象语义与特定 3D 结构相关联。可控性差的问题一直是文本到图像生成任务的致命缺陷,这一点目前看也许要寄希望于高效的数据处理与 LoRA 之类的技术和深入的 prompt engineering研究了。
3)生成速度
通过利用基于扩散模型的预训练模型作为强大的先验和学习目标来生成 3D 内容的致命问题是推理过程太慢。即使在只有64×64的分辨率下,DreamFusion 使用 TPUv4 为每个提示推断 1.5 小时,并且推理时间随着分辨率的增加而迅速上升。如果这方面能接近2D的生成速度就显得很完美了!