找回密码
 会员注册
查看: 12|回复: 0

PicoUnityVR游戏开发实战——性能优化基础_UTF_8

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
75213
发表于 2024-9-30 02:36:57 | 显示全部楼层 |阅读模式
关于Pico在这样的特殊时期,居家娱乐变得非常火热。除了日常的大屏观影和主机游戏之外,越来越多的人开始把玩起了取得长足进步、可玩性不断提升的VR设备,Pico Neo 3就是其中的新旗舰。Pico致力于VR头显产品的研发、生产、销售,特别专注于VR一体机这一形态产品。Pico兼顾C端消费者市场与B端行业市场,同时为大众VR用户与行业客户提供VR产品与服务。Pico领域辐射教育、娱乐、企业培训等方面。业务逐步由中国本土推向全球——北美、韩国、欧洲和日本。今天我们一起来看看Pico团队的优秀开发者们在Pico Unity VR游戏开发实战中的相关经验和案例。性能目标Pico Neo 3 硬件规格首先,我们来看一下 Pico Neo 3 的硬件规格 :Pico Neo 3分辨率4 K (3,664 × 1,920)屏幕刷新率72/90/120 HzFOV98°SoC高通骁龙 XR2内存6 GB闪存128/256 GBWi-FiWIFI 6 (802.11ax)追踪类型6 DoF手柄两只 6 DoF 手柄(红外光学追踪)电池5300 mAh摄像头四个单目鱼眼相机眼球追踪N/A骁龙 XR2 是高通在 2019 年底发布的 XR 平台 Soc ,属于同期推出的手机平台 SoC 骁龙 865 (采用的手机主要有小米 10、三星 S20 等)的衍生版;由于高通官方没有给出 XR2 的具体规格,我们可以参考骁龙 865 的规格:CPU:Octa-core Kryo 585 (1 x 2.84 GHz, 3 x 2.42 GHz, 4 x 1.8 GHz)GPU:Adreno 650,587 MHz (1202.1 GFLOPs in FP-32)结合网上的信息,我们可以猜测骁龙 XR2 的整体性能与骁龙 865 相当,GPU性能可能稍高于 865VR游戏性能要求为了尽量缓解晕动症,VR游戏需要尽量降低渲染耗时即提高游戏帧率, Pico 官方在 Neo 3 上给出的游戏性能目标为FPS 至少达到 72 帧/秒(Neo 3 屏幕刷新率最低为 72 Hz);而目前手游在高端手机上的帧率上限一般为 60 帧/秒(少部分手机屏幕支持超高刷新率的会达到 90 或以上),且 VR 一体机的屏幕分辨率比手机明显高一档(4k 级 vs 2k 级),可见,在 SoC 整体性能相当的情况下,VR 一体机比手机在性能上面临更严峻的挑战。游戏性能目标:https://developer-global.pico-interactive.com/docs/cn/12050/unity-xr-performance-target/Pico官方给出的Pico Neo 3性能目标性能问题为了方便后续 VR 一体机游戏相关的测试调研,我们使用 Unity 制作了一个 Pico VR 游戏 Demo 。当游戏 Demo 完成第一个可玩版本时,我们把项目构建到 Pico Neo 3 上运行,然而真机运行的结果让人出乎意料, Demo 的关卡玩法非常卡顿,经过测试发现帧率仅有 20 多,距离 Pico 官方给出的性能目标差距甚远。开启 FPS 显示为了方便确认游戏的帧率表现,我们需要有一种便捷的方式显示游戏的帧率。其实在 Unity 编辑器中创建 XR Origin 时,Pico SDK 已经帮我们创建了在场景中显示 fps 的游戏对象(默认不显示),我们只需将其开启即可:Hierarchy中展开 Main Camera 对象,会发现 Main Camera 有一个未使用的子对象 FPS选中 FPS 对象,Inspector 中勾选将其激活,并在 Canvas 组件中 Event Camera 选择 Main Camera ,即可在游戏中实时显示 FPS问题定位游戏 Demo 的功能比较简单,按理来说 CPU 侧逻辑计算压力很小,而从渲染层面来看,场景内的物体渲染也比较简单,但为了提升质感,场景开启了泛光和渐晕两个全局后处理特效,因此我们首先怀疑后处理特效的性能开销过大。经过验证,只把两个后处理特效关闭,游戏能够保持满帧( 72 帧/秒)运行,于是基本可以将问题原因锁定在后处理特效开销过大。我们直接使用了 Unity Post Processing Version 2 插件提供的后处理特效,如果出现性能开销过大的问题,说明目前使用的渲染管线性能表现不理想,那么我们应该考虑更换性能更好的性能管线。性能优化之前在创建VR项目时我们使用了 Unity 默认的 3D 项目模板,该模板使用的是 Unity 内置渲染管线( Unity Built-in Render Pipeline );这个渲染管线默认没有针对移动端进行太多优化,性能表现较为一般,为了解决上面的性能问题,我们可以尝试更换为其他性能更好的渲染管线。根据Unity的官方文档 ,目前 Unity 提供了四种渲染管线:内置渲染管线是 Unity 的默认渲染管线。这是通用的渲染管线,其自定义选项有限。通用渲染管线 (URP)是一种可快速轻松自定义的可编程渲染管线,允许您在各种平台上创建优化的图形。URP管线针对跨平台开发而构建,性能比内置管线要好。高清渲染管线 (HDRP) 是一种可编程渲染管线,可让您在高端平台上创建出色的高保真图形。HDRP管线更多是针对高端设备,如游戏主机和高端台式机,不适合移动端。可以使用 Unity 的可编程渲染管线 API 来创建自己的自定义渲染管线,但使用门槛较高。其中,URP管线有针对移动端进行优化,性能比内置管线更好,而且使用门槛相对低,符合我们目前的需求。Unity官方文档:https://docs.unity3d.com/cn/2021.3/Manual/render-pipelines-overview.html内置渲染管线:https://docs.unity3d.com/cn/2021.3/Manual/built-in-render-pipeline.html通用渲染管线(URP):https://docs.unity3d.com/cn/2021.3/Manual/universal-render-pipeline.html高清渲染管线(HDRP):https://docs.unity3d.com/cn/2021.3/Manual/high-definition-render-pipeline.html使用URP管线根据官方文档 ,使用 URP 管线有两种方式:既可以在已有项目的基础上切换至 URP 管线,也可以在新建项目时直接使用 URP 管线。官方文档:https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@12.1/manual/InstallURPIntoAProject.html已有项目切换至URP管线Demo 项目之前使用了内置渲染管线,根据以下步骤切换至 URP 管线:删除原有内置管线后处理相关的内容删除场景中后处理相关的游戏对象和组件,切换至 URP 管线后需重新创建打开 Window > Package Manager ,找到并删除 Post Processing Version 2安装 URP 插件:打开 Window > Package Manager ,切换至 Package: Unity Registry,往下滚动找到 Universal RP ,选中并点击右下角的 Install配置 URP :a.创建 Universal Render Pipeline Asset:在 Project 窗口新建一个目录 URP 并进入,然后空白处右键打开菜单,依次选择 Create > Rendering > URP Asset (with Universal Renderer)b.添加 URP Asset 至 Graphics 配置:将新建的 URP Asset 添加至 Graphics 配置中,否则Unity 将继续使用内置的渲染管线。在上方菜单栏处,选择 Edit > Project Settings在左侧导航栏处,选择 Graphics在 Scriptable Render Pipeline Settings 处,选择之前创建的 URP Assetc.禁用 HDR :URP管线默认开启 HDR ,在 VR 一体机上性能开销较大,不建议开启;取消勾选将其关闭升级 Shader :原有的材质使用了内置渲染管线的 shader ,需要升级为 URP 管线的 shader ,否则会出现材质丢失(材质变紫色)的情况在 Project 窗口中选中需要升级的材质,在上方菜单栏处,选择 Edit > Render Pipeline > Universal Render Pipeline > Upgrade Project Materials to UniversalRP Materials如果有其他需要升级的 shader ,可以参考 Unity 官方提供的对照关系通过手动更改 shader 的方式进行升级对照关系:https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@12.0/manual/upgrading-your-shaders.html重新添加后处理效果a.设置抗拒齿:在 Hierarchy 选中 Main Camera ,Inspector 窗口中 Camera > Rendering > Anti-aliasing 选择 FXAAb.添加后处理特效:在 Hierarchy 选中 Main Camera ,Inspector 窗口中找到 Camera > Rendering > Post Processing 并勾选,开启后处理在场景中新建一个空对象 PostProcessing ,专门用于添加后处理特效选中 PostProcessing 对象,添加 Volume 组件;添加后, Volume 组件的 Profile 字段默认是 None ,点击右侧的 New ,添加新的 Profile添加 Profile 后,点击下方的 Add Override,选择 Post-processing > Bloom 和 Vignette,添加泛光和渐晕两个特效v. 开启泛光和渐晕,并调整特效参数至此,渲染管线切换成功,重新构建项目至 Pico 设备上,发现使用 URP 管线后,在同样开启两个全局后处理特效的情况下,游戏 Demo 关卡玩法的帧率从之前的20多提升至72(满帧),已满足 Pico 官方的性能要求。新创建项目时使用URP管线对于新创建项目的情况,可以在使用 Unity Hub 创建项目时直接使用 URP 管线的项目模板,首次使用 URP 管线 3D 模板前需要下载,详情参考下方链接;Using the Universal Render Pipeline in a new Project | Universal RP | 12.0.0:https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@12.0/manual/creating-a-new-project-with-urp.html注意事项根据 Pico官方的提示 ,使用 URP 管线时有以下两个注意事项:针对 Unity 2021 及以上版本,若在使用通用渲染管线(URP)时设置抗锯齿倍数(MSAA),将导致严重的低帧率问题。针对 Unity 2020 及以上版本,若将 Vulkan 添加至 Graphics API,与 OpenGLES 相比,存在帧率低、内存和 GPU 占用率高的问题。因此,在项目中,抗锯齿我们使用的是 FXAA ,并在 Edit > Project Settings > Player > Settings for Android > Other Settings > Rendering 中,取消勾选 Auto Graphics API ,并在 Graphics APIs 中去掉 Vulkan其他性能优化项除了更换渲染管线之外,Pico官方也提供了两个可选的性能优化设置,即开启注视点渲染和 Multiview开启注视点渲染注视点渲染(Foveation Rendering)可以优化 VR 场景的渲染,该技术通过为视野中心提供全分辨率(无损),降低周边视野(人眼焦点区域之外)分辨率的方式来达到优化渲染的目的,更多细节见官方说明文档官方说明文档:https://sdk.picovr.com/docs/UnityXRSDK/cn/chapter_eight.html#id5注视点渲染的开启方式:Hierarchy 中选中 XR Origin 对象,在 PXR_Manager 组件中调整 Foveation Level 的值即可开启 Multiview基于 Unity 引擎的 XR 单通道立体渲染(Single Pass Stereo Rendering),用一个摄像机实现立体渲染,比使用两个摄像机减少一半的 DrawCall 和遮罩剔除,对复杂的场景帧率提升明显,但是 Multiview 模式不支持屏幕后处理。开启 Multiview 的方法:打开 Edit > Project Settings,选择 XR Plug-in Management > PicoXR ,切换至安卓选项卡,Stereo Rendering Model 选择 Multiview相关工具Pico官方文档推荐了一系列在性能优化时可以使用的工具:Pico Metric Tool :实时查看 Pico VR 一体机上运行的应用程序的各种性能指标Unity Profiler :Unity 官方提供的性能分析工具,集成在 Unity 编辑器,可展示应用性能分析数据,包括 CPU、内存、渲染器、音频等Frame Debugger :Unity 官方提供的渲染分析工具,集成在 Unity 编辑器,可将游戏冻结于某一帧,并且罗列出用于渲染该帧的各个绘制调用查看Overdraw :Unity 提供了一种特定的渲染模式来查看场景中的超量绘制。Snapdragon Profiler :高通提供的性能分析工具,可以获取 Pico Neo 3 的各项性能指标,工具官网见Snapdragon Profiler Tools & Resources实时预览工具(Preview Tool) :在使用 Pico Unity XR SDK 进行应用开发的过程中,通过 Preview Tool,开发者无需打包安装 APK 文件,可直接使用 Unity Editor 预览和测试游戏关卡Pico Metric Tool:https://developer-global.pico-interactive.com/docs/cn/12050/metrics-tool-/Unity Profiler:https://developer-global.pico-interactive.com/docs/cn/12050/unity-xr-performance-monitor/Frame Debugger:https://developer-global.pico-interactive.com/docs/cn/12050/unity-xr-sdk-view-draw-calls/查看Overdraw:https://developer-global.pico-interactive.com/docs/cn/12050/unity-xr-sdk-view-overdraw/ Snapdragon Profiler Tools & Resources:https://developer.qualcomm.com/software/snapdragon-profiler/tools 实时预览工具(Preview Tool):https://developer-global.pico-interactive.com/docs/cn/12050/236813/此外,由于 Pico VR 一体机的操作系统是基于安卓定制的,安卓 Unity 手游开发可用的性能调试工具都可以尝试在 Pico VR 一体机上进行使用。配置应用帧率上限Pico应用默认的帧率上限为 72 ,如果希望提供更高的帧率,参考官方文档进行设置,目前可支持设置的帧率上限有 72、90 和 120 Hz,其中 120 Hz 刷新率需要设备系统软件版本为 c000_rf01_bv1.0.1_sv2.29_20220121_b384 及以上并且在设备系统设置中开启才能支持总结一方面,为了保证玩家在 VR 中有较好的游戏体验,相比手游,VR 游戏具有更高的性能目标;另一方面,VR 一体机的硬件算力受限,这导致 VR 一体机在性能上面临严峻的挑战。因此,在 Pico 上开发 VR 游戏时,建议开发者时刻关注游戏的性能表现,及时采取必要的优化措施达到性能目标。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-16 00:20 , Processed in 0.525138 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表