第04章:选择工具与高斯点数据编辑
清理高斯模型的核心工作流是:选中要处理的高斯点 → 隐藏或删除 → 反复迭代。本章详解 SuperSplat 丰富的选择工具与数据编辑能力,对应源码 src/tools/ 与 src/edit-ops.ts。
1. 选择与编辑的底层模型
回顾第 02 章:每个高斯点都有 selected、hidden、deleted 三个状态位(src/splat-state.ts)。本章所有操作的本质,就是用各种工具圈定一批点,然后对它们的状态位做修改:
- 选择工具:把目标点的
selected位置位/清除/切换; - 隐藏/显示:操作
hidden位; - 删除/恢复:操作
deleted位(导出前都可恢复)。
这些修改通过 edit-ops.ts 中的可撤销操作(StateOp 等)执行,并压入 edit-history.ts 的历史栈,因此任何操作都能 Ctrl + Z 撤销。
2. 选择工具一览
SuperSplat 通过 ToolManager(src/tools/tool-manager.ts)管理工具,同一时刻只有一个工具处于激活状态。激活工具后,按 Esc 可退出(tool.deactivate)。各选择工具如下:
| 工具 | 快捷键 | 源码文件 | 适用场景 |
|---|---|---|---|
| 矩形选择 | R |
rect-selection.ts |
快速框选规则区域 |
| 套索选择 | L |
lasso-selection.ts |
手绘任意闭合区域 |
| 多边形选择 | P |
polygon-selection.ts |
逐点点击勾勒精确多边形 |
| 画笔选择 | B |
brush-selection.ts |
像“涂抹”一样刷选,笔刷可调大小 |
| 球体选择 | (工具栏) | sphere-selection.ts |
用 3D 球体范围选择空间内的点 |
| 包围盒选择 | (工具栏) | box-selection.ts |
用可变换的 3D 长方体框选 |
| 洪水填充选择 | O |
flood-selection.ts |
按连通性/相似性自动蔓延选择 |
| 滴管选择 | Ctrl + E |
eyedropper-selection.ts |
点击拾取相似属性的点 |
2.1 2D 屏幕空间选择(矩形/套索/多边形/画笔)
这类工具在屏幕上画出 2D 形状,再把落入该形状投影范围内的高斯点选中:
- 矩形(R):按下拖出一个矩形,松开即选中;
- 套索(L):按住自由绘制闭合曲线;
- 多边形(P):依次点击顶点,双击或回车闭合;
- 画笔(B):按住涂抹,凡是笔刷扫过的点都被选中。笔刷大小用
[缩小、]放大(tool.brushSelection.smaller/bigger)。
2.2 3D 体积选择(球体/包围盒)
球体与包围盒选择在 3D 空间中定义一个体积,选中其内部的点,特别适合剔除某个空间区域的漂浮物或只保留主体:
- 球体选择:放置并缩放一个球体,选中球内/球外的点;
- 包围盒选择:放置一个可平移/旋转/缩放的长方体(
box-shape.ts),精确框选立体区域。
2.3 智能选择(洪水填充/滴管)
- 洪水填充(O):从点击处出发,按空间连通性与属性相似度自动蔓延,快速选中“一整块”——例如选中整面墙或整片背景;
- 滴管(Ctrl+E):点击一个点,自动选中与之属性(如颜色/不透明度)相近的所有点。
3. 选择的组合:加选、减选、反选
多数选择工具支持配合修饰键进行集合运算(具体修饰键以编辑器内提示为准,通常 Shift 为加选、Alt/Ctrl 为减选)。配合菜单/快捷键的全局选择操作(src/editor.ts 中注册):
- 全选:
Ctrl + A(SelectAllOp); - 取消选择:
Ctrl + Shift + A(SelectNoneOp); - 反选:
Ctrl + I(SelectInvertOp)。
典型技巧:先用洪水填充选中“主体”,再 Ctrl + I 反选得到“背景”,一键删除背景。
4. 隐藏、显示与删除
选中点后,可执行以下编辑(均可撤销):
- 隐藏选区:
H(select.hide→HideSelectionOp),把选中点的hidden置位,使其暂时不可见。隐藏用于“专注观察”或“保护这部分不被误删”; - 取消所有隐藏:
Shift + H(select.unhide→UnhideAllOp); - 删除选区:
Delete/Backspace(select.delete→DeleteSelectionOp),标记deleted。注意删除在导出前都是逻辑删除,可用撤销恢复; - 重置:
ResetOp可将模型恢复到初始状态。
隐藏(hidden)与删除(deleted)的区别:隐藏只是临时不显示,导出时仍会包含;删除会在最终导出时真正剔除这些点(从而减小体积)。
5. 基于属性的筛选:数据面板与直方图
除了空间选择,SuperSplat 还能按高斯点的属性值进行筛选,这是清理噪点的利器。打开数据面板:Ctrl + D(dataPanel.toggle,源码 src/ui/data-panel.ts 与 histogram.ts)。
数据面板以直方图展示某个属性的分布,可筛选的属性通常包括:
- 不透明度(opacity):背景噪点往往不透明度很低,拖动阈值即可一次性选中并删除所有“半透明垃圾点”;
- 缩放(scale):异常巨大的高斯往往是漂浮的“面片噪声”,按 scale 上限筛选并删除;
- 位置(x/y/z):按坐标范围筛选,剔除远离主体的离群点;
- 颜色 / 球谐:按颜色分量筛选特定色块。
操作方式:在直方图上拖选一个数值区间,编辑器会实时高亮(选中)落在该区间的点,确认后即可隐藏或删除。这种“按数据分布清理”的方式比纯手工框选高效得多。
6. 撤销、重做与历史
所有编辑操作都进入 EditHistory(src/edit-history.ts):
- 撤销:
Ctrl + Z(edit.undo); - 重做:
Ctrl + Shift + Z(edit.redo)。
因为采用 do/undo 模式(每个 EditOp 都实现了 do() 与 undo()),你可以大胆尝试激进的清理操作,发现过度删除后逐步回退。src/editor.ts 还会在场景元素被移除时清理引用它的历史操作,保证一致性。
7. 实战:清理一个 3DGS 扫描模型
一个典型的清理工作流:
- 整体观察:飞行模式巡视,找出主要噪声区域(第 03 章);
- 按不透明度粗清:
Ctrl + D打开数据面板,拖低不透明度阈值,选中并删除低透明度噪点; - 按 scale 清漂浮物:切换到 scale 直方图,删除异常大的高斯;
- 空间裁剪:用包围盒/球体选择保留主体,反选删除外围背景;
- 精修:用画笔/套索手动清理残留的漂浮点;
- 隐藏保护:把已清理干净的主体隐藏,专注处理剩余区域;
- 复核:
Shift + H全部显示,整体检查;如有误删用Ctrl + Z回退。
完成清理后,模型点数显著减少、画面更干净,为后续变换、调色与导出打好基础。
8. 本章小结
本章系统介绍了 SuperSplat 的选择与编辑体系:
- 选择工具分为 2D 屏幕选择(矩形/套索/多边形/画笔)、3D 体积选择(球体/包围盒)与智能选择(洪水填充/滴管);
- 通过加选、减选、全选、反选进行集合运算;
- 选区可隐藏(hidden)、删除(deleted),删除在导出前可逆;
- 数据面板 + 直方图支持按不透明度、缩放、位置、颜色等属性高效筛选清理;
- 所有操作可无限撤销/重做。
下一章我们学习变换(平移/旋转/缩放)、裁剪与多模型场景管理。