新智元报道
编辑:润 好困
继火爆全网的AI文生图,文生视频之后,文生3D场景的技术也来了!
只要不到30个字的提示词,瞬间就能生成这样的3D场景。
场景效果和文字的要求几乎分毫不差——「平静如玻璃的湖面,倒映出无云的天空,周围的山和水鸟的倒影呈现在湖中。」
「烈日照耀在无垠的沙漠之上,倔强生长的植物投下了明显的阴影。大风把小沙丘雕刻成一片金色的土地。」
而且针对生成的场景,还支持对不同的元素进行连续地修改和编辑!
网友看到效果之后惊呼,「我一辈子就在等这一刻了!」
研究团队计划在论文被接受后就在Github上公布项目的代码,但是在代码还未公布之时,这个项目就已经获得141颗星!
这个项目是由澳国立、牛津和智源研究院的科研人员开发的「3D-GPT」系统,它可以简单地根据用户提供的文本描述生成各种各样的3D模型和场景。
项目地址:https://chuny1.github.io/3DGPT/3dgpt.html
和文生图依赖的独立模型不同,3D-GPT依然还是利用了大型语言模型(LLM)的多模态和推理能力,将3D建模任务分解成多个子任务,由不同的代理完成,包括任务调度代理、概念化代理和建模代理。
研究人员表示,3D-GPT 将LLM定位为熟练的问题解决者,将程序性3D建模任务分解为可访问的部分,并为每个任务指定合适的代理。
而且整套系统无需任何训练,无需训练即可完成从文本到参数提取再到3D建模的过程。
具体来说,任务调度代理负责根据指令选择适当的程序生成函数。概念化代理对文本描述进行推理,补充缺失的细节。
建模代理推断函数参数,生成Python代码,通过API控制3D建模软件Blender来进行建模。
这套系统与Blender无缝集成,支持物体变形、材质调整、网格编辑、物理模拟等多种操作。
而且3D GPT框架可以增强用户提供的简短场景描述,使之变得更加详细,更加符合上下文。同时整合了程序生成方法,从丰富的文本中提取参数控制3D建模软件。
而且因为LLM能够提供优秀的语意理解和上下文能力,使得3D GPT能够生成各种各样的3D资产,而且支持连续地,有针对性地编辑和修改能力。
3D-GPT可以进行精细的对象控制,包括形状、曲线和细节的捕捉,从而产生细节丰富的建模。同时也可以操控大场景的生成。
而且3D GPT支持连续的指令输入,可以进行场景的编辑和修改。系统能够记住之前的修改,使新指令与场景上下文相连结,让使用者可以对已经生成的场景进行持续的编辑和修改。
而且,3D-GPT还支持通过自然语言针对某一项单独元素和功能的持续编辑,例如下图表明,用户可以通过变换输入的要求,单独针对天气效果进行修改。
3D-GPT
整体目标是基于一系列自然语言指令来生成3D内容。
其中,初始指令L0充当了对3D场景的全面描述,比如“一个多雾的春天早晨,露水亲吻的花朵点缀在被新发芽的树木环绕的郁郁葱葱的草地上”。
后续的指令用于修改现有的场景,例如指令如“将白色花朵变为黄色花朵”或“将场景转换为冬季环境”。
为了完成这一目标,研究人员引入了一个名为3D-GPT的框架,它使大型语言模型(LLM)能够充当解决问题的代理。
研究人员指出,让LLM直接创建每一个3D内容的元素面临重大挑战。由于缺乏专门的预训练数据,LLM在熟练的3D建模方面可能存在困难,因此,它们可能难以准确判断基于给定指令应该修改哪些元素以及如何修改它们。
为了应对这个问题,在研究人员的框架中,他们利用之前研究中的一个基于Python-Blender的过程生成器Infinigen,它配备了丰富的生成函数库。
为了使LLMs能够熟练地运用Infinigen,研究人员为每一个函数提供关键提示。这些提示包括函数文档,容易理解的代码,所需信息,以及用法示例。
通过为LLM提供这些资源,研究人员使它们能够发挥其在规划、推理和工具利用方面的核心能力。因此,LLMs能够有效地利用Infinigen进行基于语言指令的3D生成,这一过程是无缝和高效的。
在工具准备完成后,3D-GPT采用一个多代理系统来处理过程式3D建模任务。
该系统包含三个核心代理:任务调度代理、概念化代理和建模代理,如下图1所示。
它们共同将过程式3D建模任务分解为可管理的部分,每个代理专注于不同方面:3D推理、规划和工具使用。
任务调度代理在规划过程中起到关键作用。它利用用户指令查询函数文档,并随后选择必要的函数进行执行。
一旦选择了函数,概念化代理就会通过推理来丰富用户提供的文本描述。
在此基础上,建模代理推断出每个选定函数的参数,并生成Python代码脚本以调用Blender的API,从而促进相应3D内容的创建。此外,还可以使用Blender的渲染功能来生成图像。
任务调度代理用于规划
任务调度代理掌握了所有可用函数F的全面信息,能够高效地识别每个指令输入所需的函数。例如,当出现“将场景转换为冬季环境”的指令时,它会精确地找到像add_snow_layer()和update_trees()这样的函数。
任务调度代理的这一关键角色有助于在概念化代理和建模代理之间进行高效的任务协调。
如果没有它,概念化和建模代理必须为每个给定指令分析所有提供的函数F,这不仅增加了这些代理的工作量,还延长了处理时间,并可能导致意外出现的修改。
LLM系统、用户和任务调度代理之间的通信流程如下:
概念化代理用于推理
描述可能没有明确提供用于建模所需的详细外观描述。例如,考虑描述:“一个多雾的春天早晨,露水亲吻的花朵点缀在被新发芽的树木环绕的郁郁葱葱的草地上。”
当使用需要如树枝长度、树大小和叶子类型这样的参数的树建模函数时,很明显,这些具体细节并没有直接在给定文本中说明。
当指示建模代理直接推断参数时,它往往会提供简单的解决方案,比如从参数文档中使用默认或合理的值,或者从提示示例中复制值。这降低了生成的多样性并参数推断的过程更加复杂了。
建模代理可以使用工具
在概念化之后,3D建模处理目标是将详细的人类语言转换为机器可理解的语言。
Blender渲染
建模代理最终提供了带有推断参数的Python函数调用,这些参数用于Blender节点控制和渲染,从而生成最终的3D网格和RGB结果。
生成效果编辑和修改实验
研究人员的实验首先通过展示3D-GPT在一致生成与用户指令对应的结果方面的高效性来开始,涵盖了涉及大型场景和单个对象的各种情境。
随后,研究人员深入探讨了特定实例,以说明研究人员的代理如何有效地理解工具功能、获取必要的知识,并将其用于精确控制。为了深化研究人员的理解,研究人员进行了消融研究,系统地检查了研究人员多代理系统中每个代理的贡献。
大型场景生成
研究人员调查了3D-GPT基于场景描述控制建模工具的能力。
为了进行这个实验,研究人员使用ChatGPT生成了100个场景描述,提示如下:“你是一名优秀的作家,请为我提供10个不同的自然场景描述。”
研究人员收集了对这一提示的10次回应以形成他们的数据集。在下图2中,研究人员展示了3D-GPT的多视图渲染结果。
结果表明,研究人员的方法能够生成与提供的文本描述大致一致的大型3D场景,并展示了显著的多样性。
值得注意的是,所有3D成果都是直接使用Blender渲染的,确保所有网格都是真实的,从而使研究人员的方法能够实现绝对的3D一致性,并生成真实的光线追踪渲染结果。
单一类别的细节控制
除了从简洁描述中生成大型场景外,研究人员还评估了3D-GPT在建模对象方面的能力。研究人员评估了诸如曲线建模、形状控制和对对象外观深入理解等关键因素。
为此,研究人员展现了细粒度对象控制的结果。这包括从输入文本描述中派生的细微方面,如对象曲线、关键外观特征和颜色。
研究人员使用随机提示来指导GPT生成各种现实世界中的花朵类型。如图下3所示,研究人员的方法熟练地为每种花朵类型进行了建模,忠实地捕捉了它们不同的外观。
这项研究强调了3D-GPT在实现精确对象建模和细粒度属性控制方面的潜力。
子序列指令编辑
研究人员测试了3D-GPT在有效的人-代理通信和任务操纵方面的能力。
在下图4中,研究人员观察到研究人员的方法能够理解子序列指令并做出准确的场景修改决策。
值得注意的是,与现有的文本到3D方法不同,3D-GPT保留了所有先前修改的记忆,从而有助于将新指令与场景的上下文连接起来。
此外,研究人员的方法消除了对可控编辑的额外网络的需要。这项研究强调了3D-GPT在熟练处理复杂子序列指令用于3D建模方面的效率和多功能性。
单一函数控制
为了评估3D-GPT在工具使用方面的有效性,研究人员展示了一个说明性示例,突出了研究人员的方法在控制单一函数和推断参数方面的能力。
下图5举例说明了3D-GPT基于输入文本描述来建模天空外观的能力。
负责生成天空纹理的函数并不直接将颜色信息与天空外观相关联。相反,它依赖于Nishita天空建模方法,该方法需要对现实世界的天空和天气状况有深刻的理解,并考虑输入参数。
研究人员的方法熟练地从文本输入中提取关键信息,并理解每个参数如何影响最终的天空外观,如图5(c)和(d)所示。这些结果表明,研究人员的方法可以有效地使用单一函数以及推断相应的参数。
参考资料:
https://chuny1.github.io/3DGPT/3dgpt.html