首页 / 资讯中心 / 文章详情

3D Gaussian Splatting解决了什么问题?从NeRF到实时渲染的破局之路

3D Gaussian Splatting解决了什么问题?从NeRF到实时渲染的破局之路 ★ FEATURED ARTICLE
1. 从“渲染一张图要等半天”说起3D Gaussian Splatting 到底动了谁的蛋糕如果你最近半年刷过图形学相关的技术社区大概率会被“3D Gaussian Splatting”这个词反复刷屏。各种演示视频里一个场景从几十张照片出发几分钟内就能在浏览器里实时旋转、缩放、漫游光影和细节还相当能打。很多人第一反应是“又一个新玩具”但真正上手跑过一遍之后你会发现它解决的不是一个小问题而是过去十年里三维重建和实时渲染之间那道一直没被真正填平的鸿沟。我先把结论摆在前面3D Gaussian Splatting后面我简称 3DGS解决的核心问题是在保证照片级真实感的前提下把三维场景的表示、训练和实时渲染这三件事第一次比较优雅地捏在了一起。它既不像传统摄影测量那样只能给你一堆没有光泽的网格也不像神经辐射场NeRF那样渲染一张图要等好几秒甚至几十秒。它用一堆带方向和形状的“高斯椭球”来描述场景训练快、渲染快、编辑性还不错这就是它为什么能在短时间内吸引这么多人的根本原因。这篇文章是“3D Gaussian”系列的第二篇第一篇我们聊了它是什么、基本数学形式长什么样。这一篇我们专门回答一个问题它到底解决了什么问题我会从传统方法的痛点讲起把 NeRF 的贡献和局限掰开揉碎再讲 3DGS 是怎么针对性地补位的最后落到实操层面告诉你哪些场景适合用它、哪些坑必须提前知道。不管你是做三维重建、数字孪生、游戏资产还是单纯想把自己的房间做成可漫游的 3D 场景这篇都能给你一个比较清晰的判断依据。2. 先搞清楚旧世界有多难三维重建与渲染的三条老路要理解 3DGS 解决了什么问题得先知道在它之前大家是怎么干的以及每条路都卡在哪里。我把主流方案大致分成三类传统摄影测量与网格重建、显式点云与体素、以及神经辐射场。它们各有各的高光时刻但也都留下了没填完的坑。2.1 传统摄影测量能出网格但“真实感”是奢侈品传统摄影测量Photogrammetry的思路很直观你拍一堆照片算法通过特征点匹配算出相机位姿再三角化出一堆稀疏点最后做稠密重建得到点云再转成网格、贴上图。这条链路非常成熟工具也多工业界用了很多年。它的优点很明确输出是显式的网格加纹理可以直接丢进游戏引擎、CAD 软件、渲染器里用兼容性极好。但问题同样明显。第一网格重建对表面假设很强遇到反光、透明、细密结构比如树叶、铁丝网、毛发就容易糊成一团或者破洞。第二光照是“烤”在纹理里的你换个光源方向阴影和高光全对不上因为它根本没有把光照和材质分离出来。第三想要高质量网格计算量和人工修模成本都很高一个中等场景修几天是常事。所以传统摄影测量解决的是“有没有”的问题解决不了“像不像、能不能实时换光照”的问题。对于需要照片级真实感又要实时交互的场景它基本力不从心。2.2 显式点云与体素渲染快但细节和连续性难两全点云是最接近“原始扫描数据”的表示激光雷达和摄影测量都能产出。它的好处是渲染起来可以很快尤其是做 splatting 渲染时把每个点画成一个带大小的小圆盘就行。体素则是把空间切成小格子每个格子记录占用或颜色结构规整、查询方便。但这两条路都有硬伤。点云的问题是点与点之间没有连续性你放大看就是一堆离散的圆片表面不闭合光照也没法正确计算稍微换个角度就露馅。体素的问题是分辨率一高内存就爆炸而且体素化本身会带来块状伪影想要细腻表面就得用很细的格子代价承受不起。更关键的是这两者都很难表达“这个表面在某个方向上反光特别强”这种各向异性的材质特性。一句话总结显式表示渲染快、可编辑但要做到照片级真实感和连续表面代价极高。2.3 神经辐射场 NeRF真实感拉满但速度和编辑性是软肋NeRF 的出现是真正的范式转变。它用一个多层感知机MLP把“空间位置 观察方向”映射到“颜色 密度”然后用体渲染沿光线积分出像素颜色。训练时靠多视角照片做监督学出来的场景真实感极强反光、半透明、细密结构都能较好地还原这是它拿奖拿到手软的原因。但 NeRF 的代价也很直接。第一渲染慢。原始 NeRF 渲染一张图要沿每条光线采样上百个点每个点都要过一遍 MLP一张图几秒到几十秒很正常实时交互基本别想。虽然后续有各种加速变体比如把场景存成哈希网格、八叉树、张量分解等把渲染压到了接近实时但训练和显存开销依然不小。第二编辑性差。场景信息藏在网络权重里你想删掉一个物体、移动一个家具几乎无从下手因为没有一个显式的几何结构让你去操作。第三训练时间长原始版本动辄一两天加速版也要几十分钟到几小时。NeRF 解决的是“真实感”的问题而且解决得很漂亮但它把“实时”和“可编辑”这两件事牺牲掉了。这就是 3DGS 登场时面对的战场真实感已经有了标杆缺的是一个既真实又实时、还能动手改的方案。3. 3DGS 的破局点用“会变形的小椭球”同时拿下速度与真实感理解了旧世界的三条路3DGS 的定位就非常清楚了。它没有推翻 NeRF 的体渲染框架而是把“场景表示”从隐式网络换成了一堆显式的高斯椭球。每个高斯有自己的位置、协方差决定它被拉成什么形状、朝哪个方向、不透明度以及用球谐函数表示的方向相关颜色。渲染时把这些椭球投影到屏幕上按深度排序后做 alpha 混合就得到最终图像。这个设计看似简单但它一次性回应了前面提到的多个痛点。我把它解决的问题拆成下面几个层面来讲这样你能更清楚地看到每一步的取舍。3.1 解决“真实感与实时性不可兼得”的老大难3DGS 最直接的贡献是把照片级真实感和实时渲染同时做到了。因为每个高斯是显式的、可以独立投影和混合的渲染过程高度并行现代 GPU 上跑到 100 FPS 以上并不罕见分辨率高一点也能维持在交互水平。同时由于它保留了体渲染的 alpha 混合机制半透明、细密结构、方向相关的高光都能表达真实感不输 NeRF 太多。这里的关键在于“显式 可微 光栅化”这个组合。显式让渲染变成一次前向的投影和排序不需要对每个像素做大量网络查询可微让整个场景能从照片端到端优化光栅化则充分利用了 GPU 的并行能力。三者叠加才有了“训练几分钟、渲染上百帧”的表现。3.2 解决“训练太慢、迭代成本太高”的问题NeRF 训练慢很大一部分原因是每条光线要采样很多点、每个点都要过网络。3DGS 把场景变成有限数量的高斯训练时只需要对这些高斯做投影和混合反向传播的路径短得多。实际跑下来一个中等规模的场景几十分钟内就能从照片优化到可看的程度比原始 NeRF 快了一到两个数量级。这对从业者意味着什么意味着迭代周期从“天”变成了“小时甚至分钟”。你可以上午拍一组照片中午跑完下午就能在引擎里看效果、调参数、重新拍补拍。这种反馈速度上的变化对项目节奏的影响是质变的不只是“快一点”而已。3.3 解决“场景不可编辑、没法二次创作”的尴尬因为高斯是显式的每个椭球都有明确的位置和形状你可以直接对它们做操作删掉一片区域、把某个物体整体平移、给某个高斯换个颜色、甚至把两个场景的高斯合并。这在 NeRF 里几乎是不可能完成的任务因为信息分散在网络权重里没有对应的几何实体。这个特性打开了很多实际应用的门。比如做数字孪生时你可以把扫描出来的场景里不需要的临时物体删掉做虚拟拍摄时可以把前景物体单独拎出来重新打光做游戏资产时可以把高斯场景和传统网格混合使用。可编辑性让 3DGS 从“只能看的 demo”变成了“能进工作流的资产”这是它区别于纯研究玩具的重要标志。3.4 解决“显式表示内存爆炸”的顾虑有人会问显式表示不是内存很贵吗点云和体素不就是这么翻车的3DGS 的巧妙之处在于它不需要固定分辨率的网格而是把高斯放在真正有表面的地方。空旷区域没有高斯细节多的区域高斯密集相当于一种自适应的空间分配。再加上训练过程中会做稠密化和剪枝最终的高斯数量通常控制在几十万到几百万级别配合合理的压缩内存和显存开销是可以接受的。当然这不是说它没有内存问题后面讲坑的时候我会细说。但相比“均匀切格子”的体素它的空间利用率高得多这是它能落地的关键之一。4. 落到实操3DGS 在哪些场景真正解决了问题光讲原理容易飘我们看看它在实际场景里到底解决了什么具体问题。我按几个典型方向来说每个方向都对应一类过去很难受、现在明显改善的需求。4.1 小场景快速重建从拍照到可漫游只要一顿饭的功夫这是 3DGS 最出圈的应用。你拿手机绕着一个物体或一个房间拍几十到上百张照片用 COLMAP 之类的工具算出相机位姿然后跑 3DGS 训练几十分钟后就能得到一个可以实时漫游的场景。过去用 NeRF 做同样的事训练要几个小时甚至更久渲染还卡用传统摄影测量真实感和光照又差一截。我实测过一个室内角落的场景大约 80 张照片位姿计算加训练总共不到一小时出来的效果在浏览器里旋转非常流畅桌面上的反光、墙角的阴影都还在。这种“随手拍、快速出”的能力对做房产展示、文物数字化、电商商品 3D 展示的人来说是实打实的效率提升。4.2 大场景与户外重建把“城市级”从论文拉进现实大场景重建一直是难点因为数据量大、视角多、光照变化复杂。3DGS 因为训练和渲染都快配合分块和层次化策略已经能处理街区级别的场景。虽然超大场景仍然需要工程上的分块管理和流式加载但相比 NeRF 时代“一个大场景训练到天荒地老”现在的可行性高了很多。这里解决的核心问题是规模与成本的平衡。你不需要为了一个大场景准备夸张的算力用消费级显卡配合合理的分块策略就能做出可交互的户外漫游。这对做文旅、园区展示、自动驾驶仿真数据生成的人来说意义很大。4.3 动态与可编辑场景让“扫描结果”变成“可加工素材”前面提到可编辑性这里展开说。因为高斯是显式的做动态场景时可以对高斯做形变、跟踪、分层。比如把一个人从场景里分离出来单独控制他的动作或者把场景按语义分成地面、建筑、植被分别处理。这些操作在 NeRF 里要么做不了要么要额外训练一个网络成本高且不灵活。对做影视预演、虚拟制片、游戏关卡设计的人来说可编辑的高斯场景意味着它可以直接进入创作管线而不是只能当参考。你可以把扫描的场景当背景把前景物体替换掉重新打光再渲染出来。这个工作流的顺畅程度是过去很难想象的。4.4 作为神经渲染的“加速底座”给其他方法当基础设施还有一类不那么显眼但很重要的价值3DGS 正在成为一种基础表示被用来加速其他神经渲染任务。比如把它和物理模拟结合做可变形物体把它和生成模型结合做 3D 内容生成把它和 SLAM 结合做实时建图。因为它渲染快、可微、显式很多需要“快速试错”的研究都能拿它当底座。这解决的是“研究迭代速度”的问题。过去很多想法受限于渲染太慢验证一个假设要等很久现在有了快速可微的渲染器实验周期大大缩短。这种基础设施层面的价值往往比单个应用更深远。5. 别只看好处3DGS 没解决或解决得不够好的问题讲完它解决了什么必须诚实地讲它没解决什么。任何方法都有边界把边界讲清楚你才能判断它适不适合你的项目。5.1 内存与显存大场景仍然是硬约束高斯数量随场景复杂度增长一个精细的大场景很容易到几百万甚至上千万个高斯每个高斯要存位置、协方差、不透明度、球谐系数显存占用相当可观。虽然有很多压缩和量化的工作但在消费级硬件上跑超大场景仍然吃力。这是它相比“一个网络走天下”的 NeRF 在存储上的劣势。5.2 几何质量表面提取不是它的强项3DGS 擅长的是“看起来对”而不是“几何精确”。你从高斯场里提取网格得到的表面往往比较噪边缘不够锐利做精确测量或 CAD 逆向时不够用。如果你的目标是拿到干净的网格做工程分析传统摄影测量或专门的表面重建方法可能更合适。5.3 光照与材质分离仍然是开放问题虽然球谐函数能表达方向相关颜色但它本质上还是把光照“烤”进了颜色里没有真正把材质和光照分离。这意味着你没法像 PBR 那样自由换光源、换环境贴图。想要真正可重打光的场景还需要结合逆渲染的方法这目前仍是研究热点离成熟还有距离。5.4 对输入数据的依赖位姿和覆盖度很关键3DGS 依赖准确的相机位姿位姿算不准训练结果就会糊或者漂。同时它对拍摄覆盖度有要求视角太稀疏或者有大量遮挡的区域重建质量会明显下降。这一点和 NeRF 类似不是它独有的问题但上手时必须心里有数。6. 实操避坑指南我踩过的坑和对应的解法这一节是给准备动手的人看的。下面这些经验很多是文档里不会写、只有实际跑过才知道的。6.1 拍摄阶段宁多勿少但别乱动拍摄时尽量保持曝光和白平衡一致避免自动模式来回跳。绕圈拍的时候相邻照片要有足够重叠一般建议 70% 以上。不要只拍一个高度俯拍和仰拍都补一些否则高处和低处的细节会缺失。我试过只拍一圈平视结果桌面和地面边缘糊得厉害补拍仰角后才好转。6.2 位姿计算COLMAP 参数别照搬默认用 COLMAP 算位姿时默认参数不一定适合所有场景。纹理弱的墙面、重复纹理的地砖容易匹配失败。可以适当提高特征点数量、开启更多匹配策略。如果场景很大建议分块处理再合并不要一次性丢进去。位姿质量直接决定最终效果这一步偷懒后面全白搭。6.3 训练参数稠密化和剪枝要盯着看训练过程中高斯会不断稠密化和剪枝参数设得太激进高斯数量会爆炸显存直接爆设得太保守细节又出不来。建议先用默认参数跑一遍观察高斯数量增长曲线再根据显存情况微调。如果发现某些区域高斯异常密集往往是那里位姿不准或者有遮挡回头检查数据比硬调参数更有效。6.4 常见问题速查表现象可能原因排查方向渲染有大量漂浮物位姿不准或背景干扰检查 COLMAP 重投影误差剔除异常帧表面糊、细节丢失拍摄覆盖不足或高斯太少补拍视角适当增加稠密化迭代显存爆掉高斯数量过多或分辨率太高降低训练分辨率收紧稠密化阈值颜色忽明忽暗曝光不一致拍摄时锁定曝光或做颜色归一化边缘有拖影运动模糊或快门太慢重拍保证拍摄时稳定提示训练前先用小分辨率快速跑一遍确认位姿和整体效果没问题再上高分辨率正式训练。这样能省下大量试错时间。7. 我个人在实际操作中的体会跑过几个场景之后我最大的感受是3DGS 真正的价值不在于它某一项指标多强而在于它把“真实感、速度、可编辑”这三者拉到了一个都能接受的区间。过去你必须在它们之间做取舍现在你可以说“我都要”虽然每一项都不是极致但组合起来就是能干活。另一个体会是数据质量永远比算法调参重要。我见过太多人花大量时间调训练参数结果问题出在拍摄时曝光乱跳或者位姿算错。把拍摄和位姿这两步做扎实后面基本就是顺水推舟。这个内容后续还可以往动态场景和可重打光方向扩展那两块目前还有不少空白值得持续关注。
阅读完成 · 觉得有帮助?
咨询建站