当前架构:Three.js r160 + WebGLRenderer(WebGL 2.0),自定义 ShaderMaterial 分布在 Engine(水面)、MaterialManager(onBeforeCompile 注入)、BatchedMaterial、RainEffect 四处。
迁移收益:
- Compute shader(最关键):AO 计算和 FaceCulling 目前跑在 CPU Worker 线程,有序列化开销。WebGPU 的 compute shader 可以搬到 GPU 并行执行,有望删掉两个 Worker。
- CPU draw call 开销降低:WebGPU 的 command buffer 预录制机制比 WebGL 隐式状态机高效。
- 显式 buffer 管理:可标注 buffer 用途(STORAGE/MAP_READ 等),减少不必要的 GPU↔CPU 数据传输。
需要改动的位置:
| 文件 |
内容 |
Engine.js |
WebGLRenderer → WebGPURenderer |
MaterialManager.js |
onBeforeCompile 注入的 GLSL → WGSL |
BatchedMaterial.js |
ShaderMaterial 继承类,GLSL → WGSL |
Engine.js 水面 |
vertex/fragment shader → WGSL |
RainEffect.js |
雨滴 ShaderMaterial,GLSL → WGSL |
不改的部分:所有游戏逻辑、场景图、InstancedMesh 架构、World/Chunk 装配机制均不变。
预估工作量:2-4 周(核心风险在自定义 shader 的 WGSL 迁移,以及 Three.js WebGPURenderer 对 onBeforeCompile + InstancedMesh 组合的兼容性)。
路径建议:先在 WebGPURenderer 上跑通兼容性验证(不迁移 compute shader),确认 InstancedMesh + 自定义材质表现正常后,再逐步把 AO/FaceCulling 移到 compute shader。
当前架构:Three.js r160 +
WebGLRenderer(WebGL 2.0),自定义 ShaderMaterial 分布在 Engine(水面)、MaterialManager(onBeforeCompile 注入)、BatchedMaterial、RainEffect 四处。迁移收益:
需要改动的位置:
Engine.jsWebGLRenderer→WebGPURendererMaterialManager.jsonBeforeCompile注入的 GLSL → WGSLBatchedMaterial.jsShaderMaterial继承类,GLSL → WGSLEngine.js水面RainEffect.jsShaderMaterial,GLSL → WGSL不改的部分:所有游戏逻辑、场景图、InstancedMesh 架构、World/Chunk 装配机制均不变。
预估工作量:2-4 周(核心风险在自定义 shader 的 WGSL 迁移,以及 Three.js WebGPURenderer 对
onBeforeCompile+ InstancedMesh 组合的兼容性)。路径建议:先在
WebGPURenderer上跑通兼容性验证(不迁移 compute shader),确认 InstancedMesh + 自定义材质表现正常后,再逐步把 AO/FaceCulling 移到 compute shader。