SpaceFlow:3D 生成能只改一把椅腿,但要先把模型拆成零件

好看 ≠ 能改:3D 生成的「控制」为什么只有一把全局旋钮

你让 AI 生成一把椅子,效果挺满意。现在只提一个要求:椅腿必须严格照我给的形状来,靠背随你自由发挥。今天主流的 3D 生成器会给你一个很尴尬的回答。要么整把椅子都贴着你给的几何走,僵硬得像被钉住;要么整体放开,连椅腿也一并失守。问题不在生成质量,而在控制粒度。生成器手里只有一把「全局旋钮」,没有第二把。

为什么只有一把?直接前作 SpaceControl 的做法能说明白。它把输入几何编码进 latent,也就是生成过程的中间表示,再把整块 latent 统一加噪到同一个中间时间点,一路反向去噪回到干净数据。全程只有一个控制强度 τ 可以调。τ 调高,输出贴近输入几何,代价是整体僵硬、真实感下降;τ 调低,输出自然,代价是输入几何保不住。这就像调音台上只有一个主音量推子,你能让整首歌一起变大变小,却没法让吉他声大一点、鼓声保持不动。同一个强度不可能同时做到「这里严守、那里放手」,而「这里严格、那里放手」恰恰是用户真正想要的。SpaceControl

SpaceFlow 想要的终点长什么样,看它的项目页 teaser 就一目了然。同一把椅子,椅腿和坐垫被橙色标成「高控制」,严格跟着输入形状走;靠背是灰色「低控制」,交给生成器自由补全成规整的格栅。旁边是外观控制:金色奖杯配「黑色大理石底座」的文字 cue,底座就真的只黑在底座上,雕像则挂独立的图像参考。最后一行的联合面板里,热气球、大象玩具、台灯同时接受几何与外观控制,各自的 cue 用虚线箭头连到对应部位。论文的三点贡献正好对应这三块:局部几何控制、局部外观路由、两者合一。项目页

图注:项目页 teaser 的三面板。Geometric Control 面板里,椅子的橙色部件标为高控制、灰色靠背标为低控制;Appearance Control 面板展示金色奖杯配「黑色大理石底座」的文字 cue 与雕像的图像参考;Joint 面板里热气球、大象、台灯同时接受几何与外观控制,虚线箭头把 cue 连到具体部件。项目页

于是问题落定:把一把全局旋钮拆成每个部件各一把,技术上凭什么落地?这要先回答两个更基本的问题。控制信号塞进生成过程的哪个环节?又按什么空间单位来区分「这里」和「那里」?下一章先给这两块地基。

控制落在哪里:噪声到资产的路径上,处处可截停

先看时间这一维。如今的高质量 3D 生成器大多是流匹配(flow matching)模型。训练时它学一条从纯噪声通往真实数据的概率路径,推理时沿这条路径一步步走,把噪声「翻译」成形状和纹理。生成器在路径上解的其实是一个常微分方程,每一步的方向由学到的速度场给出,从噪声端积分到数据端。这条路径不是黑箱,路径上的每个时间点都是一次可以截停、可以干预的机会。下面这张图是同一份噪声沿三条不同路径的去噪轨迹:最上面一条把几乎所有去噪工作堆在最后几步,最下面一条也就是 rectified flow,沿路径线性地把噪声抹掉。路径越均匀,中间每个时间点就越「可读」,你越能准确说出「我想在离数据多近的地方开始插手」。路径越直,每一步的方向越确定,在任意中间点准确介入就越可控。用一行公式说,这条线性路径就是 $x_t=(1-t)x_0+t x_1$。Flow Matching

图注:同一份 ImageNet-64 噪声沿三条概率路径的 6 个时间步去噪轨迹。SM w/ Dif 一行几乎到最后一步才变清晰;FM w/ Dif 稍早一些但仍集中在末端;FM w/ OT 一行噪声沿路径大致均匀地减少,三行最后生成的图像内容也明显不同。Flow Matching

