本文由 莫潇羽@无忆研习社(www.wuyi.wiki)撰写,转载请注明出处。
快速摘要
一句话结论先放这儿:如果你一直被"扔一张图进去,出来的 3D 模型从远处看还行、凑近看就散架"这件事折磨,那么 Pixal3D 值得你认真看一遍。它由清华大学、腾讯 ARC 实验室、惠灵顿维多利亚大学联合做出来,论文已被 SIGGRAPH 2026 接收,核心动作只有一个——不再让网络去"猜"图像和三维空间的对应关系,而是用反向投影把每个像素的特征显式地"抬"进三维体里,让生成出来的几何与材质能贴着输入图走,保真度直接逼近真实重建的水平,并且原生输出带 PBR 材质的 GLB,可以直接拖进 Blender、Unity、Unreal 用。 我自己把它的开源仓库、论文、在线 Demo 全部跑了一遍,这篇就把它"为什么这么设计""每一块到底在干嘛""怎么在自己机器上跑起来""哪些图喂进去效果好、哪些会翻车"一次讲透。
下面这篇是我整理的完整拆解:从单图转 3D 这件事本身的难点说起,逐层讲清反向投影、稀疏 SDF、两阶段生成、原生 PBR 这四块核心,再带一遍部署全流程和我实测下来的适用边界。术语我都会用大白话先解释一遍,新手也能跟得上。想看完整拆解,往下翻。
一、先把问题摆清楚:单图转 3D 到底卡在哪儿
1.1 这件事为什么有人抢着做
先说清楚我们在聊的是什么。所谓"单图转 3D",输入只有一张普通的 RGB 图片(就是手机随手拍、或者画师画出来的一张二维图),输出是一个可以旋转、可以拿去渲染、能导进引擎的三维模型。
这件事的价值很直白。过去做一个能用的三维资产,要么靠美术一点点建模,要么靠多张照片做扫描重建,时间和门槛都不低。如果一张图就能换一个像样的模型,那游戏里的道具、电商详情页里能 360 度转的商品、虚拟展厅里的陈列品、角色原型的快速试做,整条链路的效率会被拉起来一大截。我自己折腾这一块有一阵子了,最直接的感受是:能不能"一张图出活"不是关键,关键是出来的东西能不能用。
而"能不能用",本质上卡在一个词上——保真度(fidelity)。
1.2 保真度差,差在哪
这里要解释一下保真度这个词。它衡量的不是"生成的模型好不好看",而是"生成出来的三维资产,在像素级别上忠不忠于你那张输入图"。你输入一把侧面拍的椅子,它椅背的弧度、椅腿的粗细、扶手那一小段倒角,模型上对不对得上,这就是保真度。
老一代的单图转 3D 方案,保真度普遍上不去,凑近看总有点"塑料感"或者"它好像懂又好像没完全懂我那张图"的别扭。我把这类毛病拆成两个根:
|
老毛病 |
具体表现 |
用户那头的感受 |
|
隐式对应关系含糊 |
图像特征靠注意力机制"泡"进网络,像素和三维点没有明确绑定 |
边缘飘、纹理糊、细节丢 |
|
标准空间生成 |
物体先在一个"标准朝向"里被生成,再事后对齐图像 |
输入是侧面图,输出却被"脑补"成正面标准件 |
1.2.1 隐式对应关系这个老毛病
绝大多数 3D 原生生成模型的做法是:把输入图压成一串特征向量(也叫 token),然后通过注意力机制(attention,可以粗暴理解成"网络自己决定该多看图里哪一块")把这些特征"喂"给三维生成的过程。
问题出在"喂"这个动作太松了。网络确实看了图,但图里某个具体像素,到底对应三维空间里哪个点,没有人明确告诉它,全靠网络在海量训练里自己悟。悟得好就还行,悟得不好,边缘就开始飘、纹理就开始糊、小结构直接被抹掉。这就是论文里反复强调的"隐式 2D–3D 对应关系问题"——关系是有的,但模糊。
1.2.2 "标准空间"带来的视角漂移
第二个根更隐蔽。很多模型是在所谓 canonical space(标准空间)里生成物体的,简单说就是:不管你输入图是什么角度拍的,它内部都先按一个"标准朝向"把物体造出来,再回头去和你那张图对齐。
后果就是那个经典翻车现场:你明明喂的是一张侧面图,它输出却自动"脑补"成一个端端正正的正面标准件,轮廓整个偏掉。对做产品展示、做角色原型的人来说,这种偏移是致命的,因为你要的就是"和这张图一模一样的那个东西",不是"一个长得差不多的同类"。
1.2.3 为什么保真度差一点,生产里就废一片
可能有人会觉得,差一点点细节而已,至于这么较真吗?我用一个通用化的例子说明一下为什么这件事在真实生产里是放大的。
假设要做一个虚拟陈列场景,里面摆十个不同造型的器物,每个都来自一张参考图。如果单个模型的保真度只有"七八成像",单看一个还能忍,十个摆在一起、再加上灯光一打,那种"哪里说不上来但就是不对"的违和感会被叠加放大。更要命的是后面的返工成本:美术得一个个把模型捞出来,对着原图手动修轮廓、补细节、重调材质,这一道工序的耗时往往比"生成"本身多好几倍。
所以保真度对生产的真正意义不是"好不好看",而是"省不省后面那一大段人力"。一个保真度高到能直接用、顶多轻微润色的模型,和一个看着像但处处要返工的模型,对一条产线来说是两个物种。这也是为什么 Pixal3D 把"逼近重建级保真度"当成最大卖点——它瞄准的不是 demo 好看,是真能省事。
把这三个根捏在一起看,结论就清楚了:要把保真度顶上去,必须把"图像像素 ↔ 三维结构"这层关系,从"靠猜"变成"明确写死"。Pixal3D 整套设计,就是冲着这一点去的。
二、Pixal3D 的核心思路:把"猜"换成"对齐"
2.1 "像素对齐"到底对齐了什么
Pixal3D 这个名字里的 Pixal,谐音 Pixel-Aligned,"像素对齐"。这四个字是它整套方案的灵魂,我用大白话翻译一下它在对齐什么:
输入图里的每一个像素,都和三维空间里的某个明确位置,建立一对一的对应关系——不是网络猜出来的关系,是用相机几何算出来的、写死的关系。
对比一下就明白差别有多大:
|
维度 |
传统隐式注入 |
Pixal3D 像素对齐 |
|
像素与 3D 点的关系 |
网络自己学,模糊 |
几何算出来,显式 |
|
生成所在的空间 |
标准空间,事后对齐 |
直接在输入视角对应的 3D 空间里生成 |
|
轮廓一致性 |
容易漂移 |
贴着输入视角,不漂 |
|
局部细节 |
训练好坏波动大 |
稳定保留 |
|
保真度上限 |
受限于注意力学到的关系 |
逼近真实重建 |
2.2 在你给的那个视角里直接生成
Pixal3D 不在"标准朝向"里造物体,而是直接在输入图对应的那个视角下生成三维结构。这一步换得很关键:既然生成过程本身就发生在和输入图一致的视角里,那"输出被脑补成另一个朝向"这个老问题,从根上就没了。轮廓不会偏、局部不会乱,因为它压根没离开过你那张图所在的视角。
这也是我个人觉得 Pixal3D 最值得讲的地方:它没有去堆更大的 Transformer、也没有单纯靠喂更多训练数据,而是把计算机视觉里很经典的几何(相机投影那套东西)重新请回到了神经网络架构里。一句话给它定个位:它把"3D 生成"这件事,往"3D 重建"那一侧拽了一大步。 重建之所以保真,是因为它有明确的几何约束;Pixal3D 借的就是这股劲。
我特别想强调"重新请回几何"这件事的份量。这几年深度学习领域有个隐隐的惯性:能交给网络端到端学的,就别手写规则,越纯粹的"数据驱动"听起来越高级。这套思路在很多任务上确实有效,但它有个代价——网络得用海量数据和参数,去把一些本来用几何公式几行就能算准的关系,重新"近似"出来,近似得好不好全看运气和数据量。Pixal3D 的做法是反潮流的:相机投影那套关系是确定的、可计算的,那就别让网络去学它,直接算给网络用,网络只负责它真正该负责的、有不确定性的那部分(补全看不见的结构、还原真实材质)。
这个"确定的归公式、不确定的归网络"的分工,看着朴素,实则是这两年三维生成领域一个挺重要的反思。它告诉我们:堆规模不是唯一解,把对的先验结构设计进架构里,往往比盲目加参数更划算。理解了这一层,你再看后面那几块技术细节,就会发现它们全是围绕这一个核心信念展开的。
接下来三章,我把支撑这个思路的三块硬骨头逐个拆开:反向投影怎么把像素抬进 3D、稀疏 SDF 怎么又精细又省显存、两阶段生成怎么先搭骨架再补细节。
三、反向投影:整套方案的发动机
如果说"像素对齐"是目标,那 Back-Projection(反向投影)就是实现这个目标的那台发动机。这一块是 Pixal3D 最核心的创新,我尽量讲细。
3.1 先把相机投影和反投影的几何讲明白
要理解反投影,得先回到最朴素的针孔相机模型。一个三维点 (\mathbf{X}=[X,Y,Z]^\top) 被相机拍下来,落在图像上某个像素 ((u,v)),这个过程可以写成:
[
\lambda \begin{bmatrix} u \ v \ 1 \end{bmatrix} = \mathbf{K},[,\mathbf{R}\mid\mathbf{t},]\begin{bmatrix} X \ Y \ Z \ 1 \end{bmatrix}
]
这里 (\mathbf{K}) 是相机内参(焦距、主点那些),(\mathbf{R}) 和 (\mathbf{t}) 是相机的姿态(朝哪儿、在哪儿),(\lambda) 是个尺度因子。这叫投影:三维 → 二维,是把空间压扁成一张图。
反过来,反投影就是从一个像素 ((u,v)) 出发,往三维空间里"射"出一条射线。同一个像素,对应的不是一个点,而是这条射线上所有的点:
[
\mathbf{X}(d) = d,\mathbf{R}^{-1}\mathbf{K}^{-1}\begin{bmatrix} u \ v \ 1 \end{bmatrix} + \mathbf{c}
]
其中 (d) 是沿射线方向的深度,(\mathbf{c}) 是相机光心位置。换句话说:一个像素,沿着它那条视线往里看,会穿过三维空间里一串确定的位置。 这就是把二维像素"抬"进三维的几何依据,全程不靠网络猜,靠的是确定的相机几何。
3.2 第一步:把图像特征榨出来
光有几何还不够,真正要"抬"进三维的,不是像素的颜色值,而是更有信息量的图像特征。Pixal3D 先用一个编码器把输入图过一遍,提取多个尺度的特征。多尺度的意思是:既有粗的(整体轮廓、大块语义),也有细的(边缘、局部纹理)。我把它榨出来的东西大致归一下类:
- 边缘与轮廓信息:决定模型外形对不对。
- 颜色与纹理信息:决定表面看上去对不对。
- 语义信息:让网络"知道"这块是把手、那块是杯壁,不至于把结构搞错位。
多尺度这一点别小看。只用粗特征,细节全丢;只用细特征,整体会散。两个尺度一起上,才能既稳住大形、又留住小料。
3.3 第二步:把像素特征抬进 3D 特征体
有了特征,又有了反投影的几何,接下来就是把它们合起来用。Pixal3D 在三维空间里准备了一个叫 Feature Volume(特征体) 的东西,你可以把它想象成一格一格的三维网格,每一格都能存一小段特征。
抬进去的过程,用一段伪代码说最直观:
# 把 2D 像素特征反投影进 3D 特征体(示意逻辑,非真实代码)
for 三维体里的每个体素 voxel:
X = voxel 的三维坐标
(u, v) = 用相机投影矩阵把 X 投回图像平面
if (u, v) 落在图像范围内:
f = 在多尺度特征图上,去 (u, v) 处采样特征
voxel.feature = 累积 / 聚合(f) # 把这块像素的信息绑定到这个体素上
else:
voxel.feature = 空 # 这个体素没有任何像素能看到它
这段逻辑的精髓在于:每一个三维位置的特征,都明确来自图像上某个(或某几个)确定的像素,而不是网络从一团压缩 token 里恍恍惚惚学来的。像素和三维点的对应关系,到这一步就被实打实地建立起来了。
3.4 第三步:显式对应关系到底带来了什么
把上面三步连起来,Pixal3D 就建好了这样一条明确的链路:
flowchart LR
A[输入 RGB 图] --> B[多尺度图像特征]
B --> C[反向投影<br/>沿相机视线抬升]
C --> D[3D 特征体<br/>Feature Volume]
D --> E[像素坐标 ↔ 三维表面点<br/>显式一一对应]
E --> F[几何与纹理贴着输入图生成]
和传统隐式特征融合相比,这条显式链路能稳稳保住四样东西,这也是它保真度高的直接原因:
- 复杂边缘:不会被注意力机制"抹平"。
- 微小纹理:表面细节有据可依,不糊。
- 精细结构:小部件不会凭空消失或错位。
- 局部几何:局部凹凸有像素特征兜着,不漂。
我自己的体会是,这一招最聪明的点不在于多复杂,而在于"把一个本该由几何决定的事,还给了几何"。很多模型为了端到端好看,把几何关系也一股脑丢给网络去学,结果学了个半懂不懂。Pixal3D 反其道行之,越是确定性的东西越不让网络瞎猜,保真度反而被顶上去了。这个取舍本身就值得做工程的人记一笔。
3.5 它和"先估深度再重建"有什么本质不同
讲到反投影,懂一点三维重建的朋友可能会问:传统重建不也是反投影吗?先估个深度图,再把像素按深度反投到空间里,不就完了?这个问题问得好,差别恰恰是 Pixal3D 聪明的地方。
传统的"先估深度再反投",强依赖那张深度图估得准不准。深度估错了,点就反投到错的地方,整个结构跟着歪,而且单张图里被遮住的部分根本没有深度可估,那一块就是空的。它本质还是"重建你看得见的那一面",看不见的就没了。
Pixal3D 的反投影不是去反投一张确定的深度图,而是把多尺度图像特征沿着相机视线,灌进一整条射线上的所有候选三维位置,再交给后面的生成网络去判断"这条线上到底哪一段是真正的表面、看不见的背面又该长成什么样"。也就是说:
- 反投影负责把"图像信息和三维位置的对应关系"建立起来,这是几何能确定的部分,不让网络瞎猜;
- 生成网络负责在这个有明确对应关系的特征体上,补全深度、补全遮挡区域,这是必须有"创造"成分的部分。
这就是我前面说的"把 3D 生成往 3D 重建那一侧拽"的真正含义——它不是变成了纯重建,而是把重建里那套确定的几何约束,借给了生成。确定的归几何,不确定的才归网络。这个分工,是它能又保真又能补全背面的关键,也是它和老式"深度估计重建"在思路上的分水岭。
四、稀疏 SDF:又要精细又要省显存
反投影解决的是"像素怎么进 3D",接下来要解决的是"3D 形状用什么方式存"。Pixal3D 用的是 Pixel-Aligned Sparse SDF(像素对齐的稀疏有符号距离场)。这名字一长串,拆开看其实不难。
4.1 SDF 是个啥,用大白话讲
SDF 全称 Signed Distance Field,有符号距离场。它不是直接存一堆三角面片,而是存一个"距离函数"。对空间里任意一个点 (\mathbf{x}),这个函数告诉你:你离最近的物体表面有多远,并且用正负号告诉你你在物体外面还是里面。
写成公式大概是这样:
[
s(\mathbf{x}) = \pm \min_{\mathbf{p}\in\mathcal{S}} \lVert \mathbf{x}-\mathbf{p}\rVert
]
其中 (\mathcal{S}) 是物体表面,外面取正、里面取负。那物体表面在哪儿?就在距离正好等于 0 的那一层:
[
\mathcal{S}={\mathbf{x}\mid s(\mathbf{x})=0}
]
打个比方:你站在游泳池边,SDF 就像有人随时告诉你"离水面还有 1.2 米(在水面上方)"或者"在水下 0.5 米"。把所有"距离为 0"的点连起来,就是水面,也就是物体表面。SDF 的好处是表面光滑、几何质量高,是公认的高质量几何表示方式。
4.2 高分辨率 SDF 的痛点:太吃显存
但 SDF 有个现实问题。要表达精细的几何,得用高分辨率的网格去存这个距离场。分辨率一上去,要存的格子数是按立方增长的——分辨率翻一倍,格子数变八倍。这意味着:
- 显存占用直接爆。
- 计算成本陡增,训练和推理都慢。
这就陷入一个两难:想要细节就得高分辨率,高分辨率就跑不动。
4.3 稀疏 + VAE 压缩,怎么破这个两难
Pixal3D 的破法是"稀疏"两个字。
关键观察是:一个物体,绝大部分有用信息都集中在表面附近。物体内部深处、以及空旷的背景区域,那些格子里其实没什么值得花资源去存的东西。既然这样,那就别傻乎乎地把整个三维空间的格子都存满,只保留贴近表面的那些活跃体素就行。这就是稀疏结构。
光稀疏还不够,Pixal3D 还在上面套了一层 VAE 压缩。VAE(变分自编码器)这里你可以理解成一个"会打包的压缩器":它把稀疏的 SDF 编码成一组更紧凑的 Sparse Latent(稀疏隐表示),需要的时候再解码回来。这一步进一步把数据量压下去。
三种存法对比一下,差别一目了然:
|
表示方式 |
显存占用 |
能表达的细节 |
训练/推理成本 |
|
稠密高分辨率 SDF |
极高 |
高 |
很大 |
|
仅稀疏 SDF |
中等 |
高 |
中等 |
|
稀疏 SDF + VAE 压缩(Pixal3D) |
低 |
高 |
较低 |
更妙的是,这个隐表示不是随便压的,它和前面讲的反投影是配套的——压缩后的隐空间依然保持"像素对齐"的性质,所以"精细几何"和"忠于输入图"这两件事并不冲突。Pixal3D 把它称作"像素对齐的结构化隐表示学习",这是它三大组件里的第一块。说白了就是一句话:用稀疏 + VAE 把代价压下来,同时一点没丢像素对齐这个核心优势。
4.4 顺带说说:为什么偏偏选 SDF
新手到这儿可能会有个疑问:三维形状的存法不止 SDF 一种,为啥它选这个?我把常见的几种表示拉个表对比一下,这是行业通用常识,理解了对你判断各类 3D 工具都有帮助。
|
表示方式 |
大白话 |
优点 |
短板 |
|
点云 |
一堆三维点 |
简单、好采集 |
没有表面,洞多 |
|
体素 |
三维像素方块 |
规整、好处理 |
分辨率一高就爆 |
|
网格 Mesh |
三角面片拼出来的壳 |
引擎直接能用 |
不好直接"生成" |
|
隐式场 / NeRF / 高斯 |
用函数或一堆"光斑"描述 |
视觉真实 |
转成可用网格要额外处理 |
|
SDF(Pixal3D 选的) |
到表面的有符号距离 |
表面光滑、几何质量高、好提网格 |
高分辨率吃显存 |
SDF 最大的好处是它描述出来的表面是连续光滑的,而且想拿到最终的三角网格,从"距离等于 0 的那层"上抽取就行,工业链路很顺。它唯一的硬伤就是高分辨率吃显存,而这个硬伤恰好被 Pixal3D 的"稀疏 + VAE 压缩"那一套精准地补掉了。换句话说,Pixal3D 选 SDF 不是随便选的——它选了一个几何质量最好的表示,再用工程手段把这个表示原本最贵的代价压了下来。这种"挑最难但最对的路,再用工程把它跑通"的做法,是我个人很欣赏的一种技术品味。
需要提醒新手的一点是:SDF 这个词在不同资料里有时写成"有符号距离函数",有时写成"有符号距离场",函数和场指的基本是一回事,别被叫法绕晕。
五、两阶段生成:先搭骨架,再补细节
有了反投影喂进来的 3D 特征体,也有了高效的稀疏隐表示,真正"生成"那一步怎么走?Pixal3D 走的是 Two-Stage(两阶段) 管线。这套先粗后细的思路在 3D 生成里很主流,但放在像素对齐的框架下用,效果会更扎实。
5.1 第一阶段:先把骨架立起来
第一阶段干的是"定大局"的活,输入是反投影得到的 3D 特征体,输出是物体的粗结构,包括:
- 主轮廓:物体大致长什么样、占多大空间。
- 空间布局:各个大块之间的相对位置关系。
- 基础几何:先有个稳的骨架,别歪。
这一步不追求细,追求的是"别一开始就跑偏"。骨架立歪了,后面补再多细节也是白搭。
5.2 第二阶段:往骨架上补料
骨架稳了,第二阶段在它的基础上预测更精细的细节隐变量,把表面纹理、局部小结构、材质细节、高精度几何这些"料"一点点补上去。
我画一张管线图把整条路串起来:
flowchart TD
A[输入图] --> B[多尺度特征 + 反投影]
B --> C[3D 特征体]
C --> D[阶段一:生成粗结构<br/>主轮廓 / 布局 / 基础几何]
D --> E[阶段二:生成细节隐变量<br/>纹理 / 局部结构 / 高精几何]
E --> F[解码稀疏隐表示]
F --> G[输出高保真网格 Mesh]
5.3 为什么要拆成两阶段
有人会问,为啥不一步到位?我的理解是这样:3D 生成的搜索空间巨大,让网络一口气同时操心"整体对不对"和"细节准不准",两头都容易顾此失彼。拆成两阶段之后,第一阶段只管把大形锁定,第二阶段在一个已经被约束住的空间里精雕,难度被拆小了,结果反而更稳。最后把第二阶段的稀疏隐表示解码出来,就是一个带精细几何的完整网格模型。
这种"先收敛大方向、再在小范围里精修"的工程哲学,其实在很多领域都通用。3D 生成这边把它和像素对齐一结合,就既稳又准了。
5.4 这套两阶段范式的通用价值
多说一句题外但有用的。"先粗后细、分阶段收敛"这个套路,你在很多生成式任务里都能看到影子:图像生成里常见的"先低分辨率定构图、再超分补细节",文本生成里的"先列提纲、再逐段填充",本质都是一个思想——把一个巨大的搜索空间,拆成几个被逐步约束住的小空间,逐级求解。
为什么这招屡试不爽?因为难题的难度往往不是线性的,而是和"要同时满足的约束数量"强相关。让模型一口气同时满足"整体对、细节也对",约束之间互相打架,模型容易在中间地带反复横跳;拆开之后,第一阶段只背一个包袱(大形别歪),第二阶段在一个已经锁定的框里精修,每一步要操心的事都少了,整体反而更稳更可控。
Pixal3D 的贡献不在于发明了两阶段,而在于把这套成熟范式,扣在了"像素对齐"这个新地基上跑通。第一阶段在像素对齐的特征体上定骨架,骨架天然就贴着输入图,所以第二阶段补的细节也自然贴着输入图——两个阶段都被像素对齐这条主线串着,这才是它效果稳的深层原因。理解了这点,你就明白它不是简单地把别人的零件拼起来,而是让每个零件都为"保真"这一个目标服务。
六、原生 PBR 材质:直接能进引擎的资产
讲完几何,得讲材质。这一块直接决定了生成结果"能不能用在生产里",对做游戏和影视的人来说尤其要紧。
6.1 先搞懂 PBR 是什么
PBR 全称 Physically Based Rendering,基于物理的渲染。它的核心思想是:用一组符合真实物理规律的参数去描述一个表面,这样不管把它丢进什么光照环境里,渲染出来都"对"。
很多老一点的 3D 生成模型,只能给你一张"基础颜色贴图"——就是把颜色糊在模型表面,换个灯光就露馅。Pixal3D 不一样,它能原生直接生成完整的 PBR 材质,几张关键贴图各管一摊:
|
贴图 |
大白话解释 |
影响 |
|
Base Color(基础色 / 反照率) |
物体本身是什么颜色,不含光影 |
决定固有色对不对 |
|
Roughness(粗糙度) |
表面是磨砂的还是光滑的 |
决定高光是发散还是锐利 |
|
Metallic(金属度) |
这块是金属还是非金属 |
决定反射方式,金属感对不对 |
|
Normal(法线贴图) |
用贴图"伪造"出表面的微小凹凸 |
不加面数也能有细节质感 |
6.2 "原生 PBR"为什么这么关键
注意这里有个词很重要:原生。原生的意思是,这些 PBR 贴图是生成过程里直接产出的,不是事后再用别的工具硬补一套。这一点对工作流的影响很大:
- 生成结果可以直接导入 Blender、Unity、Unreal Engine,不用额外做一道材质转换或重新烘焙。
- 在标准实时渲染器里就能呈现出像样的金属、磨砂、塑料质感,而不是一坨"看着像颜色对了但材质全错"的东西。
- 对接工业级生产流水线时,省掉的是美术同学最烦的那段重复劳动。
我实测时特意把生成的 GLB 拖进 Blender 看了一眼,材质通道是齐的,金属和粗糙的区分确实在,这一点对"能不能用"是实打实的加分。它依赖的底座(TRELLIS.2 那条线)本身就把 Base Color、Roughness、Metallic、乃至透明度这些表面属性纳进了表示里,所以 Pixal3D 能把 PBR 这件事做成原生输出,不是凑出来的。
6.3 举个例子:只给颜色贴图会怎么翻车
新手可能对"为什么不能只给颜色"还没体感,我用一个通用化的例子讲清楚。
设想要做一个金属水壶的三维资产。如果只有一张基础颜色贴图,模型在你建模时那个特定灯光下,可能看着还行——因为高光被"画死"在贴图里了。问题是,3D 资产是要进各种不同场景的:换个暖光环境、换个冷光环境、放到户外、放到室内,光照一变,那张被画死的高光就和新环境彻底对不上,金属一下子变成"塑料涂了银漆"。
而有了完整 PBR,引擎拿到的是"这块是金属(Metallic 高)、表面挺光滑(Roughness 低)"这种物理描述,于是它会根据当前场景的真实光照,实时算出该有的反射和高光。同一个模型扔进任何环境,质感都是对的。这就是"原生 PBR"和"只给颜色"的本质差距:前者交付的是一套能适应任何光照的物理属性,后者交付的是一张只在某一种光下成立的"照片"。对要进生产线、要被复用到无数场景里的资产来说,这个差距是决定性的。
简单收一句:几何决定它"形对不对",PBR 决定它"在任何灯光下都对不对",两件事 Pixal3D 一次性给齐了,这是它能直接进工业流程的底气。
七、不只是单图:多视角与场景级扩展
Pixal3D 的核心定位是"单图转 3D",但反向投影这套机制天生有个好处——它很容易往多张图、往整个场景扩。
7.1 多视角:把背面也补上
单张图最大的硬伤是:被遮住的那一面、看不见的区域,网络只能靠先验去脑补。Pixal3D 的应对方式是 Multi-View Feature Aggregation(多视角特征体聚合)。
原理其实很顺:既然每张图都能通过反投影得到一个 3D 特征体,那把多个视角各自的特征体在三维空间里叠加聚合起来,被一张图遮住的区域,往往能被另一张图看到并补上。多喂几个角度,背面结构、隐藏区域、整体一致性都会明显变好。论文里把这点说得很直白:从单视角到多视角,是这套范式"自然延伸"出来的,不需要重新设计架构。
7.2 场景级:把一整个场景拆成独立物体
更进一步,Pixal3D 还把像素对齐用到了场景合成上,给出了一条模块化的管线,能从图像生成物体彼此分离的高保真三维场景。这意味着输出的不是一坨黏在一起的整体,而是一个个可以单独拿出来用的物体。对搭建可交互三维场景的人来说,"物体可分离"是个很实用的特性,省去了后期一刀一刀切模型的麻烦。
把这一章总结成一句:它的下限是"一张图出一个高保真物体",上限是"几张图拼出一个能拆开用的场景"。
7.3 多视角不是"越多越好",怎么取舍
实操里有个常见误区,觉得多视角既然能补背面,那干脆多塞几十张,效果不就拉满了?我的经验是没那么简单,得讲性价比。
多视角真正起作用的前提,是这些视角彼此有效互补——A 张挡住的地方,B 张正好看得见。如果你塞进去的几张图视角都差不多(比如都从正面偏一点点),它们的特征体高度重叠,聚合起来等于做了一堆无用功,背面照样是空的。所以判断要不要、加几个视角,看的不是数量,是"覆盖度":
- 单图够用的场景(结构简单、遮挡少),就别