1、超帧和ABR支持的图形API有哪些?
A:目前超帧接口支持OpenGL ES和Vulkan图形API平台。ABR接口仅支持OpenGL ES图形API平台,暂不支持Vulkan平台。
2、开启超帧外插模式后运动物体边缘出现严重拖影现象,可能的原因是什么?
A:由于外插模式需要标记模板缓冲(Stencil Buffer)的第8位用于区分静态物体和动态物体,即静态物体模板值第8位标记成0,动态物体模板值第8位标记成1,模板缓冲的低7位模板值开发者可自行设置。如果标记错误或漏标记,可能会在动态物体边缘产生严重的拖影现象。
3、哪些特征的Buffer适合使能ABR?
A:
-
着色器处理耗时较高的Buffer。
-
原始分辨率较高的Buffer,建议不低于720P。
4、ABR进行Buffer分辨率调整引起其他Pass渲染效果异常,该如何解决?
A:以如下团结引擎URP管线为例,ABR对DrawOpaqueObjects绑定的Buffer进行分辨率调整时会引起SSAO shadow效果异常:
通过上述URP管线可以看到,SSAO在渲染管线中是一个“前处理”,当ABR对DrawOpaqueObjects绑定的Buffer进行自适应分辨率调整时,SSAO输出的图像与DrawOpaqueObjects绑定的Buffer一并进行上采样,SSAO输出的图像尺寸会显得更大,从而出现shadow效果异常。
针对该问题的解决方案,以下两种方案二选一即可。
-
方案1
:调整渲染管线,将SSAO作为“后处理”。
在URP资产中勾选“After Opaque”:
-
方案2
:获取实时的ABR Buffer分辨率因子,并根据Buffer分辨率因子对相关渲染数据进行同步调整。
以团结引擎URP管线为例,在ScriptableRenderer.cs的SetPerCameraShaderVariables函数中根据Buffer分辨率因子设置scaledScreenParams属性。
void SetPerCameraShaderVariables(CommandBuffer cmd, ref CameraData cameraData, bool isTargetFlipped) { Camera camera = cameraData.camera; float scaledCameraWidth = (float)cameraData.cameraTargetDescriptor.width; float scaledCameraHeight = (float)cameraData.cameraTargetDescriptor.height; // scale为通过HMS_ABR_GetScale接口获取的ABR Buffer分辨率因子 scaledCameraWidth *= scale; scaledCameraHeight *= scale; cmd.SetGlobalVector(ShaderPropertyId.scaledScreenParams, new Vector4(scaledCameraWidth, scaledCameraHeight, 1.0f + 1.0f / scaledCameraWidth, 1.0f + 1.0f / scaledCameraHeight)); }
更多详情查看:文档中心