τ 这个符号的本质,就是「在路径上的位置」。τ 大,靠近干净数据那一端,输入几何保留得多;τ 小,靠近噪声那一端,几乎把整条去噪过程重跑一遍,交给预训练先验自由发挥。SpaceFlow 的几何控制会让生成在 τ_low 到 τ_high 这个区间里反复往返,理解了这个「路径位置」的语义,就理解了一大半。也要注意这个控制发生在哪一段:结构流跑在粗粒度的 16³ latent 网格上,用体素级 mask 决定「保留还是放手」;外观流则跑在每个活动体素上,负责填充细节。几何控制锁在粗网格这一环,正好和「先定骨架、再填血肉」的两阶段设计对上。这条路线如今已经被系统整理:2024 年的流匹配综述把扩散、离散流等统一进同一个框架,还发布了官方 PyTorch 参考库,想动手的人都从那里起步。Flow Matching Guide

再看空间这一维。光有「什么时候插手」还不够,还得能说清「在哪里插手」。SpaceFlow 的底层生成器 TRELLIS 用了一种叫 SLAT 的表征:把一个 3D 资产放在 64×64×64 的稀疏体素网格上,每个与表面相交的体素挂一个局部特征向量,而不是给整块空间无差别地填满。稀疏意味着算力可控,局部意味着每个空间位置独立可寻址。这正是「控制哪里」的物理落点:你想锁住椅腿,就锁住椅腿附近那几百个体素;想放开靠背,就让其余体素随先验生长。TRELLIS

TRELLIS 把生成拆成两段。结构流先生成体素骨架,也就是哪些体素是活动的;外观流再在每个活动体素上填局部特征。同一个 SLAT 最终能解码成 3D 高斯、辐射场、网格三种格式,单次生成约十秒。支撑这个能力的是约 20 亿参数的模型在约 50 万个资产上训练出来的先验,代码与数据都在官方项目页公开。TRELLIS TRELLIS 项目页 其中 3D 高斯这种输出,靠各向异性椭球加 α 混合光栅化做实时高保真渲染,是三种格式里外观最鲜艳的一支。3DGS

可截停的路径给了时间维度,可寻址的 SLAT 画布给了空间维度。这两块地基就绪之后,第一步先控制什么?几何。

第一步:给每个部件一把几何旋钮——严守哪里、放手哪里,由 mask 说了算

这是 SpaceFlow 的完整管线,本章和下一章都会在这张图上做局部放大。从左到右:输入是一组可编辑的 superquadric 部件,每个部件标一个控制强度 τ_i,橙色代表高控制、灰色代表低控制;几何控制在「结构流」阶段发生,在 τ_low 到 τ_high 区间内施加空间条件;随后生成好的结构被 PartField 切成部件并配上路由体 Φ;最后「外观流」阶段把每个部件的文本或图像 cue 路由到对应部件,产出最终资产。SpaceFlow

图注:从左到右四阶段。带 τ_i 输入的橙灰部件进入结构流阶段,在区间 [τ_low, τ_high] 内施加空间条件;之后经过 PartField 分割与路由体 Φ,进入带路由 cross-attention 与 self-attention 偏置的外观流阶段,最后产出 3D 资产。橙灰配色对应高、低控制等级。SpaceFlow

这条「一块块指定」的输入侧前提,落实在一个叫 superquadric(超二次曲面)的部件表示上。它是一种参数化几何块,11 个参数就够描述一个能弯能鼓的曲面,其中 3 个控制尺度、2 个控制形状指数、6 个控制刚体位姿。相比长方体,它更贴合椅背、锅沿这类带曲率的形状,要编辑哪个部位就动哪个部件的参数。Superquadrics 如果不巧手头只有普通 mesh,如今也有 SuperDec 这类方法能自动把 mesh 解析成 superquadric 集合,省去手工拆分。SuperDec

几何控制的配方可以概括成一句话:挑出要守的区域,把干净信号反复焊回去。落地拆成三步。第一步,把全部部件编码成干净 latent,再把高控制子集单独编码一份,得到「全部」与「高控制」两套干净信号。第二步,按低控制部件的位置框出一个二值 mask。具体做法是给低控制子集拟合一个包围盒,留出约 7% 对角线的余量,体素化到 64³,再用 4×4×4 平均池化压到 16³ 的 latent 网格上,最后以大于 0 为界二值化。盖到的地方是「低控制区」,其余就是「高控制区」。第三步,生成从噪声起步,但每一步去噪之后,都把高控制区域的干净 latent 按 0.18 的比例混回当前结果。

