FFR总结
1、参数意义
以下关于FFR 参数意义解释,以及4个Level对应的参数设置。
FoveationGainX, FoveationGainY
---- X/Y 轴方向外围像素的缩减率,值越大缩减的越多。
FoveationArea
-----注视点周围分辨率不降范围,值越大,中心清晰区域越大。
FoveationMinimum
--------默认最小像素密度,像素密度大于等于FoveationMinimum。
Foveation Level 【SDK提供了四种Level可选】
Low [3.0f, 3.0f, 1.0f, 0.125f]
Med [4.0f, 4.0f, 1.0f, 0.125f]
High [6.0f, 6.0f, 1.0f, 0.0625f]
Top High[7.0f, 7.0f, 0.0f, 0.0625f]
2、实现逻辑
首先需要绑定texture,设置参数,包括GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM、GL_TEXTURE_PREVIOUS_SOURCE_TEXTURE_QCOM和GL_TEXTURE_FOVEATED_MIN_PIXEL_DENSITY_QCOM。
以下对于每个texture只执行一次。
然后需要在render之前,调用高通扩展函数glTextureFoveationParametersQCOM。
针对不同平台,所传的参数也不同,具体如下:
Unity/Native
focalPointX和focalPointY参数代表的是注视点坐标,一般在开启Eyetracking时,计算眼睛注视点,可以实现眼睛看到的地方,屏幕像素密度高,眼睛注视边缘位置像素密度低。未开启Eyetracking情况下,一般设置为0,也就是中心位置作为最大像素密度点。
UE
UE的texture是将左右眼的图合并成一张传下啦,所以在传参时要考虑将GanX的值乘以2,同时将focalPointX的值除以2。同时将合并的texture拆分成两个layer,作为左右眼(0,1)的图分别调用glTextureFoveationParametersQCOM。
3、关于Subsampled
FFR的GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM参数可以传GL_FOVEATION_SCALED_BIN_METHOD_BIT_QCOM,也可以设置为GL_FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM。
之前和高通沟通,开启Subsampled的,更能精确控制显示像素密度,并且优化了渲染,提高了性能,但是一直没有真正的对比测试。
Subsampled仅在NEO3上有效,在G2-4k和NEO2上开启都会有白线,开启Subsampled的话,需要修改shader,
一是需要开启扩展:
"#extension GL_QCOM_texture_foveated_subsampled_layout : require\n"
二是需要使用subsampled采样
"layout(subsampled) uniform mediump sampler2D Texture0;\n"
所以要想使用Subsampled,必须将所有shader都按照以上修改,否则会出现黑色方块,singlepass,投屏都已适配,之前发现只要一出现boundary就有黑块,是因为boundary的shader并没有按照以上修改,后期如果使用Subsampled,需要boundary按照以上适配。