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的刷黑操作,在性能上理论上有一点点差别。

 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值