生活小妙招之UE CaptureRT改

需求,四个不同的相机拍摄结果同屏分屏显示

一般的想法是四个Capture拍四张RT,然后最后在面片/UI上组合。这样的开销是创建4张RT,材质中采样4次RT。

以更省的角度,想要对以上流程做优化,4个相机拍摄是必须的,目标是4个相机拍的RT结果存到1张RT中的4个区域,只创建1张RT,材质中也只采样1次RT。

UE原生带的RT相关的功能都无法满足我们想要的目标,目标是Capture拍到的RT中就已经分块处理好了,所以需要简单改造下Capture,下面举下简单的思路

下以Mobile Capture2D流程为例,代码流程还是很清晰的,主要看以下地方

调用渲染线程的UpdateSceneCaptureContent_RenderThread()

UpdateSceneCaptureContentMobile_RenderThread中SceneRenderer->Render正常画了场景,然后在CopyCaptureToTarget中可以看到用到的GlobalShader和对应的usf

那么到这里就有俩种修改思路了,我们现在想要的是一张RT中存四张图。

那么想法一就是4个Capture,每个绘制的结果采样InTexture时Remap相应的UV缩放到对应的边角,并且要计算相应的mask将其他区域干黑,最后利用CompositeMode的Additive叠加出最终的RT。

这里也有需要注意的地方,首先可以截帧看一下CaptureRenderScene中BasePass存来的Intexture是一张大图,不是CaptureRT设置的尺寸是多少就是多少。所以原本的流程中UE是获取了RT和Intexture的Size加入采样UV的计算的。我们自己如果要用方案一的做法的话,要添加自己额外的UVRemap的计算,并且mask的计算得加在PS中,加上这个功能我们得在Capture组件上加开关控制,usf里面还得加宏控制,虽然可以实现,但是这些计算其实是非必要的

那么想法二就是限制capture绘制RT时的绘制范围,也就是最终绘制的这里,保证单个Capture绘制的区域就限制在1/4块中,其他区域是没有写入的。这样就无需在Shader中添加额外的计算,是相对更合理的方案

代码相关的修改结束后我们能get到这样一张RT结果,剩下在材质中就是对UV做相应的Remap计算了,分屏切割相关的计算我这用到了

判断点在直线哪一侧的方法_判断一个点在直线的哪一侧-CSDN博客

我这自己实现的切割点是要动态变化的,如果是静态分屏的话,可以在外部算好一张线性UV贴图传入采样。还有直接RemapUV,分屏里的图显示范围是跟着框走的,如果要类似图固定在背景,计算时要加上相应的bias,这就不展开了

四个相机,一张RT,UI上K点小动效,齐活,PGR我滴神。

相关推荐
在下胡三汉1 天前
3dmax直接导入加载glb,gltf格式模型插件,支持导入动画材质贴图纹理,可以批量导入
3d·材质·贴图·gltf·glb
Yuk丶2 天前
UE4 与 UE5:技术差异深度解析
c++·ue5·游戏引擎·ue4·游戏程序·虚幻
UTwelve3 天前
【UE】如何手搓一个完美贴合地形的 Mesh Decal(面片贴花)
ue5·材质·贴图·着色器
不懒不懒4 天前
基于深度学习的可回收垃圾材质识别与分类研究毕业设计--整套 C/S 架构完整方案
材质
晴夏。7 天前
unlua实现原理
游戏·ue5·ue4·lua·ue·unlua
晴夏。7 天前
UE Spawn出来的Actor的生命周期和管理方法
游戏·ue5·ue4·ue
郑寿昌12 天前
虚幻引擎6:Lumen半透明材质新突破
材质
一只数据集12 天前
柏林道路路面图像数据集-971张沥青与鹅卵石路面图片-训练测试集划分-支持道路材质识别与自动驾驶视觉算法训练
算法·自动驾驶·材质
魔士于安12 天前
Unity UI图片 复活节UI,卡通风格
游戏·ui·unity·游戏引擎·材质·贴图
重庆若鱼文化创意14 天前
包装设计公司哪家好?价格差很多时,关键看材质、印刷工艺和实际包装成本
人工智能·python·材质