⭐VR游戏中的优化建议与实际操作

     之前在工作中学习总结了手游优化三板斧,今天我们来讨论下VR游戏中的优化建议与策略。我们知道细节丰富和舒适感是VR体验的基本要求。而优化是确保 XR 应用舒适性的关键。关于开发VR体验和制作游戏场景是不同的,首要就是帧率问题。对于一般游戏而言,帧率只要在30~60 fps之间就可以,但是对VR体验而言,最好能保持在75~90 fps之间。如果VR应用受到 CPU 或 GPU 限制,那么帧率很可能会下降并严重影响用户的VR游戏体验,严重的话还会给用户造成晕动症。

图片

      

 众所周知,游戏优化的一个重要的指标是draw calls。在屏幕上渲染物体,引擎需要发出一个draw calls来访问图形API。每个draw calls需要进行大量的工作来访问图形API,从而导致了CPU方面显著的性能开销。这主要是由于draw calls之间的状态变化(例如切换到不同的材质),导致图形驱动程序中进行频繁的验证和转换步骤。所以我们希望我们的游戏中draw calls尽可能少,以减少 CPU 和 GPU 上的计算负载。

       那么Unity VR应用程序优化到底有哪些基本技术和策略呢?首先处理优化时,第一步是优化所有几何体,避免出现多边形过多的网格。整个几何体优化完成后,必须避免过多的draw calls,可以的话,尽快使用烘焙后光照。另外使用遮蔽剔除也是提升Unity场景帧率的一个技巧。总结下来大致如下:

    1.光照烘焙

    2.遮挡剔除

    3.静态批处理

    4.质量设置Quality settings

    5.渲染通道类型:单通道vs.多通道

       首先说的是光照烘焙,光照烘焙降低了渲染场景的计算开销。这种对 GPU 友善的技术是指在运行时预先计算场景照明的过程。这意味着烘焙灯光没有运行时开销。通常,Unity 会为每个照射在其上的灯光渲染每个对象。因此,如果一个对象上有五个灯光,Unity将这个对象渲染五次。这可能会导致三角形数和draw calls次数激增,从而降低应用程序性能。烘焙灯光是draw calls数量的有效方法,因为这些计算是在运行时之前完成的。

图片

       另一种用于减少 GPU 工作负载的技术是遮挡剔除。默认情况下,Unity 不会渲染视锥体之外的对象。但它仍然会渲染被前景中的对象阻挡的对象,这会导致Overdraw或像素重叠(像素绘制两次,相互重叠)。这种像素重叠是不必要的工作,我们应该避免。我们可以通过使用遮挡剔除“剔除”被其他对象覆盖的对象来避免这种情况发生。

图片

    再者静态批处理也可以提高 GPU 和 CPU 的性能。Unity 将静止的GameObjects 组合成一个大网格,从而更快地渲染它们。这也减少了draw calls和物理计算。通过将对象标记为静态,Unity 就会知道这些对象不会移动,因此这些物体也不需要包含在物理计算中。如果你的应用程序受 CPU 限制,那么将更多对象标记为静态是一种有用的技术。

     第四个是质量设置(Qualitysettings),质量设置控制正在渲染的对象的图形质量(Edit > Project Settings> Quality)。这些是开箱即用的设置(比如像素光数量、光照贴图分辨率、抗锯齿等),可以最大化图形质量或最大化性能。图形质量越低,性能越高。

最后,我们可以调整渲染方法。目前,Unity 支持 XR 的三种渲染方式:

    Multi-pass  多通道

    Single-pass 单通道

    Single-passinstanced 单通道实例化

单通道实例化(Single-passinstanced)是三者中性能最好的,但并非在所有VR设备上都可用。

比如 Google VR 有两个纹理,每只眼睛一个,Unity 需要对一个场景进行两次渲染。当我们设置为multi-pass多通道渲染模式的时候,虽然Unity 会尝试避免重复每只眼睛所需的工作,例如不需要渲染两次的阴影。但是Multi-pass仍然会将大多数对象渲染两次。虽然这样会创建更准确的光照,但也会带来额外的计算成本,所以多通道渲染模式是效率最低的渲染路径,但适用于大多数设备。

图片

    另一方面,单通道将两个纹理打包成一个大纹理(称为双宽纹理double-wide Texture)。它只通过场景图一次,因此在 CPU 上要快得多。但是它需要大量额外的 GPU 状态更改才能完成此操作。

    单通道实例化渲染(SinglePass Instanced rendering),GPU 执行单个渲染通道,将每个draw calls替换为实例化draw calls。由于两个draw calls之间的缓存一致性,这大大减少了 CPU 的使用,并略微减少了 GPU 的使用。故单通道实例化渲染技术可以显著降低了应用的性能消耗。

图片

  ******************************************实际操作分割线*********************************************

    前面我们已经讨论在VR应用中的一些基本的优化建议,那么我们该如何进行操作呢?我们来看下:

    首先是设置灯光烘焙:那么如何设置灯光烘焙呢?

    1. 在您的场景中将所有非移动对象设置为静态。这是如何将它们包含在照明计算中的方法。

    2. 将场景的每个灯光模式更改为烘焙。

图片

    3. 在 Lightingsettings 窗口中,单击Generate Lighting (确保 Baked GI 被勾选)。

图片

    4. 进度条将出现在编辑器状态栏的右下角。

    5. 烘焙完成后,您可以在Lighting 窗口的 Global Maps 和Object Maps 选项卡中看到所有烘焙的光照贴图。

    6. 尝试调整光照贴图大小以提高光照精度。这会增加烘焙时间和构建文件大小,但也会提高光照精度。

    接下来就是设置遮挡剔除

    1. 将所有遮挡其他对象的对象标记为Occluder Static并将所有小的被遮挡对象标记为Occluder Static 。最快的方法是多选要包含在遮挡计算中的对象并适当地标记它们。

    2. 如果渲染一个窗口,你应该将窗口标记为Occludee Static ,因为它不会遮挡它后面的任何对象。

    3. 打开遮挡窗口(Window> Rendering > Occlusion Culling )。

    4. 打开OcclusionCulling - Bake选项卡,然后单击Bake 。这将烘焙您的遮挡贴图,以便您的遮挡剔除正常工作。

图片

设置静态批处理

1. 导航到Player设置(Edit > Project Settings > Player)。

2. 启用静态批处理如下所示。

图片

3. 在 Hierarchy 中,选择所有非移动对象(静态对象)并将它们标记为Batching Static 。注意:通常的做法是切换复选框,它会切换所有静态标签

图片

设置质量设置

1. 导航到质量设置(Edit> Project Settings >Quality)

2. 选择Low ,以最大限度地提高性能

3. 这里你可能需要花点时间探索下方调整后的质量设置。

图片

设置每个渲染通道类型

1. 要启用单通道或单通道实例化,请导航至项目设置。

2. 选择XR Plug-inManagement选项。

3. 找到对应的相应设备的SDK(或者OpenXR)

4. 选择对应平台选项卡

5.从Stereo RenderingMode下拉菜单中选择Single Pass Instanced。

图片

以上这五种技术可以帮助减少VR/AR 项目中的性能问题,而无需您修改现有资产。这些技术不但对于 VR/AR 开发优化至关重要,而且它们也适用于移动、控制台和桌面应用程序。

感谢大家的观看,您的点赞和关注是我最大的动力

不定时更新知识点和干货呦~

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值