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

相关推荐
牛掰是怎么形成的2 天前
Unity材质贴图引用陷阱:包体暴涨真相
unity·材质·贴图
lGSrsEpqUxi2 天前
双馈风机风电场经串补并网次同步振荡/谐振仿真模型探索
材质
格林威2 天前
Baumer相机玻璃制品裂纹自动检测:提高透明材质检测精度的 6 个关键步骤,附 OpenCV+Halcon 实战代码!
人工智能·opencv·视觉检测·材质·工业相机·sdk开发·堡盟相机
top_designer3 天前
Materialize:手绘地表太假?“PBR 纹理炼金术” 5分钟生成次世代材质
游戏·3d·aigc·材质·设计师·游戏美术·pbr
pingao1413784 天前
金属材质翻斗传感器:耐用型雨量监测的核心解决方案
材质
lllljz6 天前
Blender导出模型到Unity或UE5引擎材质丢失模型出错
unity·ue5·游戏引擎·blender·材质
zhyongrui7 天前
SnipTrip 菜单 Liquid Glass 实现方案:结构、材质、交互与深浅色策略
ios·性能优化·swiftui·交互·开源软件·材质
mojugang8 天前
CrWMN是什么材质
材质
Onelafite9 天前
京东商品属性的详细api数据解析:颜色、尺寸与材质
linux·数据库·api·材质·开放api
赛德传动9 天前
SJA蜗轮蜗杆升降机的关键部件材质和性能优势有哪些?
制造·材质