生活小妙招之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我滴神。

相关推荐
top_designer1 天前
手绘贴图画断手?“AI 炼金术”3分钟量产风格化材质
人工智能·游戏·3d·材质·设计师·游戏策划·游戏美术
一个响当当的名号2 天前
lectrue4 数据库存储
ue4
陈友松4 天前
UE5运行时操作撤销系统插件
ue5·ue4·运行时回退撤销
北冥没有鱼啊4 天前
UE5 离谱问题,角色动画不播放
游戏·ue5·ue4·游戏开发·虚幻
nnsix4 天前
Unity URP用于 光照贴图(Lightmap)的材质Shader
unity·材质·贴图
哎呦哥哥和巨炮叔叔5 天前
C4D + Corona 渲染玻璃材质详解:Thin Shell 与实心玻璃的正确使用方式
材质·建筑可视化·渲染技术·c4d·渲染101云渲染·corona渲染·材质系统
WinstonJQ6 天前
AirSim无人机仿真入门(一):实现无人机的起飞与降落
python·机器人·游戏引擎·ue4·无人机
深念Y7 天前
乒乓球拍打磨抛光全攻略:告别手指不适与底板拉丝
材质·材料工程·材料·乒乓球·木材·打磨·球拍
freepopo8 天前
天津商业空间设计:材质肌理里的温度与质感[特殊字符]
python·材质
小江村儿的文杰8 天前
UE4 PSO介绍六:PSO与Shader编译的关系
ue4