Spirula Studio对比视图实战:同屏对比4个模型找出"更好"的那一个
【免费下载链接】spirula-studioCross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA.项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio
Spirula Studio 的对比视图(Compare View)是 3D 高斯泼溅(3D Gaussian Splatting,简称 3DGS)训练流程中一个不起眼却极其好用的功能:它允许你把最多 4 个模型同屏对比,共用同一台相机,一眼看出哪个重建"更好"。无论是比较两次不同配置的 3DGS 训练结果,还是对比 Splat 模型与网格(Mesh)的还原效果,这个功能都能帮你做出客观判断。
为什么需要"同屏对比",而不是开两个窗口?
单独看一个模型,你只能回答"它好不好?";而调参时真正想问的是"它更好吗?"。这个问题有一个前提:两张图除了模型本身,其他一切都必须相同——相机位置、视角、远近、网格参照。
Spirula Studio 的对比视图把这三件事一次做齐:
- 同一台相机:所有窗格共用一个导航相机,转一下鼠标,4 个画面同步转动,同一处场景同时出现在每个窗格里;
- 自动坐标对齐:同一场景的两次重建共用世界坐标,默认"放到第一个模型的坐标里"会自动把它们精确叠合;
- 唯一的参照网格:坐标轴和网格以第一个模型为基准绘制,保证 4 个窗格始终可比。
核心逻辑在 CompareView.h 中实现,设计思路完整记录在 compare-view.md。
对比视图快速上手:打开模型文件,点"添加模型"
使用路径非常直接,全程不需要命令行:
- 打开第一个模型:在 Viewer 界面打开任意一个模型文件。格式自动识别,支持三类:
- 3DGS 模型(
.plysplat 文件、step-*.ckpt检查点目录,或直接指向训练运行目录,自动取最新检查点) - 稀疏重建点云
- 三角网格(OBJ / GLB / PLY 等)
- 3DGS 模型(
- 点"添加模型"(Add a model):在旁边再放一个模型。最多同时 4 个,窗格会按数量自动排成 1 格、2 格、3 格或 2×2 网格布局;
- 拖拽任意窗格导航:所有窗格跟着转。想单独调整某个模型的摆放,用窗格菜单里的"位置 / 旋转 / 大小"滑杆即可,随时可以"放回原处"。
几个实用细节:
| 功能 | 说明 |
|---|---|
| 混合格式对比 | Splat、点云、网格可以随意混搭在同屏,模型加载器 SplatViewer.h 会自动识别文件内容 |
| 加载不卡界面 | 数百 MB 的大模型在后台线程读取,加载期间窗格显示进度 |
| 最近文件列表 | 添加模型时可以直接从最近打开过的模型里选,批量实验不同配置时很省事 |
| 窗口排布 | 窗格支持左移 / 右移排序,方便固定"基线模型放第一格" |
💡 技巧:第一个窗格是参照系。建议永远把你想保留的基线模型放在第一位,后加入的模型默认会对齐到它的坐标。
4 个窗格能摆什么?3 个最常见的实战场景
场景一:同场景两次重建 PK。同一批照片,一次用 50 万高斯,一次用 200 万高斯——把两个splat.ply放进两格,转到细节最多的角度(文字、毛发、半透明材质),哪个"漂浮伪影"少、哪个边缘更锐利,一眼分晓。
场景二:不同训练策略横向对比。Spirula Studio 支持多种预设(3dgs、360-camera、in-the-wild 等)。跑完 2~4 个配置后,把各运行目录分别拖进来,2×2 布局同屏过一遍,比逐个开窗口快得多。
场景三:Splat vs 网格的还原度检查。这是最容易被忽略的用法——网格化预览屏幕本身就是对比视图:左边自动打开 Splat 模型,右边打开刚提取出来的网格,两者自动对齐到同一坐标系。表面有没有破洞、纹理有没有错位,不用来回切屏。
幕后 30 秒:为什么 4 个大模型能同时流畅渲染?
对好奇的同学,这套同屏对比在工程上绕开了两个大坑(详见 compare-view.md):
- 场景槽位(scene slots):引擎本身是全局单例,只有一套世界数据。对比视图给引擎加了"场景槽位",每个模型占用独立显存缓冲区,切换窗格只是"指针交换 + 四个标量",而不是每帧重新上传几十 MB 的模型数据;
- 一把互斥锁:所有窗格的渲染工作线程共用同一把引擎锁,避免两个窗格同时绑定不同场景时"拿 A 模型的相机渲染 B 模型"这种诡异的竞态。
另外,每个模型到共享坐标系的变换是作用在相机上而非几何体上,所以手动微调某个模型的位置/旋转/大小几乎零成本,且引擎渲染与 GL 预览表现一致。
相关文档与模块路径
- 对比视图设计文档:docs/notes/compare-view.md
- 视图容器实现:src/app/gui/CompareView.cpp
- 模型加载器:src/app/gui/SplatViewer.cpp
- 应用整体说明(含各 GUI 模块职责表):src/app/README.md
- 界面文案目录(含对比视图的全部多语言提示):src/i18n/catalog/Gui.h
常见问题
Q:为什么第 5 个模型加不进去?A:4 格已是上限(kMaxModels = 4),再多加单个窗格就小到看不清细节了。关掉一个旧模型再加新的即可。
Q:两个模型对不齐怎么办?A:确认它们来自同一场景/同一数据集(世界坐标一致)。若确实无关,把该模型的"放到第一个模型的坐标里"关掉,让它按自身范围取景,再用位置/旋转/大小滑杆手动对齐。
Q:对比视图里能训练吗?A:不能。场景槽位只负责"看",不携带优化器和梯度状态——这是设计使然:对比视图打开期间,引擎归它独占。
【免费下载链接】spirula-studioCross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA.项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考