这套混合写成公式就是 Eq. 2 的形态:在当前状态 $z_t$ 上,高控制区域被拉向干净的高控制 latent $z_1^{high}$,低控制区域则原封不动地保留 $z_t$。这里有两个含义要分清。α 是「拉回」的力度,默认 0.18;τ_high=10 与 τ_low=3 则是这场拉回在路径上的强度端点。它很像修图软件里的保护蒙版:蒙版盖住的内容(低控制区)每一轮都原样保留、自由生长,蒙版外的区域(高控制区)则被反复拉回干净 latent。

不过硬切蒙版会留下麻烦。高控制区与低控制区的交界处,如果两边各自为政,几何会在边界上突然断掉,像两张照片硬拼在一起。SpaceFlow 的解法借自 2D 图像修复领域的 RePaint:在 τ_low 到 τ_high 区间内反复「加噪、去噪」,把低控制区重新污染回噪声、再走一步反向去噪,如此往返多次,让两侧在边界处反复磨合,接缝就被抹平了。2D 里那套「已知区按当前时间步重加噪、未知区反向去噪、两边按 mask 合成」的工具原型,搬到 3D latent 上就是这里的重采样循环。要注意,RePaint 里的「已知 / 未知」和 SpaceFlow 的「高 / 低控制」只是结构上的类比,并不是同一个对象;SpaceFlow 借的是那套反复往返的工程手法。RePaint

为什么局部 τ 优于全局 τ?下面这张图里的 (a) 面板是现成证据。三行分别是 SpaceControl τ=3、SpaceControl τ=10、SpaceFlow。τ=3 的低强度让椅子结构整个垮掉,τ=10 的高强度把整把椅子锁得僵硬;SpaceFlow 的高控制区与输入严丝合缝,低控制区却自然舒展。论文还做了一组强度扫描来印证旋钮的语义:τ_high 固定在 10,让 τ_low 从 1 逐步升到 9,两个区域的 Chamfer 曲线随 τ_low 逼近 τ_high 而逐渐靠拢,低控制区逐渐放弃「放手」,高控制区始终保持偏离。所谓「局部几何控制」,到这里被拆成了三个可执行动作:空间上挑 mask,时间上挑区间,边界上反复往返。SpaceFlow

图注:双面板定性对比。(a) 面板三行依次是 SpaceControl τ=3 使结构垮掉、SpaceControl τ=10 把全局锁死、SpaceFlow 让高控制区严守而低控制区放手;(b) 面板在同一基础结构上对比 TRELLIS、GuideFlow3D 与 SpaceFlow 的外观路由效果,右侧能看到部分方法把颜色串到了错误部件。SpaceFlow

留意 (b) 面板:同样的基础结构上,三种方法给不同部件上色,有的方法把颜色串到了隔壁部件。几何问题解决了,可「金色奖杯」的颜色 cue 会不会染到旁边的部件上?外观怎么做到各回各家?这就是下一章要填的坑。

第二步:把颜色和材质也锁进部件——外观 cue 不再串门

几何定稿之后,外观流要做的,是把每个部件专属的文本或图像 cue 只施加到该部件上。比如「黑色大理石底座」这条 cue,就应该只让底座变黑,杯身保持金色,不串味。上一章定性图 (b) 面板里,基线方法就栽在这上面:颜色和材质「串门」到了错误的部件。这里的核心动作叫路由,一个外观 cue 应该被送到生成过程的哪些位置,才算各归各家?

先看对照物。基线 GuideFlow3D 走的是全局 guidance 路线:整个 latent 在反向去噪的每一步,都被一组梯度统一往外观目标整体拉扯。它没办法知道「这条 cue 属于椅背而不是椅腿」——它没有把体素路由到自己部件的机制,只能靠 PartField 聚类做近似对应,整体仍是把整块 latent 朝外观源用一组全局损失拉拢。GuideFlow3D

SpaceFlow 的升级是两步走:先认部件,再锁信息流。下面这张流程图画的是它完整的路线。

图注:外观路由流程。生成好的结构经 PartField 语义分割与 K-means(30) 聚成部件簇,再按空间近邻回配到输入 primitive 得到路由体 Φ;各部件的外观 cue 按 Φ 送进 cross-attention,每个体素只查询本部件 cue,随后经 self-attention 偏置与测试时对比损失在部件内拉拢特征。

