体素渲染双路线对比: 表面网格化 vs 直接体渲染
体素渲染存在两条根本不同的技术路线,选择哪条路线决定了引擎架构、内容流水线和游戏设计的上限。
对比总表
| 维度 | 表面网格化(Meshing) | 直接体渲染(Volume Rendering) |
|---|---|---|
| 代表案例 | Minecraft, Veloren, 大多数体素游戏 | Teardown, 医疗可视化 |
| 几何表示 | 三角网格(光栅化) | 体素体积(光线遍历) |
| GPU 管线 | 传统光栅化 | 光线追踪 / 体素步进 |
| 破坏支持 | 难(需重新 meshing 或预切割) | 易(直接移除体素) |
| 加速结构 | BVH / KD-tree / Meshlet | 多层体素加速结构 |
| 全局光照 | 需要额外 GI 方案(VCT/SDFGI) | 自然支持(体素光线步进即可采样光照) |
| 实时性能 | 极高(GPU 光栅化成熟) | 中等(需多层加速结构) |
| 硬件依赖 | 普通 GPU 即可 | RTX 或自定义 compute shader 更优 |
| 工具链 | 成熟(Blender, MagicaVoxel, 等) | 贫乏(需自研管线) |
| 与 Bevy 兼容 | 完全兼容 | 需自定义 compute shader + 渲染管线 |
路线 A:表面网格化详解
工作流程
体素数据 → 网格化算法 → 三角网格 → Bevy Mesh → GPU 光栅化
常见网格化算法
- Naive:每个可见体素生成6个面
- Face Culling:只生成表面面(约 )
- Greedy Meshing:合并共面矩形(减面 50-70%),体素游戏标准
- Marching Cubes:平滑等值面,适合自然地形
Bevy 中的实现工具
block-mesh— 底层 greedy mesherbevy_voxel_world— 全功能插件(chunk + LOD + 材质)bevy_vox_scene— 加载 MagicaVoxel .vox 文件
优势
- 充分利用 GPU 光栅化管线,性能极高
- 工具链成熟,美术资产丰富
- 与 Bevy 的 Meshlet(虚拟几何)可结合,获得自动 LOD 和 GPU 剔除
劣势
- 破坏需重新 meshing,难以实现真实可破坏
- 运行时修改体素需重新生成 chunk mesh(增量更新优化可缓解)
- 不能表达”内部结构”,只有表面
路线 B:直接体渲染详解
工作流程
体素数据 → 多层加速结构 → GPU 光线步进 → 直接输出像素颜色
Teardown 的实现
Teardown 是当今最著名的体积渲染案例,其引擎特点:
- 无三角形:整个引擎围绕体素体积构建,GPU 沿光线步进检测体素体积
- 物理与渲染统一:物理引擎直接在体素网格上运算,破坏是真实的体素移除
- 光线追踪光照:不做全局光照(光不二次反弹),但用光线追踪做 AO、软阴影、镜面遮蔽
- 加速结构:多层体素加速结构(不是 BVH或 KD-tree)
优势
- 真实可破坏:移除体素即可,无需重新 meshing
- 自然支持全局光照(体素步进时可采样周围光照)
- 可表达内部结构(切开物体看到内部)
劣势
- 工具链贫乏,几乎没有成熟引擎
- 实时性能挑战大(需要强力加速结构)
- 与传统管线(光栅化、阴影映射、后处理)难以集成
Bevy 中的选型
Bevy 是传统光栅化引擎,因此 不支持直接体渲染路线。如果需要 Teardown 风格的可破坏体素,实际选项是:
- 降低目标:用 meshing + 运行时布尔操作 mesh(剪切、隐藏体素)模拟破坏
- 自定义管线:在 Bevy 中实现体素光线步进(compute shader + 自定义渲染 pass),工程量极大
- 混合方案:大多数体素用 meshing,特殊可破坏物体用运行时 mesh 切割/隐藏
最佳实践建议
| 游戏类型 | 推荐路线 | Bevy 工具 |
|---|---|---|
| Minecraft-风格体素建造 | 表面网格化 | bevy_voxel_world / block-mesh |
| 体素地形游戏 | 表面网格化 + Meshlet LOD | block-mesh + Bevy Meshlet |
| 可破坏体素物理 | 降低目标(布尔 mesh 操作) | 自定义 mesh 剪切 + physics |
| 医疗/科学可视化 | 直接体渲染(如果离线) | 不适用 Bevy,考虑专用工具 |
相关页面
- voxel-rendering — 体素渲染核心概念与技术谱系
- greedy-meshing — 贪心网格化算法详解
- bevy_voxel_world — Bevy 体素地形插件
- block-mesh — Rust 体素网格化底层库
- bevy — Bevy 引擎总览(含 Virtual Geometry / Meshlet 章节)
- bevy-rendering — Bevy 渲染系统核心概念