.. _6 性能优化指南: 6 性能优化指南 =============================== 6.1 多场景配置说明 ---------------------------------- 1、场景中放置Pvr_UnitySDK预制体后,需要删除Unity自带的Main Camera。 2、如果项目中有多场景,需要在主场景内放置Pvr_UnitySDK预制体,然后在此预制体下增加“DontDestroyOnLoad”方法。保证切换场景的时候只有一个Pvr_UnitySDK预制体。 6.2 帧率及场景的要求 ---------------------------------- 帧率: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ G2 4K需要保证不低于30帧,建议45帧以上,Neo 2需要保证60帧以上,Neo 3 需要保证稳定达到72帧。 场景: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 同屏模型三角面片控制在10万以内 同屏模型顶点数控制在10万以内 普通unity灯光例如电光源数量控制在50以内 普通unity粒子系统数量控制在50以内 Unity shader尽量使用效率较高的 优化方法举例: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 在保证显示的情况下减少模型面片顶点数量 尽量共用材质,动画 尽量使用压缩纹理格式 尽可能少的使用灯光特效等 尽量使用静态批处理 脚本优化,减少不必要内存,计算等资源消耗 6.3 高级渲染功能 ---------------------------------- 6.3.1 注视点渲染 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 注视点渲染可以优化渲染场景的能力,为视野焦点提供高分辨率,周边视野则大大降低场景的细节。 详情可参考:8.7章 注视点渲染 6.3.2 透传层 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ VR Compositor Layers技术可提升画面清晰度,对于文本、纹理、视频类资源比通过Eye-buffer渲染具有更高的的显示质量。为了更好的理解VR Compositor Layers的工作原理和与Eye-buffer渲染和区别,请参考8.8章VR Compositor Layers 详情可参考:8.8章VR Compositor Layers 6.3.3 单目相机 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 使用单张图像,渲染到两只眼睛上,可有效减少渲染。适用于非立体画面(e.g. 普通图片、视频)展示。 详情可参考:8.9章 单目相机 6.3.4 SinglePass ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 基于Unity的Single Pass的原生功能,用一个摄像机实现立体渲染,比使用两个摄像机减少一半的DrawCall和遮罩剔除,对复杂的场景帧率提升明显。但是Single Pass模式不支持屏幕后处理。该选项针对所有场景,全局生效。 详情可参考:8.12章 Single Pass 6.3.5 URP配置 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ URP相关内容参见:https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@10.3/manual/whats-new/urp-whats-new.html 以Unity2019.4.2f1为例。 1. 打开Window/Package Manager .. image:: _static/3.8.png 图6.1 Window工具栏 2. 选中Show preview packages .. image:: _static/3.9.png 图6.2 Packages的advanced选项 3. 选中Universal RP后,点击右下角的Install .. image:: _static/3.10.png 图6.3 安装URP 4. 创建Universal Render Pipeline Asset .. image:: _static/3.11.png 图6.4 创建URP Asset 5. 使用UniversalRenderPipelineAsset 把第四步创建的文件拖到Project Setting/Graphics的Scriptable Render Pipeline Setting中 .. image:: _static/3.12.png 图6.5 使用URP Asset 6. 更新项目中的materials为URP materials .. image:: _static/3.13.png 图6.6 更新项目中的materials 6.4 缓解发热 ---------------------------------- 1.检查VR应用程序当前的帧率。 要使用Pvr_UnitySDK实时显示帧率,请按照8.1章显示帧速率中的说明进行操作。 您也可以在设备上进行设置。进入设置->更多-> 系统 -> 用户配置。在“特殊设置”下,打开“ VR应用帧率显示”。 2.在Pvr_UnitySDK的Inspector面板可以限制帧率,可参考8.3章限制帧率。 3.启用Foveated Rendering。建议将Foveation Level设置为高。 6.5 工程推荐配置 ---------------------------------- 6.5.1 SDK推荐配置。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 请参考章节3.3 SDK推荐配置。 6.5.2 Quality Settings推荐配置。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Pixel Light Count:1 Texture Quality:Full Res Anisotropic Textures:Per Texture Anti Aliasing:2x Soft Particles:Disable Realtime Reflections Probes:Disable Billboards Face Camera Position:Disable 6.5.3 Player Settings推荐配置。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Scripting Backend:IL2CPP Target Architectures:ARM64 6.6 UI清晰度推荐设置 -------------------------------------------------------------------- 通过调整Canvas组件下DynamicPixelsPerUnit的值来提高UI组件的清晰度,从而避免部分UI组件模糊,闪烁等问题。 .. image:: _static/6.6.png 图 6.7 Canvas Scaler面板图 推荐设置公式: L=distance*tan(fov/2)*2 N=1/Scale PPU=EyeBuffer/(L*N) 其中,distance表示当前Canvas与Camera的距离,fov表示当前视场角(G2 4K系列和Neo 2设备的视场角为101度,Neo3为98度),Scale表示当前Canvas的scale值,EyeBuffer表示当前设置的RenderTextureSize。