代码原生生成高度可编程3D资产 (2026)

Hacker News Top 论文

摘要

Nova3D引入了3D资产的代码原生生成,生成可执行的Blender程序而不是不透明网格,从而在结构化基准测试中增强了可编程性和性能。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/18 16:03

# 代码原生生成可编程3D资产  
以可执行程序形式生成结构化、可编辑、满足约束的3D资产  
来源: https://arxiv.org/html/2607.22738  
Muhammad Bilal  
所属机构: 爱丁堡大学  
[6pt]  
代码与基准测试: https://github.com/RareSense/Nova3D  
Abdullah Hussain  
Hassan Baig  
[4pt]  
Raresense Inc  

###### 摘要  
当前3D生成模型大多只生成最终表面:视觉效果强但本质上不透明的网格。交互式3D世界需要的远不止表面。它们需要命名部件、装配层级、可测量约束、局部编辑手柄以及用于铰接的关节点。我们提出Nova3D系统,该系统将3D资产生成为可执行的Blender源代码;编译后的网格(二进制glTF/GLB格式)被视为产物,而非资产本身。由于输出是程序,语义手柄在生成时就存在,而非事后通过分割或绑定恢复。我们在Nova3D-Bench上进行评估——这是一个冻结的、基于规格的基准测试,包含6个领域、3个难度等级的54个项目,支持文本和图像输入,并与4类共11个基线(网格原生、部件结构化、代码原生、CAD)及同一LLM的消融实验进行比较。Nova3D为54/54个项目均生成了可执行程序和有效产物。每个资产都暴露了组织在父子装配树中的命名部件;而网格原生、CAD或分割基线均无法实现这一点。它满足了52个提示中51个的数值和计数约束(最佳基线仅满足11/52),通过了18个盲测局部编辑(其中18个完全保持局部性),并在12个资产中实现了59个关节的铰接,几何有效性达98.3%(其他基线均无原生关节)。其几何质量具有竞争力:在结构化领域的成对形状质量评比中获胜,仅次于最强的网格原生模型,同时在纹理逼真度上略逊于烘焙PBR系统。核心成果在于表征层面:代码原生生成将生成的3D对象从不透明表面转变为可编程资产,下游系统可对其进行检查、测量、编辑和动画处理。  

## 1 引言  
网格原生3D生成在合成表面方面已变得非常出色[1,2,7,6,8]。给定提示后,这些系统能生成视觉逼真的网格。但将要存在于交互式世界中的生成对象不仅仅是用于渲染的东西;它是智能体、脚本、物理引擎或动画师必须操作的对象。操作对象需要手柄:命名部件、计数、测量、移动、编辑以及附加关节点的能力。网格原生生成器最多提供融合表面及少量通用节点(如`geometry_0`)。这些手柄并非免费获得;必须通过单独的分割、命名和绑定流程在事后恢复。Nova3D采取了不同路径。它不生成最终表面,而是生成资产的*源代码*:一个自包含的Blender Python程序,其编译后的GLB文件仅是运行程序的输出。指导原则很简单:程序即资产,网格即编译产物。由于资产是程序,交互式世界所需的结构在生成时就已存在。网格原生生成器发出`geometry_0`的地方,Nova3D发出`Gear_12T_Small_Tooth_07`和`Gear_32T_Large_Rotating_Axle_Pivot`,并组织成包含枢轴、材质和编辑手柄的父子层级结构(图8)。图1展示了系统概览。这是一次表征转变,而非视觉优越性的宣称。Nova3D并不旨在纹理逼真度或自由形态有机表面上超越网格原生生成器。这些方法在该领域很强,我们的结果将Nova3D置于其最佳者之后,这锚定了比较而非颠覆。其贡献在于,可执行程序保持了资产的可检查、可寻址、可测量、可编辑和可动画特性,而烘焙网格本身无法暴露这些特性而无需后续处理。我们将论点总结为:  
> *Nova3D表明,以代码形式生成3D在结构化领域保持了相当或更优的形状质量,同时增加了网格原生生成器无法原生暴露的结构性功能。*  
我们用单一因果链而非指标目录支持这一点:(1) Nova3D *可靠地*生成可执行的Blender源代码和有效GLB,而同一模型在没有Nova3D系统包的消融实验中无法做到,这回应了“这只是让LLM写Blender”的常见质疑。(2) 生成的资产在视觉和几何上*足够*:形状有竞争力,纹理稍逊。(3) 代码表征暴露了*原生语义结构*:命名部件和真实的装配层级。(4-6) 该结构使约束*可测量*、局部编辑*可行*、铰接*可行*。全文中,比较不是单一通用排行榜;每个轴都使用能暴露相关功能的基线族,如表3所述。  

## 2 相关工作  
生成式3D的主流工作直接合成最终表面。基于优化的系统如DreamFusion[1]和Magic3D[2]将2D扩散先验提炼为3D表示,而前馈系统包括Point-E[3]、Shap-E[4]、Zero-1-to-3[5]、TripoSG[6]、TRELLIS[7]、Hunyuan3D[8]和商业软件Meshy[9]在速度、保真度和纹理质量上持续进步。这些方法是感知保真度的合适比较类别,我们视之如此。其限制是表征而非视觉:输出是融合网格或带有少量通用节点的不透明重建,因此寻址“前轮”或“肘部枢轴”需要在生成后进行单独的分割和绑定阶段。Nova3D与该系列工作互补,因为它将构建过程和场景图作为输出本身的一部分。  

