3D高斯泼溅、网格与体素——有何区别
如何选择适合可步行3D场景的格式
引言
你扫描了一个房间。纹理效果令人惊艳——阳光透过窗户洒进来,角落里光影分明,每个细节都清晰锐利。你切换到第一人称视角,向前迈出一步,然后立刻穿过墙壁掉进了虚空。
这就是当今三维数据工作的现实:你如何表达一个场景,决定了你能用它做什么。 一种能提供震撼真实感的格式,可能在基本的碰撞检测上完全失效。一种让你穿墙而过的格式,可能恰恰是光影捕捉最完美的那一个。
三种主流的表达方式——3D高斯泼溅(3DGS)、多边形网格和体素——各自解决不同的问题。没有"最好"的格式,只有适合你目标的正确格式。
本文剖析每种表达方式的原理、各自的优势、各自的短板,以及如何在不同场景中做出选择——尤其是当你的目标是构建一个可步行、高真实感的三维场景时。
1. 三维数据如何表达:快速概览
在深入细节之前,先从最基础的层面定义这三种格式。
| 格式 | 描述 |
|---|---|
| 3D高斯泼溅(点云) | 数百万个半透明椭球体(高斯),每个携带颜色、位置、透明度和协方差矩阵。它们共同构成连续、高度逼真的场景。 |
| 网格(Mesh) | 由顶点、边和多边形面(通常为三角形)构成的网络,定义了物体或场景的显式表面。纹理通过UV坐标映射到表面上。 |
| 体素(Voxel) | 三维网格中的立方体单元,每个单元存储一个值——被占据或为空,可附带颜色和密度数据。相当于三维的"像素"。 |
三种格式各有来源:点云来自激光扫描和摄影测量;网格来自计算机图形学和CAD;体素来自医学影像和科学可视化。如今,它们在虚拟导览、数字孪生、三维内容创作等应用场景中正走向融合。
为什么表达方式如此重要: 格式选择会串联影响每一个下游决策——你能单独编辑物体吗?能做碰撞检测吗?能在浏览器中实时传输场景吗?能精确测量距离吗?回答这些问题,首先要理解每种格式能提供什么、不能提供什么。
2. 3D高斯泼溅(3DGS):真实感渲染的新标准
2.1 什么是3D高斯泼溅?
3D高斯泼溅由 Kerbl 等人于2023年提出,用密集的3D高斯集合来表现场景——这些柔软、各向异性的椭球体相互重叠,从任意视角渲染都能形成连续图像。
不同于传统点云中每个点是硬性的、无穷小的点,每个高斯拥有:
- 位置(xyz): 在三维空间中的坐标
- 协方差(3×3矩阵): 决定了它的形状——拉伸、扁平或球形
- 颜色(RGB): 以球谐函数编码,颜色会随视角变化自然偏移
- 透明度(α): 从完全透明到完全不透明
渲染3DGS场景时,渲染器按深度对所有高斯排序,然后从前到后进行混合——这个过程叫"泼溅(splatting)"。最终得到连续、无缝的图像,对反射、半透明、高光等细节的捕捉效果远超纹理贴图的网格。
2.2 为什么3DGS优于传统方法
| 能力 | 3DGS | 摄影测量(Mesh) | NeRF |
|---|---|---|---|
| 真实感 | 极佳(视角相关光照) | 良好(受纹理分辨率限制) | 极佳 |
| 重建速度 | 快(分钟级) | 慢(需数小时人工清理) | 非常慢(训练需数小时) |
| 实时渲染 | 是(消费级GPU 30+FPS) | 是(游戏引擎) | 否(需推理) |
| 所需数据量 | 50-200张图片 | 50-200张图片 | 50-200张图片 |
| 可编辑性 | 有限(工具正在涌现) | 广泛(成熟工具链) | 非常有限 |
3DGS之所以迅速流行,是因为它提供了NeRF级别的画质和Mesh级别的渲染速度。在虚拟导览、电商三维展示、数字文博等场景中,它已经成为首选方案。
2.3 核心局限:没有实体表面
这里有一个关键问题:3DGS场景本质上是大量模糊、重叠的椭球体集合,不是实体几何。没有"表面"的概念,没有"内部"和"外部"的界限。
在实践中,这意味着:
- 射线检测会直接穿过场景,碰不到任何明确的东西
- 第一人称碰撞检测不工作——摄像头会飘进墙壁和地板
- 物理模拟(重力、刚体)找不到可碰撞的物体
- 测量和标注工具需要通过算法来推断表面
这不是bug——这是一种取舍。3DGS优先保证视觉真实感,牺牲了几何的明确性。对于第三人称观看、转盘展示或飞行穿越视频,这完全没问题。但对于第一人称步行——比如你想走向厨房操作台而不穿过地板——这就是个待解决的问题。
3. 网格(Mesh):行业主力
3.1 多边形网格如何工作
网格是由顶点、边和面组成的集合,定义了三维物体的显式表面。大多数网格由三角形构成,因为三角形总是平面的——三点总能确定一个平面,这让渲染和物理计算变得可预测。
网格存储:
- 顶点位置(每个角点的三维坐标)
- 面索引(哪些顶点构成每个三角形)
- UV坐标(二维纹理如何映射到三维表面)
- 法向量(每个面朝哪个方向,用于光照计算)
网格是每个游戏引擎、三维建模工具和GPU的原生语言。你玩任何一款电子游戏时,屏幕上的每个物体都是网格。
3.2 优势:碰撞、编辑和引擎支持
显式表面定义为网格带来几个关键优势:
- 碰撞检测内置。 每个游戏引擎都能检测一个点是否与网格三角形相交。走到墙前——停住。
- 成熟的编辑生态。 你可以选择单个面、推拉顶点、展开UV贴图、赋予材质——所有操作都有经过三十多年打磨的工具支撑。
- 标准化。 OBJ、FBX、glTF、USD——网格在不同工具和平台之间通用可移植。
- 对硬表面物体效率极高。 建筑几何、工业零件、任何边缘清晰的物体,网格都是理想选择。
3.3 劣势:从真实扫描中重建的复杂性
问题出现在试图从现实世界扫描中生成网格时:
- 摄影测量产生的是噪声大、面数过多的网格,有数百万个不必要的三角形和拓扑错误
- 手动重拓扑(减少和重组网格结构)是耗时且需要专业技能的工序
- UV展平和纹理烘焙给管线增加大量时间
- 透明、反射和薄结构(玻璃、植物、头发)难以重建
- 视角相关效果(高光随角度偏移)被烘焙固化,不再动态
在受控工作室中扫描单个产品,摄影测量生成网格效果不错。但对于一个整栋房屋或建筑物——有复杂光照和多种材质——这条管线会变得极为耗时。
4. 体素(Voxel):从Minecraft方块到现实捕捉
4.1 什么是体素?
体素(体积像素)是赋给规则三维网格中每个点的值。最简单的情况:被占据(1)或为空(0)。实际应用中,每个体素还可以存储颜色、密度、材质类型等任意逐单元数据。
可以把体素表示想象成一个三维电子表格:每个单元格有一个地址(x, y, z)和一个值。网格是均匀的——每个单元大小相同——这使得空间查询("这个点在某物内部吗?")变得极其高效。
4.2 体素的独特优势
均匀网格结构赋予体素几个独特优势:
- 碰撞检测极为简单。 检查位置(x,y,z)处网格单元是否被占据。完毕。无需射线-三角形相交的复杂数学。
- 保证实体性。 由体素集合定义的物体具有明确的内外边界。你无法"穿过"体素表面。
- 布尔运算简单。 并集、差集、交集——在体素墙上开一扇门非常直接。
- 体积数据原生支持。 密度、温度、材质成分——体素天然适合处理这类数据。
这些特性使体素在医学CT/MRI可视化、科学模拟中不可或缺,也越来越多地用于对碰撞精度要求高的交互式三维场景。
4.3 分辨率权衡
体素的代价是存储。存储量随分辨率的立方增长:
| 网格分辨率 | 体素数量 | 存储量(1字节/体素) |
|---|---|---|
| 256³ | 1670万 | 16 MB |
| 512³ | 1.34亿 | 134 MB |
| 1024³ | 10.7亿 | 1 GB |
| 2048³ | 86亿 | 8.6 GB |
对于建筑精度的房间级场景,你可能需要1024³甚至更高。到2048³时,就需要专业数据结构(稀疏体素八叉树,SVO)来管理了。
视觉质量也受分辨率限制。曲面在低分辨率下看起来像马赛克,高分辨率下才平滑——但每一步提升都要付出指数级代价。
5. 横向对比:3DGS vs Mesh vs Voxel
5.1 对比表
| 维度 | 3DGS(点云) | Mesh(网格) | Voxel(体素) |
|---|---|---|---|
| 真实感 | 极佳(视角相关) | 良好(纹理受限) | 一般(分辨率受限) |
| 重建速度 | 快(分钟级) | 慢(需数小时清理) | 中等 |
| 实时渲染 | 是(GPU光栅化) | 是(游戏引擎) | 是(光线行进) |
| 碰撞检测 | 否(无表面定义) | 是(逐三角形) | 是(逐单元,极简单) |
| 可编辑性 | 有限(新兴工具) | 广泛(成熟生态) | 中等(布尔编辑) |
| 文件大小(房间级) | 50-200 MB | 20-100 MB(优化后) | 16 MB - 8+ GB |
| 物理模拟 | 否 | 是 | 是 |
| 视角相关效果 | 原生 | 烘焙固化 | 困难 |
| Web流式传输 | 良好(WebGL查看器) | 良好(glTF) | 因体积而异 |
| 测量精度 | 良好(点云够密时) | 极佳 | 受网格分辨率限制 |
5.2 不同场景的格式选择
| 应用场景 | 最佳格式 | 原因 |
|---|---|---|
| 电商3D商品展示 | 3DGS | 采集快、视觉惊艳、无需碰撞 |
| VR物理游戏 | Mesh | 引擎原生、碰撞+物理开箱即用 |
| 虚拟看房(飞行穿越视频) | 3DGS | 最高视觉质量、渲染流畅 |
| 虚拟看房(自由行走) | 3DGS + Voxel | 视觉质量 + 体素层碰撞检测 |
| 文物数字化建档 | Mesh或3DGS | 取决于优先级:精度→Mesh,速度→3DGS |
| 医学影像 | Voxel | 体积数据是该领域的原生格式 |
| 建筑BIM | Mesh | CAD原生、尺寸精确 |
| 室内导航(带碰撞) | Voxel或Mesh | 两者都提供显式表面几何 |
规律很清晰:没有任何一种格式能搞定所有场景。 最好的结果来自将它们组合使用——这正是下一节要讲的内容。
6. 从3DGS到可步行场景:Aholo3D的方案
6.1 以3DGS为核心管线
Aholo3D建立在3D高斯泼溅技术之上。平台以图片或视频为输入,数分钟内重建出高度逼真的3DGS场景,并提供完整的编辑工具——裁剪、测量、标注、生成飞行穿越视频,以及导出为PLY或SPZ格式。全部操作在浏览器中完成,支持跨设备同步。
3DGS管线是所有功能的主干:输入 → 重建 → 编辑 → 导出。正是它提供了定义平台的视觉质量和速度。
6.2 步行体验的缺口
但正如第2.3节所讨论的,纯3DGS场景缺乏表面定义。当你切换到第一人称模式、试图在扫描的客厅中行走时,没有任何东西阻止摄像头穿过沙发、墙壁或地板。对于飞行穿越视频和环绕观看,这无关紧要。但对于用户自主控制的沉浸式自由行走体验,碰撞检测至关重要。
6.3 体素转换:可步行场景的备选层
为此,Aholo3D正在开发可选的3DGS转体素功能(目前处于内测阶段)。思路很简单:保留完整的3DGS场景用于视觉渲染,叠加体素网格作为第一人称导航的碰撞遮罩。
工作流程如下:
- 重建场景为3DGS——完整视觉质量、快速出结果
- 可选转换为体素表达,用户可选择分辨率——针对特定场景
- 步行体验场景,由体素网格驱动碰撞检测,以第一人称视角自由行走
6.4 两全其美
这个方案不是用体素取代3DGS,而是给用户一个选择:想飞行穿越场景、欣赏视觉效果?纯3DGS。想像真的在房间里一样走一遍?启用体素步行模式。
核心管线始终是3DGS。体素转换是针对特定场景的增值功能——虚拟看房、博物馆导览、建筑工地巡检——在这些场景中,带碰撞的第一人称导航是演示与可用工具之间的分水岭。
7. 实际应用场景
7.1 虚拟看房
房地产行业已经接受了3D看房,但大多数是拼接式360°照片,只能在固定点位之间跳转。有了3DGS,你可以获得无缝、高真实感的房间级渲染。配合体素步行模式,可以从厨房走到客厅而不穿过地板——这是360°看房无法提供的真实临场感。
7.2 博物馆与文化遗产数字化
博物馆既需要视觉保真度,也需要互动探索体验。3DGS能捕捉展厅微妙的灯光氛围和文物的精细细节。可选的步行模式让观众以自然的导航约束探索虚拟展览——他们待在走廊里,而不是走进展柜内部。
7.3 建筑与施工
对于施工进度记录,3DGS提供快速、高度逼真的现场捕捉。项目管理者可以从任意角度目视检查楼层。当需要"实地"走过平面图时,体素模式提供有根基的、带碰撞感知的导航——非常适合远程检查和客户巡览。
7.4 游戏关卡设计与预可视化
用3DGS扫描的真实场景可以作为游戏关卡的参考或草图素材。设计师可以导出布局、研究空间流线,并将体素表示作为游戏碰撞网格的起点——在真实捕捉和游戏级几何体之间架起桥梁。
8. 常见问题
8.1 能在3D高斯泼溅扫描中走动吗?
在纯3DGS查看器中,你可以将摄像头移动到任何位置——但没有碰撞检测。摄像头会穿过墙壁和物体。可步行的3DGS体验需要一个额外的几何层(如体素网格或网格)来施加物理边界。
8.2 点云和网格有什么区别?
点云是三维空间中离散点的集合,每个点有位置和(通常)颜色,点之间没有连接关系。网格则将这些点连接成由多边形面组成的连续表面。点云从扫描中生成更快,网格在游戏引擎中更容易编辑和使用。
8.3 对于行走体验,体素比网格好吗?
取决于来源。对于用3DGS重建的场景,体素转换通常比生成干净的网格更快——你省去了重拓扑和纹理烘焙的工序。当你需要编辑单个物体或导出到游戏引擎时,网格更好。当你只需要以最小处理量获得可靠的碰撞检测时,体素更优。
8.4 如何将点云转换为体素?
过程涉及在点云上叠加三维网格,如果某个网格单元包含足够多的点(超过密度阈值),则将其标记为被占据。对于3DGS,你需要在每个网格单元中心采样高斯分布——如果累积透明度超过阈值,该单元即为实体。输出是一个可用于碰撞检测的二值(或密度值)三维网格。
8.5 3D高斯泼溅最适合用来做什么?
3DGS擅长捕捉和渲染具有高真实感的真实场景。最佳应用场景包括虚拟导览、电商产品可视化、文化遗产数字化,以及任何视觉质量优先于几何可编辑性的场景。它也越来越多地被用作捕捉格式,再流入其他表达方式(网格、体素)用于下游应用。
9. 结语:为你的项目选择正确的格式
3D高斯泼溅、网格和体素不是竞争者——它们是各有优势的工具。正确的问题不是"哪个最好",而是"哪种组合能给你所需的结果"。
- 如果你需要在最短时间内获得最高视觉保真度: 3DGS是答案。
- 如果你需要深入编辑、物理模拟或游戏引擎集成: 网格是行业标准。
- 如果你需要可靠的空间推理和碰撞检测: 体素提供简洁和稳健。
- 如果你全都要——视觉效果、碰撞和可步行性: 用3DGS做渲染,用体素做碰撞层,两者组合。
最后这种组合正是行业的发展方向:用视觉最保真的方式捕捉世界(3DGS),然后在交互需求要求结构化几何的地方(体素或网格)补上相应的数据层。关键不是选择一种格式,而是知道什么时候该用哪一种。