优化 WebXR 应用
简介
高且稳定的帧率对舒适 XR 至关重要。开发 VR/AR 时应尽早测试优化,并全程维持目标帧率。
AR 的世界追踪有时开销很大,加之用户通常使用性能受限的移动硬件,需要谨慎管理。
VR 需为每眼渲染一次。引擎虽尽量复用工作,双目仍比单目昂贵。
透视混合体验结合 AR 和 VR 的成本,底层还要定位、图像处理、混合现实画面,以及深度、颜色、图像追踪等,同时每眼重复渲染。
现代头显还要求 75Hz、90Hz 或更高刷新,进一步增加优化需求。
PlayCanvas 提供多种功能以降低开销。
绘制调用与批处理
每次绘制调用向 GPU 提供对象渲染信息。对象越多,调用通常越多。可通过剔除、静态批处理和实例化减少。
运行时光照贴图
动态灯光每帧有成本,数量越多越慢。将静态光烘焙成贴图,可将成本降低到纹理渲染。可用三维工具离线烘焙,或使用内置运行时烘焙器。
谨慎使用实时阴影
动态阴影也有每帧开销,尤其全向光需要六次场景渲染生成阴影,应避免过多动态投影灯。
注意填充率和过度绘制
填充率是 GPU 单位时间处理的像素数。昂贵片元着色器与高分辨率组合,例如多灯复杂材质和高像素比手机,会难以维持高帧率。
过度绘制指同区域多层像素重复处理,有时为必要透明混合,有时远处像素最终被近处不透明像素覆盖,后者浪费 GPU。
提示
可使用 WebGL Insight 等扩展可视化过度绘制。
垃圾回收停顿
浏览器自动回收无用 JavaScript 对象。引擎尽量减少运行时分配,业务代码也应预分配并复用向量等对象,避免每帧大量创建和丢弃。
性能分析工具
PlayCanvas 内置性能分析器,在编辑器启动菜单启用 Profiler,即可带分析功能运行。
通用优化建议
更多内容详见优化指南。