第一件,用 PartField 把生成好的结构切成部件。PartField 是一个「给 3D 模型自动画部件」的模型:一次前馈,把点云变成连续的特征场,再用 K-means(30) 把特征聚成 30 个语义簇,每个簇就是一个候选部件。接着按空间近邻把每个簇回配到输入 primitive,得到路由体 Φ,一张「哪个体素属于哪个部件」的地图。Φ 就是上一章定性图 (b) 面板里,那根把 cue 接到具体部件的虚线箭头背后的真实机制。PartField

第二件,cross-attention 限制。外观流生成时,每个体素在 attention(注意力)里只允许查询自己部件对应的那个 cue embedding,从机制上杜绝跨部件查询。打个比方,一场晚宴,每个座位只跟本桌的人交谈,不许串桌打听别桌的消息。这个限制把「cue 属于哪个部件」写进了 attention 的查询规则,而不是事后再去擦除错误。

第三件,self-attention 偏置加测试时对比损失。就算查询被限死,特征仍可能通过自注意力混到别的部件里去。于是 SpaceFlow 给同一部件内部的 query-key 评分加一个正偏置,鼓励消息在部件内多传;再在测试时额外跑一个对比损失,把同一部件的特征在 latent 空间里拉拢、把不同部件的特征推开。Eq. 3 说的就是后一件事,用同一部件内特征的余弦相似度做监督信号,在推理过程中直接优化 latent。三件套各自封死一条泄漏路径,把 GuideFlow3D 式「全局一套损失」升级成了「部件级路由」。SpaceFlow

机制讲完了,接下来的问题很直接:这套东西真跑赢了吗?「高控制区严守、低控制区放手」又拿什么指标来证明?

证据:区域指标与三百余场盲评,证明「这里严格、那里放手」真的成立

「局部化」最容易沦为口号。模型自己说「我局部控制了」,你凭什么相信?SpaceFlow 的做法是先造一个专门测局部化的指标。他们自建了 83 个资产的评测基准,覆盖 7 大语义类别,约一半资产由 ChatGPT-5.6 Sol 起草 primitive 布局与逐部件 cue,再经人工校验;每个资产都标注了高控制与低控制两类部件。这个基准本身就是为「局部可控」这个命题量身定做的。SpaceFlow

核心指标叫区域 Chamfer 差。它分别量「低控制区」和「高控制区」离输入几何的平均距离,再取两者的差值。两种全局基线的差值都约为 0,因为整块 latent 被一视同仁,两个区域贴输入的程度没有区别。SpaceFlow 把这个差值拉到了 6.05×10³,高控制区贴着输入走,低控制区彻底放开。这个指标本身就在回答「你有没有区别对待不同区域」,而答案从「没有」变成了「有,而且差得很远」。SpaceFlow

这些数字合在一起说明什么?「严格」和「放手」不再是感觉,而是可以被测出来的两个方向。高控制区的 CD_high 越低,说明输入几何保得越严;低控制区的 CD_low 越高,说明先验补全放得越开;两者的差,就是「局部化」本身的强度。全局方法这个差值恒等于零,因为无论 τ 调到哪里,它都同时作用于所有区域,Region A 和 Region B 的「严格程度」永远相同。SpaceFlow 第一次把这个差值做出了一个明显的台阶。这正是它和 SpaceControl 的本质差别:不是更会生成,而是能对同一块 latent 的不同部位给出不同的生成指令。

指标它在量什么全局基线SpaceFlow
区域 Chamfer 差 ΔCD高控制区与低控制区贴输入几何的差别≈06.05×10³
高控制区 CD_high高控制区与输入几何的平均距离,越小越贴0.943.65
CLIP 相似度整体语义是否保得住0.2260.233
总体盲评胜率对 SpaceControl 各变体的总体偏好不适用75.9% / 68.7%

一个容易误读的对照值得说清。全局 τ=10 的高控制区数字比 SpaceFlow 更小,看起来更「忠实」。但那是整把椅子被钉死的代价,低控制区根本没有放开。SpaceFlow 只锁局部,就能拿到接近的贴近度,同时让低控制区自由生长,而且没有牺牲整体语义,CLIP 相似度 0.233 对 0.226 基本持平。换句话说,它拿到的是「分区域区别对待」这件事本身,而不是某一块区域上的绝对最优。

