UE4(VR)中3D世界内的UI模糊问题解决

最近工作又遇见了3dui模糊的问题,上次遇见这个问题没找到办法,和美术一起改了半天材质也没搞定,今天再次搜索了一下,居然解决了,总结一下方法:将ui在界面蓝图内放大,再在uiactor内缩小相应倍数,如果是VR模式,再使用StereoLayer组件。

像这么一个界面:

 本来大小是260*67,我们给它套一层scalebox放大五倍

 在actor蓝图中缩小到0.2

与不做修改进行比较:

 

可以看见区别非常明显,通过这种方法提高了界面的分辨率

在VR中可以再结合StereoLayer 使用

设置如下,将layer的尺寸设置成和ui大小一致,再重叠,也可以进行widgetinteraction交互,再设置一下widgetcomponent的材质:

可以先copy一个系统默认的材质,然后改一下透明度

 在蓝图中设置stereolayer的texture(要判空):

 和quest2官方场景对比:

效果相差无几。 

 附上一大佬VR 优化的建议,觉得说得挺好:

UE4 Oculus Quest优化 - 知乎


注:

实践出真知,之前想的太理想化了。stereo layer是在一个额外的独立通道进行渲染的,显示出来会覆盖在游戏画面之前,无法进行正常的手柄交互显示。。。说是串流设备Rift这种平台,stereo layer支持depth,component detial有开关,但没设备,不知道结果如何

stereo layer可以渲染texture2d,本来想试试用sencecapture2d抓一下画面渲染在stereo上,发现好像在VR模式下有bug,开启multi-view的情况下sencecapture会失效,画面一直是黑的,找了下外网也有说这个,但是没啥好的解决方法,后续再研究下源码看看为什么。


2022-3-9 注:

就这个问题。。。感觉今天才得到解答

在游戏引擎中有一个像素每单位的概念,虚幻是1个单位1像素,u3d是默认1个单位100像素,本质上都是1cm1像素,上文提到的缩放操作其实是增加这个像素密度,高密度自然清晰,但是如果存粹的使用WidgetComponent,在高像素密度时纹理会产生摩尔纹,会闪烁,可以开启widget映射的RT的mipmap来解决,但是开启mipmap后纹理又糊了,所以其实像素密度要处于一个合适的值。

同时3D UI模糊的另一个大原因是抗锯齿,TAA和FXAA差别很大,建议用FXAA,动态模糊也有影响。

最近又在做VR内的界面,最后发现纯粹的使用widgetcomponent还是不行的,太糊了,还是只能只用使用立体图层Stereo Layer,之前发现深度有问题没有细看,今天发现其实是立体图层和半透明材质的深度判定有问题,不确定是什么导致的,有空再研究一下

在quest2上支持平面和曲面层

  • 世界锁定:图层位置位于游戏世界坐标中。

  • 追踪锁定:图层位置相对于玩家周围的实时世界追踪空间。

  • 面部锁定:无论位置和旋转如何,图层都将处于 HMD 视图中相同的位置。

所以对于quest设备,3D世界的UI选择World Locked就可以了

在VR里面,使用立体层真的要清晰许多许多!!!

猜你喜欢

转载自blog.csdn.net/t1370620378/article/details/120821432