游戏移动端与 PC 端的优化差异
1. 减少带宽和显存消耗
2. 减少渲染中 Pass 切换的数目来降低带宽
1. OpenGL ES 中使用 Framebuffer Fetch
2. Vulkan 使用 Subpass 来减少带宽
例如,延迟渲染中的 GBuffer 和 Lighting Pass 两个 Pass 如果执行了 EndPass,会将 On-Chip Memory Store 到系统内存中,下个 Pass 要 Load On-Chip Memory。通过 Subpass Load 将利用 Tile 中的数据计算。
3. 每一帧显式提交一个 Clear 减少 Tile Load
3. 带宽压缩
1. ASTC 贴图格式压缩,不同资源压缩比例不同 4×4 - 8×8
2. 降低 RT 精度
2. Early-Z、HSR 硬件像素剔除比较关键
- 半透明材质不受 HSR,存在 Overdraw
- Alpha Test 材质会破坏 HSR,所以放到不透明物体最后渲染
3. 实际项目优化示例
1. 洛克王国
1.1 Buffer 图像格式从 FP16 转为 RGB10A2 格式,减少了带宽开销
同时导致了以下图像问题:
1. 产生色阶
像素值接近 0 的区域导致的,通过开平方根的方法实现在 0 附近分配更多的空间。扩展思考也可以用抖动方式解决色阶。
2. HDR 功能失效,无法实现 Bloom

通过编码解决。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Never Settle!
评论