头对头盲评的评审主体是 VLM 评审 GPT-5.6 Sol。协议是:温度 1.0,三次独立采样取多数票,用约 210 度视角差的固定视图,输出全部匿名。对抗 τ=3 基线,论文表格给出的胜率是几何保真 78.3%、真实感 43.4%、总体 75.9%;对抗 τ=10 基线,则是几何保真 66.3%、真实感 85.5%、总体 68.7%。两组数字统计口径一致,都出自同一套协议:同样的评审主体、同样的 83 个资产样本,均带 95% Wilson 置信区间。项目页与论文表格的总体偏好数字一致:对 τ=3 为 75.9%,对 τ=10 为 68.7%,均为同一 95% Wilson 置信区间。外观侧,在共享基础结构上,SpaceFlow 的文本条件路由在 Prompt Faithfulness 与颜色/材质准确度上都领先 TRELLIS 与 GuideFlow3D 的各变体。SpaceFlow

有一个数字值得单独拎出来:对抗 τ=3 时,真实感一栏只有 43.4%。也就是说,在「真实感」这一项上,SpaceFlow 反而略输给放手不管的 τ=3。论文没有藏这一点。在这个对照里,守住几何的形状,是要拿一部分真实感来换的。这不叫翻车,它只是把局部控制的代价摆在了明面上:该严格的区域确实严格了,但这些区域的输出离「模型最自然的想象」更远了一点。读胜率的时候也要记得它是相对的。SpaceFlow 不是每局都赢,而是统计意义上更常被选中,几何保真这项赢得多,真实感这项在对抗 τ=3 时赢得少甚至输,恰恰说明它把力气花在了「可控」而不是「好看」上。

定量之外,论文还跑了用户研究:337 次试验、29 位评估者,每轮把 SpaceFlow、τ=3、τ=10 三个变体两两配对的匿名输出并排比较(界面每次只展示 Asset A / Asset B 两个输出),在 shape fidelity、realism、overall 三个维度上分别投票。界面长这样:上方是 prompt 面板,中间是带橙灰标注的输入几何,下方是匿名标为 Asset A 与 Asset B 的两个输出视口,评估者逐项点选。要注意这是论文自带的评估界面截图,不是 SpaceFlow 的产品 UI,它的意义是让你看清「337×29」这串数字到底是怎么跑出来的。SpaceFlow

图注:用户研究的一次试验界面。顶部是文字 prompt 面板,中部是带橙色与灰色标注的输入几何,下方是两个匿名输出的网格视口,对应 Asset A 与 Asset B 标签,底部是 shape fidelity、realism、overall 三个单选维度。这是论文自带的评估界面截图,并非产品 UI。SpaceFlow

区域指标把「局部化」从形容词变成了可测变量,VLM 盲评与 29 位真人评估者在总体偏好上都更倾向它。但指标之外,它在哪些场景会翻车?

它没解决什么,以及为什么仍值得关注

论文自己列了两类失败场景,把它们当成「下一站的路标」比当成缺点清单更有用。

第一类叫语义与几何冲突。当文本 prompt 与输入几何互相矛盾时,比如把「站着的人」这个 prompt 施加到「长凳」结构上,TRELLIS 并没有「长凳上加个人」的联合先验,高控制区附近就会出现可见的几何形变。局部控制能锁住形状,却锁不住语义层面的矛盾。这暴露的其实是整条路线的边界:它控制的是「在哪儿生成」,不负责调解「生成什么」与「输入是什么」之间的语义冲突。

第二类叫路由错位。路由体 Φ 来自 PartField 在较低分辨率体素空间上的聚类,而部件边界未必和材质边界对齐。锅沿、椅垫这类「一个部件两种材质」的交界处,颜色会漏到相邻体素。论文自承的修法指向更细的部件分解,或者距离加权的软路由边界。另外,这类重采样本身就偏慢,极端边界下仍不够和谐。这是 SpaceFlow 这类依赖推理期重采样的实现付出的代价:在推理期插手、不重新训练,灵活性拿得越多,运行开销和边界风险就越难两全。也要把话说准:论文的失败案例只证明了这个代价在 SpaceFlow 身上成立,至于「整条 test-time 控制路线都躲不开慢」,那更像一条值得进一步检验的路线假设,而非被本文证据坐实的普遍结论。SpaceFlow

