Six Ways to Draw Vangers with WebGPU: Real-Time Rendering of Editable Multi-Layer Height Fields
Dzmitry Malyshau
cs.GR
2026-08-18
六种 WebGPU 渲染器同引擎跑 1998 年游戏 Vangers 的双层地形:贪心 TIN 帧时五台设备全最低,代价是 854 MiB 常驻内存与被第二层拖垮的拟合。
地形渲染的 level-of-detail(细节层次)研究几乎全在数字高程模型 DEM 上做测量:单一取值、采样尺度下平滑、采自真实地貌。游戏地形常常三条全不占。Vangers(1998)的地形是手工创作的:高度量化到字节、带人为不连续,而且每个 texel 对可以编码两个垂直实心区间,地面(low)、洞穴顶(mid)、盖层顶(high),洞就夹在中间。Fostral 关卡 2048×16384,10.9% 的 texel 是双层。
论文立了三条硬约束:渲染器必须保留两个实心区间,洞不能当贴花;必须落在交互帧预算内;对高度和层元数据的有界修改不重载关卡就得可见,因为地形破坏在 Vangers 里是玩法操作,不是编辑期的例外。原版 1998 年在 16 MB 内存预算里用软件渲染做到了这一切,代价是只敢用倾斜俯视机位。现代 GPU 让任意机位变得可行,水平线附近的视图就把不匹配的表示打出原形。
六种方法跑在同一个引擎(native wgpu/WebGPU、单一验证过的 WGSL 源)、同一条数据路径、同一个片元着色管线上,差异只归因于方法。质量分用同一份源数据在 CPU 上做 ray cast 当参考,双向统计漏盖(see-through)与局部不一致(coherence)。
选定质量档、12 场景平均帧时(ms;M3 行为 CPU 提交等待计时):
| 方法 | 780M | 7900 XT | RTX 5070 | M3 | Intel RPL-U |
| Ray 128 | 4.83 | 0.65 | 0.79 | 8.34 | 18.17 |
| Voxel | 8.32 | 1.40 | 1.26 | 12.49 | 35.57 |
| Sliced | 9.34 | 1.63 | 1.90 | 12.13 | 41.69 |
| Scattered | 9.22 | 2.79 | 1.47 | 18.45 | 88.20 |
| Painted | 15.84 | 5.22 | 4.69 | 32.72 | 79.63 |
| Mesh q0.5 | 4.07 | 0.39 | 0.50 | 5.92 | 11.45 |
Mesh 在五台设备上均值全部最低。俯仰角才见分晓(pitch 0°,漏盖/不一致 %):Scattered 漏盖 40.4%,三个场景整体落在 19.1% 到 73.2%,其余方法全部在 0.0% 到 0.9%;Sliced 覆盖好,但 0° 掠射带 2.7% 条带;Mesh 与两个光线步进方法、Painted 同处一致组,同一机库视图 q=0.0 漏 11.0%,q=0.5 剩 0.5% 并接住了墙。
Mesh 的账单在别处:为了可编辑,常驻 318.7 MiB GPU 几何加 534.7 MiB CPU 三角化(三个 LOD 加每块的活三角化),对比 Ray 的 0/0 与 Voxel 的 18.29 MiB。挖一个半径 48 的弹坑,首帧 CPU 增量 +9.88 ms(GPU 只 +1.30 ms),16 帧后仍与全新构建差 0.0016% 的命中分类;其余五个方法在所有设备上首帧即与编辑后的全新构建一致。
拟合成本归因是全文最硬的一刀。单层世界能压 45 到 182 倍,可压缩率对地面粗糙度的相关只有 −0.17,对双层 texel 占比的相关是 −0.77。hmok 的地面比 threall 更平(2.71 对 2.85),压缩却只有 5.2 倍对 45.3 倍,因为 47% 的三角形落在盖层表面。Fostral 在 q=0.25 有 23.3% 的插点花在单双层边界这一处不连续上,且该成本对质量档几乎恒定(338k 到 396k),地面部分则从 444k 涨到 6.1M。误差驱动的拟合在嵌入不连续的字段上,会把预算烧在追一条任何容差都满足不了的断层上。
对引擎与 WebGPU 开发者,这是一份可复现的对照:引擎、harness、一条命令的测量协议全部放出,五台设备横跨 Vulkan 与 Metal 后端。方法学的警示更大:只看帧时会选 Mesh,而帧时表不收内存、编辑维护与质量预算的账。把「编辑后首帧」当一等结果来报,对任何带运行时地形修改的项目都适用;「第二层而非地形起伏决定拟合成本」外推到任何在带内嵌不连续的字段上做误差驱动简化的管线。方法本身没有新东西,六条路径都有先例,这篇的贡献是受控对照加失败分析,落在测量学一层,是渐进的方法学工作。
作者自述的边界:只有 Vangers 一种地形格式,机制外推到其他不连续字段是论证而非测量;渲染对比只用 Fostral(CC BY-SA 授权),另外九个世界需要合法游戏拷贝;硬件覆盖四个 Vulkan 后端加一个 Metal,没有 D3D12、WebGL2 与移动端;帧时是逐帧提交等待的延迟,不是流水线吞吐;调参固定用三个场景;编辑实验只有一个弹坑形状与位置;分块流式传输没有实现。论文还披露 OpenAI Codex、Anthropic Claude、xAI Grok 参与了起草、编辑与 harness 开发,作者声明逐条核对过数字与引用。单作者、独立研究者的身份降低了交叉检验的密度,好在跨设备核对与公开 harness 在同体裁里算扎实。