加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

研发实战:用RenderDoc验证有效渲染方式,优化Quest应用

发布时间:2020-01-08 21:38:37 所属栏目:站长百科 来源:映维网 Oculus开发者关系团队的一个主要任务是帮助开发者
导读:副标题#e# 来源:映维网 Oculus开发者关系团队的一个主要任务是帮助开发者优化游戏,令其能够有效地支持所有的Oculus硬件。所述团队中的开发者关系工程师克里斯蒂亚诺费雷拉(Cristiano Ferreira)正在通过系列博文来介绍如何通过RenderDoc来优化你的Quest

上图是一个问题场景中的最终渲染目标。一切看起来都不错,对吧?也许建筑物内部存在对象渲染,它们不仅使用了不必要的绘制调用并在CPU端施压管道状态,并且正通过投影所有内部对象的几何形状及遮盖所有不必要的投影来占用GPU资源。请看看下面的屏幕抓图,它说明了这种低效情况:

研发实战:用RenderDoc验证有效渲染方式,优化Quest应用

带注释的绘制只是分配给GPU的所有不必要绘制调用的一小部分。它们无缘无故地对所有几何图形进行处理和着色。如果CPU采取预防措施来遮挡剔除它们,则GPU将不必担心它们。我们会在后面介绍更多关于遮挡提出的细节。

对于这种情况,一个合适的比例是:你聘请了一位油漆工,然后他以每小时的速度来油刷房屋。如果你决定先将所有框梁都涂成棕色,然后用纯色涂漆整栋房屋。这时候,如果你已经告诉他们要用一种颜色涂漆房屋,但工人却把框梁都涂成红色,而且你依然要为其付费,相信你会感到非常不解和沮丧。这可是成本。在游戏和图形世界中,GPU正在处理你本可以花费在其他地方的开销,如使用更详尽的着色器/材质。为了进行比较,请参阅下图。这里显示的是同一帧,但选择了在调度顺序中更后的绘制调用。

研发实战:用RenderDoc验证有效渲染方式,优化Quest应用

如前所述,当你在RenderDoc的API日志中选择绘制调用时,帧会按时间顺序在你眼前构建。在早前的截图中,当我在数个调用之后选择了这个绘制时,你会看到一堆墙壁模型遮挡了先前绘制的所有内容。这意味着你先前调度的所有绘制调用均执行了其像素着色器并被覆盖。如果你在那些对象之前绘制了环境墙壁和天花板,则应该将深度缓冲区设置为墙壁网格的深度,从而节省每个像素片段着色器的过度绘制成本,因为硬件可以判断较近的像素正在遮挡它。如果你的游戏负担不起遮挡剔除,你依然可以通过为游戏量身定制优化的排序算法来节省GPU时间。Unity和Unreal均允许覆盖渲染队列中的特定图形和材质。

6. 纹理格式和分辨率验证

利用RenderDoc,你可以验证输入和输出的纹理分辨率是否太高,是否提供了mipmap,压缩格式是否符合你的期望,每次绘制采样的纹理数量等等。你在引擎编辑器中很难跟踪所有纹理的纹理信息,所以这是一个节省内存并保持效率的优秀验证方法。

研发实战:用RenderDoc验证有效渲染方式,优化Quest应用

为了感受具体的差异,下面我们来看看一个输入纹理:

研发实战:用RenderDoc验证有效渲染方式,优化Quest应用

例如,当我在“Input”选项卡中选择了这个Ogre绘制调用,然后选择albedo输入纹理时,我可以看到每个输入纹理的分辨率,压缩格式和mip级别数量。我可以看到ASTC texture compression格式用于我的输入纹理。这是获得最佳质量和大小的推荐格式。

大多数情况下,高动态范围(HDR)纹理格式对Oculus Quest而言都不可行。HDR需要一个临时缓冲区,其格式与交换链纹理的格式不同,其通常是R11G11B10_FLOAT,而不是普通的R8G8B8A8_SRGB。问题不是bits per-pixel,而是当每帧准备就绪时将临时缓冲区从HDR复制和转换为标准格式的blit成本。由于需要更高的浮点精度,所以HDR效果和计算的成本通常要会昂贵得多。同样,任何时候使用临时缓冲区都不会获得固定注视点渲染或MSAA的好处,所以你可能会遭受额外的性能和/或质量损失。要确定渲染目标是否符合HDR规范,你可以确保自己正在写入采用R8G8B8A8_SRGB格式的RTDeviceEyeTextureArray交换链纹理来,如下面的比较图所示:

研发实战:用RenderDoc验证有效渲染方式,优化Quest应用

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读