前段时间有个Demo移植的需求,需要把实时裸眼3D多视角立体显示的Unity版本移植到UE4,主要包含后处理Shader、相机矩阵变换、多视角画面平铺拼接三大部分。
对现有的多窗口显示方法进行查阅后,发现主要有Multiplayer与Render Target+UI两种实现思路,由于需要采集的视角数量多、还需要让后处理Shader能够作用在拼接的整个图像上,最终选择了后一种。
一、Multiplayer(存在局限性)
首先在项目设置中开启Use SplitScreen选项。
通过添加多个Player,结合Set View Target with Blend将多个相机的画面拼凑在同一Viewport下。
在设置Controller Id时,注意0号Controller默认已经存在,不需要再次创建。
可以看到,能够实现多视角画面拼接,但该方法的局限性在于最多支持四个Player,不符合裸眼3D的机位数量要求。
与此同时,经过测试发现屏幕后处理Shader只会作用于每个Player,而不是对该多视角拼凑成的整幅图像处理,因而该方案不适合该项目。
二、Render Target + UI
通过蓝图节点创建大量的Scene Capture 2D Component,并设置其位移变换矩阵与自定义投影矩阵值,从而在多视角对目标捕获Render Target(RT),之后在UI界面中对其拼凑再做屏幕空间后处理。
为每个捕获组件创建其RT对象(RT也是制作简易小地图的一种方式)。
新建一个只包含Image的Widget,将其作为网格子项,设置好大小和Offset保证平铺无接缝,最后记得公开该Image对象。
依次将捕获的RT设置给每个网格子项中的Image。
再新建一个Widget,Uniform Grid Panel存放所有网格子项,RetainerBox可以对其子项作屏幕空间后处理(裸眼3d后处理Shader)。
设置网格子项合适的行和列数,Over。
运行,搞定!