第二类针对部件结构。Part123[14]、PartGen[15]和PartCrafter[16]从图像线索恢复或联合生成部件级网格,而PartSLIP[11]、SAMPart3D[12]和Find3D[13]等分割方法分解给定形状,PartNet[10]和Name-That-Part基准[17]提供标准数据集和标签感知度量。该系列的输出通常是扁平或模式条件的:无名部件网格或需要答案词汇表作为输入的区域标签。因此,我们的评估包括作为闭卷原生分割基线的PartCrafter,以及作为神谕式后分割器的CubePart(操作于TripoSG网格并接收规格部件名称),其评分原生命名手柄和装配结构而非分割IoU(该基准无共享点级掩码)。  

最接近我们方法的是语言模型以代码形式编写3D内容的系统。3D-GPT[18]、L3GO[19]、SceneCraft[20]、LL3M[21]和BlenderLLM[22]发出过程式或Blender脚本,验证了代码是结构化3D的自然媒介。它们也暴露了Nova3D所针对的实际差距:一些是场景布局而非单资产生成器,一些依赖未发布的后端,而原始脚本生成缺乏鲁棒修复、验证、层级纪律和可靠导出。  

CAD文献在更窄的基底上追求相同的表征思想:DeepCAD[23]、Text2CAD[24]、Text-to-CadQuery[25]、CAD-Coder[26]和CADFusion[27]生成可编辑的CAD程序或B-rep实体,这些实体有效、紧凑且通常水密,但通常编译为融合实体或少量通用体,在机械提示上最强,而非纹理化多领域资产。我们直接与BlenderLLM比较,与Text2CAD、Text-to-CadQuery和CAD-Coder等可运行CAD基线比较,并与使用相同模型和路径但没有Nova3D系统包的朴素同一LLM消融实验比较,隔离系统而非基础模型的贡献。  

最后,我们的评估协议建立在先前的自动3D评估工作之上。GPTEval3D[30]表明,基于GPT-4V式的渲染视图成对判断与人类偏好一致并聚合成Elo排名,我们遵循此协议用于感知保真度,同时保持视觉轨道与结构主张分离。可执行CAD基准如CADSmith[28]和CADTestBench[29]启发我们选择用自动化测试而非仅视觉分数来评分约束。现有基准各针对问题的不同方面:T3Bench[31]和GT23D-Bench[32]衡量渲染质量和文本对齐,Objaverse[33]提供规模但无受控构建任务,ABC[34]、Fusion 360[35]和GenCAD-Code[36]与参数化CAD基底绑定。Nova3D-Bench解决了这些基准遗漏的交集问题,是对它们的补充而非替代。  

## 3 方法:Nova3D代码原生生成  
Nova3D的贡献是表征契约,而非特定提示。资产以程序形式生成,执行时构建一个命名、分层、可检查约束的对象(图1)。  

### 3.1 输入与输出  
Nova3D接受文本提示、草图或参考图像,或与编辑指令配对的现有设计。每次运行生成可执行的`code.py` Blender程序、编译的`model.glb`、命名网格节点、命名组节点、关节点/枢轴手柄以及带有顶点烘焙环境光遮蔽的材质。运行时、提示脚手架和编排在所有六个评估领域中固定;只有每个项目的请求变化。生成仅看到清单提示(及参考图像,如有),而非基准规格,因此第7-10节的命名和结构结果是闭卷的。  

### 3.2 代码作为真实来源  
Blender源代码存储构建意图;GLB是编译结果。源代码中的命名对象成为导出场景图中的手柄,这些手柄使得约束可测量、编辑局部化和铰接可行。这是事后分割完成网格无法恢复的属性:构建逻辑从未存在。图2显示了实际生成程序的摘录;同一资产的导出场景图见图10b。  
```python
# 维度是从请求派生的命名常量
BASE_FLANGE_R = 0.170
BASE_BOLT_COUNT = 8
SHOULDER = Vector((0.0, 0.000, 0.405))  # 物理关节点位置
ELBOW = Vector((0.0, -0.105, 0.865))

def set_pivot(obj, pivot_world):
    # 部件原点 = 其枢轴
    obj.data.transform(Matrix.Translation(-Vector(pivot_world)))
    obj.location = Vector(pivot_world)

core = build_arm_core("Lower_Arm_Core")  # 每个部件一个命名网格
set_pivot(core, SHOULDER)  # 旋转此节点即运动
parent_to(core, shoulder_parent)  # 在Axis_2_Shoulder_Pitch下
```  
图2:生成程序摘录(桌面机器人臂,节选)。维度是命名常量,每个部件是单独命名的网格,其原点设置在物理枢轴处,并父级到命名关节点组。这就是为什么维度可根据源代码自身的锚点检查,以及“让它更高”只需编辑一个常量。  

### 3.3 感知、验证与程序合成  
图1中的流程通过感知、验证、合成和验证阶段序列,从单个条件输入恢复可编辑资产。令`x∈R^{H×W×3}`表示输入视图(草图、照片、渲染或蓝图),`t`表示文本提示...

相似文章

我构建了一个工具,可以生成由独立逻辑部件组装的3D对象(例如,视频中生成的微波炉具有完整的内部组件和一扇可开关的门)

Reddit r/artificial

一款名为Nova3D的新型开源工具利用大语言模型(LLM)生成具有独立逻辑部件的3D对象(例如,带有内部组件和可开关门的微波炉),不同于传统的整体式AI生成器。它通过编写Blender Python代码,创建干净、模块化的GLB导出文件,适用于动画和编辑。