UE4 VRHMD 底层源码的一些问题(黑边)

UE4的VRHMD中,当设置的RTSize<ScreenRect时,会出现黑边问题。

 

问题原因是:UE底层建议RTSize不要小于ScreenRect的大小,并且底层有一块优化代码,是根据RTSize与ScreenRect的大小差来刷黑相对应的区域,并且直接操作在RT上,也就是出的eyebuffer被刷黑了,该代码块正常情况下是默认执行的,有三个条件可以禁止该部分代码的执行。

 

查找分析UE底层源码,在SceneRenderer.cpp中的ComputeFamilySize中的注释中建议RT不要小于ViewSize,如下

在GameViewportClient.cpp中进行了刷黑操作,如下

禁止该部分代码的三个条件是

  1. ViewFamily.Views.Num()为零
  2. 原始TotalArea与当下ScreenRect的Area不相等
  3. bDisableWorldRendering为true

该三个条件第一个和第三个不可控,只有第二个可以在上层plugin中操作。而且该操作方式摒弃了UE对eyebuffer的刷黑优化,并且只在4.19版本中对所有设备可用(高通也只在4.19中加入了该部分操作)。但是这会导致左右眼的图发生轻微变形,虽然肉眼觉察不到。

 

从友商的代码与UE底层的代码综合来看,最优解还是保证RT绝对大于屏幕分辨率。

 

或者使用源码版本,禁掉RT的刷黑操作,在性能上理论上有一点点差别。

 

或者针对分辨率高的设备进行单独处理,如下:

猜你喜欢

转载自blog.csdn.net/yushengqi12345/article/details/90265210
今日推荐