3D高斯泼溅(3DGS)实战:4070上从拍到出片45分钟,但这活儿我劝你想清楚再接

🔑 关键词:3D高斯泼溅,3DGS,实景三维重建,Nerfstudio,Postshot

📖 摘要:用两周时间、七个场景实测3D Gaussian Splatting,对比摄影测量和NeRF,附完整拍摄抽帧训练清理流程与参数,以及一个不太讨喜的结论:它替代不了摄影测量,但会挤掉另一种活。

起因挺蠢的:我想把楼下那棵树搬进浏览器

图片

去年底我在做一个小工具,需要几个真实场景的三维资产。找外包问了一圈,一个中等复杂度的房间,摄影测量加人工修模,报价 3800,交期 8 天。我嫌贵也嫌慢,就自己去折腾 3D Gaussian Splatting 了。

先说结局:那个项目我最后还是掏了那 3800。但我把家里、办公室、楼下小公园、朋友的咖啡馆、一辆旧自行车、一只猫(它动了,失败)、一个鞋盒,一共七个场景全跑了一遍,前后两周,大概烧掉 40 个小时。下面全是踩出来的东西。

3DGS 是 2023 年 8 月 SIGGRAPH 上 INRIA 那篇论文带火的,作者是 Bernhard Kerbl 那几个人。思路其实不复杂:NeRF 是让光线穿过体积去积分,慢;3DGS 换成几十万个半透明椭球,直接光栅化往屏幕上「泼」,所以快。

快多少?Mip-NeRF 360 那个数据集上,原版 Mip-NeRF 360 训一个场景大概要 48 小时,3DGS 论文里报的是 30 到 40 分钟,1080p 下渲染 100 FPS 以上,好一点的场景能到 200 多。这不是量变,是质变。

图片

三个方案摆一起,数字说话

为了公平,同一个场景——我办公室,大概 28 平米,一面落地窗一面白墙,墙上挂了几幅画——跑了三条线,全是同一批 187 张照片。

摄影测量这条线用 RealityCapture,48 分钟出 mesh,纹理肉眼可见地糊,画框边缘和窗框尤其明显,模型约 2.1GB。这东西的好处是你拿到的是真正的模型,能进 Blender 能进 Max,能改。

NeRF 这条线用 Nerfstudio 的 nerfacto,RTX 4070 上跑了 22 分钟。出图好看,但你拿不到 mesh,导不出带 UV 的东西,我想在 Blender 里动点手脚基本没戏,只能当「会转的动画」用。

图片

3DGS 用的是 Postshot(Jawset 出的那个 Windows 软件,带 GUI,对新手很友好),同样照片,训练 12 分钟,导出的 PLY 文件 460MB,高斯数量大概 190 万。用 SIBR viewer 看,真实跑到 100 帧以上。玻璃反射它糊得很有「AI 味」,但整体观感比摄影测量的贴图高一大截。

顺便说个很多人忽略的数字:标准 3DGS 的 PLY,每个高斯大概 236 字节(位置 3 个 float 12 字节 + 缩放 12 + 旋转 16 + 不透明度 4 + 三阶球谐 48 个 float 192 字节)。190 万高斯就是 448MB 左右,跟我实际看到的文件大小对得上。这个数字后面会害死你。

从拍到出片,我稳定下来的一套流程

设备是 iPhone 15 Pro 录 4K 60fps,加一台 4070 12GB 显存、32GB 内存的机器。拍摄绕着目标走两圈,一圈平视一圈稍微抬高俯拍,曝光锁定,千万别让手机自动调亮度——亮度跳变会让位姿估计直接崩,这是我踩过最大的坑之一。走动节奏大概是每两步停半秒,别快,快了就拖影。

图片

抽帧用 ffmpeg,命令很简单:ffmpeg -i input.mp4 -vf fps=2 frames/%05d.jpg。2fps 一般够用,两分钟视频大概抽出 240 张。然后手动删掉糊的、拍到脚的、拍到自己的,留 180 到 220 张最舒服。

位姿估计我一开始用 COLMAP,200 张 GPU 版大概 18 分钟,很稳。后来转用 Nerfstudio 的 ns-process-data,它内部还是调 COLMAP,但抽帧、去畸变、缩放一条龙,省事。注意别用太高的图像分辨率,1600 像素宽差不多,再大显存吃不消。

训练阶段 Postshot 界面上就几个滑块:训练步数默认 30000,我一般拉到 30000 到 35000 就停,再往上肉眼基本看不出差别,高斯数量反而爆炸。密度控制那个 densify gradient threshold(默认 0.0002)我基本没动过。12 分钟出结果,显存峰值跑到 9.8GB。

图片

清理这步千万别省。用 SuperSplat(PlayCanvas 出的,浏览器里跑,免费),把天上飘的高斯、相机没拍到的鬼影全删掉。我那个办公室场景从 190 万删到 130 万,文件从 460MB 降到 320MB,画质几乎没损失。发布的话桌面端 SIBR viewer 最稳,网页端用 PlayCanvas 的 gsplat 或者 Niantic 开源的 SPZ 格式,320MB 能压到 30 多 MB,加载快一个量级。

真正的坑不是渲染,是显存和「你改不动」

显存这条线,12GB 是生死线。我试过一个大概 200 平米的咖啡馆,拍了 420 张,高斯数量冲到 600 万,直接 OOM,训到一半崩了。后来把图像降到 1200 像素宽、砍掉一部分球谐阶数才跑通。想认真做这行的,建议直接上 24GB,省的时间比省的钱值。

文件大也是同理。3DGS 的资产天生比 mesh 大一到两个数量级。一个压缩到极致、带 LOD 的摄影测量 mesh 可能 40MB,同样观感的 3DGS 是 300MB 起。你在手机上打开一个 300MB 的网页场景,那体验基本是劝退。

图片

但最要命的不是这些,是——你改不动。mesh 你可以进 Blender,选中一个面删掉,拉一下,换个材质。3DGS 你没法这么干。你能做的只有「框选一批高斯删掉」,或者整体缩放旋转。想给沙发换个颜色?想把墙上那幅画换成别的?现在没有能进生产管线的成熟方案,2024 年那批 gaussian editing 的论文都还在实验阶段。

所以我的判断是:3DGS 现在吃掉的,是「只需要看、不需要改」的场景——文物展示、房产漫游、VFX 的背景板、数字孪生的可视化层。它替代不了摄影测量,因为摄影测量交出来的是一份能被人继续改的资产,3DGS 交出来的是「一张能走进去的照片」。

它真正在挤的其实是另一个工种:靠给展示型场景做轻量建模吃饭的那批人。楼盘 VR 样板间、博物馆线上展厅这种活,原来要一个人对着照片在 Max 里描三四天,现在拍半小时、跑二十分钟、清一下,效果还更真。

要不要现在入局?分人。你本来就在做 Web3D、展览展示、VFX,现在学成本很低,一个周末能上手。你要是想靠「3DGS 三维重建服务」接商单,先想清楚一个问题:客户拿到这东西,接下来要干嘛。他要改,你交付不了;他只是要看,那你报 3800 可能撑不住,因为客户自己拿手机也能拍。

🏷️ 标签: