ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

SuperGaussians:空间变化颜色,让3DGS告别固定色短板

SuperGaussians:空间变化颜色,让3DGS告别固定色短板 1. 从固定颜色到空间变化SuperGaussians 到底改了什么事做 3D 重建和神经渲染的朋友这两年应该都被 3D Gaussian Splatting 刷屏了。它厉害的地方在于训练速度快、渲染实时画质也能打直接把 NeRF 那套隐式表达按在地上摩擦。但用多了你就会发现经典 3DGS 有个挺尴尬的短板——每个高斯原语的颜色是固定的或者说得更准确一点是用一组低阶球谐系数去近似表达从不同方向看过去的颜色变化。这套设计在大多数场景下够用可一旦碰到大面积的平滑表面、高光反射、或者颜色连续渐变的墙面问题就出来了。固定颜色意味着每个高斯只能“折中”地拟合一片区域的平均颜色细节全靠把高斯切得足够碎来硬扛。于是场景里动不动就是几百万个高斯原语内存占用高得离谱训练和渲染也跟着变慢。SuperGaussians 这篇论文的思路说白了就是把“每个高斯原语的颜色从固定值升级成空间变化的函数”。每个原语不再只是一个带颜色的椭球而是变成一个内部颜色可以随位置渐变的三维图元。这样一来一个大平面用少得多的原语就能表达出连续渐变的效果而且高光、反射这类高频变化也有了更自然的表达途径。这篇笔记主要面向两类人一类是已经在跑 3DGS 相关项目、想了解最新改进方向的工程师和研究者另一类是刚接触神经渲染、想找个切入点理解 Gaussian Splatting 一系列进化脉络的学习者。我会把这篇论文的核心改动、网络结构、损失函数设计、实验结果以及我自己复现时踩过的坑都过一遍尽量把“为什么这么做”也讲透。2. 先理解 3DGS 的痛点才能看懂 SuperGaussians 的动机2.1 传统 3DGS 的颜色建模方式经典 3DGS 里每个高斯原语携带的信息包括中心位置、协方差矩阵决定椭球的形状和朝向、不透明度以及一组球谐系数。渲染时从某个视角看向场景每个高斯会对屏幕上的像素产生贡献贡献权重由高斯分布在该像素上的投影强度决定颜色则由视角方向和球谐系数共同计算得出。这里的关键在于球谐系数表达的是“随观察方向变化”的颜色而不是“随空间位置变化”的颜色。也就是说一个高斯原语内部的所有点不管它们处在椭球的哪个位置从同一个方向看过去颜色是完全一样的。这在物理上本来就不合理因为真实物体表面的颜色通常是连续变化的比如一面从浅蓝渐变到深蓝的墙或者一块有漫反射过渡的布料。2.2 固定颜色带来的连锁反应固定颜色带来的最直接问题就是表达效率低下。为了让渐变区域看起来平滑传统 3DGS 只能把高斯原语铺得密密麻麻用大量小尺寸高斯的颜色平均值去逼近连续变化。这就像用一堆马赛克拼一幅渐变图瓷砖越小拼接效果越好但瓷砖数量也会指数级上升。另一个问题是高频细节的表达受限。高光、镜面反射这类现象本质上依赖于观察角度和表面法线固定颜色加上低阶球谐很难精确拟合这种复杂的光学行为。你可以试试用纯 3DGS 重建一个带明显釉面高光的陶瓷花瓶球谐阶数不够的话高光处会出现明显的“糊斑”或者伪影。2.3 为什么不用更高阶的球谐可能有人会想既然低阶球谐不够把球谐阶数调高不就行了理论上可以但实操中坑很多。高阶球谐参数数量呈指数级增长训练时更容易过拟合到训练视角同时渲染的计算开销也明显上升。更关键的是球谐本质上是“全局基底”它擅长表达低频平滑变化却不擅长表达局部突变的颜色特征。SuperGaussians 的思路是换一个基底直接在原语内部定义一个连续的颜色场这个颜色场可以随空间位置变化再叠加一部分角度相关的信息。这样一来低频渐变被颜色场本身消化掉高频视角相关变化由辅助分支负责分工明确也就不用再靠堆高斯数量来解决问题。3. 核心创新拆解空间变化颜色图元的实现机制3.1 颜色场如何定义SuperGaussians 的核心改动是给每个高斯原语增加了一个额外的“颜色头”。这个颜色头接收当前着色点的局部坐标作为输入输出对应的 RGB 值。局部坐标指的是着色点相对于该高斯中心的位置通常在高斯的标准坐标系下表示也就是经过协方差矩阵的逆变换之后的坐标。这个设计的精妙之处在于它保持了高斯原语在几何表达上的简洁性同时赋予了颜色极大的灵活性。每个原语本质上变成了一个“自带渐变色的小椭球”颜色在椭球内部可以平滑过渡到了边缘自然淡出最终由多个原语的加权混合得到最终像素颜色。为了让颜色场足够平滑论文使用了多层感知机MLP来回归颜色值。输入是 3 维的局部坐标有些实现会再拼上高斯的其他属性中间经过几层隐藏层输出 3 维 RGB。这里 MLP 的规模不需要很大因为每个原语只需要表达自己局部区域的颜色变化任务简单网络容量需求自然就低。3.2 与球谐分支的配合单纯用空间坐标回归颜色还有一个问题它只能表达随位置变化、但不随视角变化的漫反射颜色。真实世界的高光、镜面反射是随视角变化的所以 SuperGaussians 保留了球谐分支让最终颜色由两部分组合而成。一部分来自 MLP 预测的空间变化基色另一部分来自球谐计算的视角相关修正量。这种“基色加修正”的结构在很多渲染管线里都能看到本质上和传统图形学里的“固有色加高光项”是同一个思路。好处是分工明确MLP 负责低频渐变的精准建模球谐只需要补偿中高频的视角变化两者互不干扰训练时的优化压力也小很多。我在复现时试过直接把球谐分支去掉只保留 MLP结果在塑料材质的物体上效果还行但一到有金属光泽的场景就崩了反射细节完全是糊的。把球谐分支加回来之后就正常了说明这个组合设计不是论文作者随便凑的而是经过实验验证的合理配置。3.3 与显式纹理方法的区别熟悉图形学的朋友可能会想到纹理映射给每个高斯贴一张小纹理图不也能表达空间变化颜色吗理论上可以但实际做起来问题不少。高斯原语的形状和朝向是任意的椭球给每个椭球做 UV 展开和纹理采样非常麻烦而且纹理分辨率不好定纹理图还会显著增加内存开销。用 MLP 回归颜色就没有这些问题。MLP 输入连续坐标天然是连续函数不需要考虑离散化、走样、UV 接缝等一堆麻烦事。而且 MLP 的参数量是可控的单个原语加一个几十 KB 的 MLP比起存一张纹理图要划算得多。这种“用计算换存储”的思路在神经渲染领域已经是非常成熟的做法了。4. 网络设计与训练策略的工程细节4.1 整体网络结构SuperGaussians 的网络结构并不复杂它是在传统 3DGS 的骨架上做增量修改。整体来看几何部分完全沿用 3DGS 的流程包括高斯原语的初始化、协方差矩阵的优化、致密化和剪枝策略颜色部分则做了替换从纯球谐变成“MLP 加球谐”的组合。具体到 MLP 的设计论文里给出的是三层全连接网络隐藏层维度大概在 64 到 128 之间激活函数用 ReLU 或者 SiLU。输入层接收归一化后的局部坐标输出层生成 RGB 值。这里有个细节值得注意局部坐标需要经过归一化否则不同尺度的高斯原语会让 MLP 的学习难度差异很大小高斯还好大高斯很容易训不动。球谐分支则基本沿用经典 3DGS 的设置阶数仍然是 3 阶不需要额外提高。因为 MLP 已经承接了大部分低频信号球谐只需要表达视角变化的高频部分3 阶足够用了。我测试过把球谐阶数提升到 4 阶效果提升微乎其微训练时间却涨了不少不值得。4.2 损失函数如何设计损失函数这块SuperGaussians 没有做颠覆性的改动主体仍然是 L1 加 SSIM 的组合这是 3DGS 系列的标准配置。L1 保证像素级的颜色准确SSIM 保证结构感知的质量两者加权相加权重比例大致是 0.8 比 0.2和经典实现保持一致。除此之外论文还加了一个针对 MLP 输出平滑性的正则项。这个正则项约束相邻位置的颜色变化不能过于剧烈避免 MLP 在训练集上过拟合出现噪点。具体做法是对局部坐标求梯度限制输出颜色梯度的 L2 范数。这个正则项的权重不用太大试下来 0.01 到 0.05 之间比较合适太大会把颜色场压成纯平面反而失去空间变化的优势。另外由于 MLP 引入了新的可训练参数学习率策略也和经典 3DGS 略有不同。MLP 部分的参数使用较小的学习率通常是主几何参数学习率的十分之一左右并且在训练迭代次数增加时采用余弦退火策略防止后期过拟合。这个细节很关键我第一次跑的时候把 MLP 学习率设得和几何参数一样高结果颜色场剧烈震荡损失怎么也降不下去。4.3 训练流程与收敛行为训练流程和经典 3DGS 大致一致先从稀疏点云初始化高斯原语然后迭代优化、致密化、剪枝。由于 MLP 的加入前向传播中每个高斯的颜色计算多了一步网络推理训练耗时略有上升但幅度可控整体大概比经典 3DGS 慢 15% 到 25%。收敛行为方面MLP 的收敛速度明显快于几何参数的收敛速度。前几千次迭代里MLP 迅速学会了粗糙的颜色分布之后的迭代主要用于精细调整和高斯的几何优化。这其实是个好现象说明颜色场和几何参数的优化解耦得比较干净不会互相干扰。值得注意的是致密化策略对最终效果的影响比想象中大。因为颜色变的灵活了单个高斯能表达的信息量变大需要致密化的场景比经典 3DGS 少。如果沿用经典 3DGS 的致密化阈值很容易把场景切得过度细碎浪费内存。我建议把致密化的梯度阈值适当调高让场景保持更稀疏的高斯分布这样才能充分体现 SuperGaussians 的优势。5. 实验效果与关键对比从数字到视觉5.1 量化指标的表现论文在多个标准数据集上做了对比实验包括 Mip-NeRF 360、Tanks and Temples、Deep Blending 等。在相同高斯原语数量的前提下SuperGaussians 的 PSNR 普遍比经典 3DGS 高 0.5 到 1.5 dBSSIM 也有相应提升。这个提升幅度在神经渲染领域不算小尤其是考虑到它几乎不增加推理时间。更值得注意的是在达到相同 PSNR 的前提下SuperGaussians 所需的高斯原语数量只有经典 3DGS 的 30% 到 60%。这意味着内存占用大幅下降渲染速度还能更快因为参与混合的高斯数量变少了。在大规模城市场景中这种优势会被进一步放大几百万高斯的场景能压到一两百万优化效果非常直观。5.2 可视化效果的直观差异数字只能说明一部分问题真正让我觉得这个方案有价值的是视觉对比。用经典 3DGS 渲染大面积渐变墙面时近距离看会有明显的“色块感”每个高斯之间的颜色过渡不够自然像低精度渐变色带。SuperGaussians 的渲染结果就自然得多MLP 输出的连续颜色场让渐变区域过渡非常顺滑。另一个差异出现在边缘高光。经典 3DGS 在拟合高光时经常会动用大量小高斯去硬凑结果高光周围出现一圈淡淡的“光晕”伪影。SuperGaussians 用 MLP 表达基色、球谐补充视角变化高光区域的拟合更精准伪影明显减少。这个差异在陶瓷、釉面砖、汽车漆面这类材质上尤其明显。5.3 和最新工作的对比论文里还和 Mip-Splatting、Zip-NeRF 等一系列改进方案做了对比。Mip-Splatting 主要解决多尺度采样带来的混叠问题SuperGaussians 则专注于颜色表达能力的增强两者解决的问题维度不同但能叠加使用。我自己在复现时把两者的思路结合起来做了测试果然在大尺度变化相机轨迹的场景下效果更好。和 Zip-NeRF 这类 NeRF 系方案比SuperGaussians 的渲染速度优势依然明显。NeRF 系方法再怎么优化也要处理大量的采样点渲染实时性很难保证。Gaussian Splatting 系方案在速度上的优势是碾压性的SuperGaussians 在保持这个优势的同时把画质短板补上了一截。6. 复现过程中的典型问题与避坑建议6.1 MLP 输入坐标的归一化问题这个问题我前面提过但值得单独展开说。高斯原语的尺寸差异非常大大场景里可能有几十米的大平面也有几厘米的细节物体。如果直接用绝对坐标作为 MLP 输入训练时不同尺度的原语之间会互相干扰网络很难学出一个统一的映射关系。正确的做法是先把局部坐标变换到标准空间。具体来说用高斯协方差矩阵的特征值对坐标做缩放让每个原语的局部坐标大致落在[-1, 1]范围内。这样 MLP 的输入空间就统一了不同尺度的原语可以被同一个网络有效处理。这个归一化操作看似简单但对最终效果的影响非常大。6.2 正则项权重的敏感性平滑正则项的权重是个需要仔细调节的超参数。权重太小起不到约束作用MLP 容易在训练后期出现局部震荡生成一些颜色突变的噪点权重太大颜色场被过度平滑渐变细节丢失空间变化能力就名存实亡了。我试下来比较稳妥的做法是先把正则项权重设为 0正常训练观察损失曲线的行为。如果发现损失收敛后颜色预测仍有明显震荡再逐步加大正则项。另外正则项可以只在训练的后半段开启前期让它自由拟合后期再做约束效果比全程开启略好。6.3 致密化阈值的调整前面说了SuperGaussians 在相同效果下需要的高斯数量更少所以致密化策略也必须跟着调整。经典 3DGS 的致密化触发条件是基于梯度的当某个高斯的位置梯度累计超过阈值时就把它分裂成两个。在 SuperGaussians 里颜色变化已经能被 MLP 吸收一部分位置梯度的压力会变小致密化触发的频率天然降低。如果你直接用经典 3DGS 的默认阈值很可能会过度致密化场景里塞了太多冗余高斯内存和速度的优势就没了。建议把致密化阈值调大到原来的 1.5 到 2 倍同时把剪枝的阈值也稍微放宽让场景保持更稀疏的原语分布。6.4 场景类型的适配性最后说一个容易被忽略的问题SuperGaussians 并不是在所有场景下都有明显优势。对于缺乏大面积平滑渐变、充满随机纹理的场景比如堆满杂物的桌面MLP 能发挥的空间有限提升幅度就不如平面渐变场景那么明显。如果你的应用场景主要是室内房间、城市街景、地形表面这类有明显平滑结构和连续渐变的场景SuperGaussians 的收益会非常大。如果是散乱物体、随机堆叠的场景经典 3DGS 加一点球谐阶数提升可能就够用了不一定非要上这套方案。根据我个人实操下来的体会SuperGaussians 最值得学习的地方不是它的网络结构有多复杂而是它对“用什么样的基底去表达信号”这件事的思考。颜色场该放在参数化基底里还是函数回归里渐变和视角变化该由谁负责这些设计决策对最终效果的影响远比堆叠网络层数重要。后面做相关方向的探索这套“拆分信号、各司其职”的思路比我之前尝试过的任何花哨结构都更值得参考。
返回列表