【HarmonyOS NEXT】FAQ之图形开发(图形加速)

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));
    }

更多详情查看:文档中心

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值