这个问题又偏偏在现在变得尖锐。3D 生成刚从「能看」跨到「能用」:跑一次只要十秒左右,质量足够进游戏和影视资产管线。一旦生成足够快,用户的下一个动作必然是修改,换一条椅腿、改一处底座材质,而不是把整个资产推倒重来。可现有管线只回答「生成什么」,不回答「在哪里控制」,全局旋钮就是这套逻辑的缩影。SpaceFlow 的问题陈述,一句话就能说完:把「在哪里控制」也变成用户手里的一张牌。SpaceFlow

把 SpaceFlow 放回这条路线图,它的位置很清楚。TRELLIS 提供了 SLAT 地基,让「训练时-free 的推理期控制」成为可能;SpaceControl 第一次让「全局控制强度」这把旋钮存在;SpaceFlow 把这一把旋钮拆成每个部件各一把,并补上了外观的部件级路由。三者一脉相承,都不重新训练生成器,只在推理期插手。这种「训练时-free」的工程收益值得点明:底层那套 20 亿参数的生成器保持原样,SpaceFlow 只是在推理过程中插了两块外挂。对使用者来说,接入成本只是写一次推理代码,而不是烧掉几十张 GPU 卡重新训练一遍;对研究者来说,这套局部控制逻辑可以跟着底层生成器的升级自动受益。这条「推理期控制」路线与「微调一个专用编辑模型」那条路线最本质的分歧也在这里,这正是它值得从业者跟进的核心理由。SpaceControl

对从业者,有一句话值得记下来:要「指哪儿改哪儿」,就得先把资产拆成可编辑的部件,这正是标题里那个取舍。SpaceFlow 证明了「部件可以指定」,也把下一个缺口留得很清楚。部件边界与语义边界怎么对齐,语义与几何冲突时联合先验从哪来,这两个问题谁能接着回答,谁就能把局部控制从「能改」推进到「改得自然」。局部控制这件事,它开了一个能走通的口子,剩下的路还长。想实际动手的人,可以到官方项目页的交互式查看器里转动资产、直观感受「哪里锁死、哪里放手」,代码仓库 SpaceFlow3D/spaceflow 也已公开,仓库里推理代码与权重发布的实际状态,截至成文建议以仓库页面为准。项目页

想深入可以读原文:SpaceFlow: Locally Controllable 3D Generation — arXiv:2610.12399

参考文献

  1. SpaceFlow: Locally Controllable 3D Generation — https://arxiv.org/abs/2610.12399
  2. SpaceFlow 官方项目页 — https://neilus03.github.io/spaceflow/
  3. TRELLIS: Structured 3D Latents for Scalable and Versatile 3D Generation — https://arxiv.org/abs/2412.01506
  4. TRELLIS 官方项目页 — https://microsoft.github.io/TRELLIS/
  5. SpaceControl: Introducing Test-Time Spatial Control to 3D Generative Modeling — https://arxiv.org/abs/2512.05343
  6. PartField: Learning 3D Feature Fields for Part Segmentation and Beyond — https://arxiv.org/abs/2504.11451
  7. Flow Matching for Generative Modeling — https://arxiv.org/abs/2210.02747
  8. Flow Matching Guide and Code — https://arxiv.org/abs/2412.06264
  9. RePaint: Inpainting using Denoising Diffusion Probabilistic Models — https://arxiv.org/abs/2201.09865
  10. GuideFlow3D: Optimization-Guided Rectified Flow For 3D Appearance Transfer — https://arxiv.org/abs/2510.16136
  11. Superquadrics Revisited (Paschalidou, CVPR 2019) — https://arxiv.org/abs/1904.09970;SuperDec (Fedele, ICCV 2025) — https://arxiv.org/abs/2504.00992
  12. 3D Gaussian Splatting for Real-Time Radiance Field Rendering — https://arxiv.org/abs/2308.04079
SpaceFlow:3D 生成能只改一把椅腿,但要先把模型拆成零件