UE5 Lyra PocketWorld进行3D内容UI预览 - 上

PocketWorld是UE5 Lyra Demo中的插件,用于在UI中预览3D内容,其内部包含了RT生成等逻辑。预览效果:

该文章分上下两部分,上半部分分享蓝图接口使用,下半部分分享C++代码以及PocketLevel的使用。测试使用UE5.2,第三人称案例Demo。

下半部分:https://blog.csdn.net/grayrail/article/details/163827358


一.常规3D内容抓取

先来讲下无背景Mask的内容抓取。

1.从UE5 Demo中复制该插件到目标UE5项目的Plugins文件夹下,进入项目确保插件是开启状态。

2.创建继承自PocketCapture的蓝图,便于重写Mask材质球参数。

3.将插件目录的M_White配置至蓝图中,以便后续Mask绘制使用。

4.新建测试UMG Widget01,添加Image左上角对齐,缩小尺寸。

5.在Widget01中添加函数Init ,首先调用Pocket Capture Subsystem 的Create Thumbnail Renderer ,创建PocketCapture对象,使用该对象接口设置RT尺寸,设置该变量为蓝图变量,设置绘制Actor。

6.同样在Init函数中,设置第二步,使用接口Get or Create Diffuse Render Target 创建Diffuse RT,使用Image的接口Set Brush Resource Object ,将RT绑定至该Image。

7.新建蓝图BP_PocketWorldConfig用于在场景中创建Widget01到Viewport,以及挂载与配置场景中UI相机。在BeginPlay中连接UI逻辑:

8.到场景中添加Camera Actor,将Cube放入子对象。对Cube勾选Visible In Scene Capture Only ,使其只对SceneCapture相机可见。

9.将BP_PocketWorldConfig拖入场景,配置CameraActor至刚刚创建的对象。

10.回到Widget01 UMG蓝图,在Tick处调用Capture Diffuse 接口,在每帧进行抓取,更新RT。

11.运行后效果如下,可抓取不带Alpha的内容(Linear颜色问题可修改对应参数解决)。

二.带遮罩3D内容抓取

因为原版PocketWorld没有对Skybox的屏蔽操作,导致即使设置Mask也无法屏蔽Skybox天空盒,首先需要修改PocketWorld代码:

PocketCapture.cpp

cpp 复制代码
bool UPocketCapture::CaptureScene(UTextureRenderTarget2D* InRenderTarget, const TArray<AActor*>& InCaptureActors, ESceneCaptureSource InCaptureSource, UMaterialInterface* OverrideMaterial)
{
    CaptureComponent->ShowFlags.SetAtmosphere(false);
    CaptureComponent->ShowFlags.SetFog(false);
}

12.梳理Widget01蓝图,分为多个步骤,增加DynaMat内部变量,用于缓存材质球。后续将改为材质球赋予Image的形式。

13.删除旧的Step3(Set Brush Resource Object相关节点),使用下面的节点设置动态材质球参数,缓存对应RT。

14.因为PocketWorld的Mask实现方式与DiffuseRender不同,Mask所绘制的Actor需要额外传入,而并非旧的取子对象的方式。所以在Widget01添加Init函数参数AlphaMasks供外部传入。

15.添加Step4,将Init函数参数AlphaMasks设置至PocketCapture中。

16.切到蓝图BP_PocketWorldConfig中,开放变量AlphaMasks设置至Init函数中。

17.切到UE场景中,将绘制的Cube链接至AlphaMasks。

18.修改Widget01的Tick,增加Capture Alpha Mask调用,现在即可绘制Mask遮罩。

19.运行测试,发现已消除背景。

相关推荐
薛定e的猫咪几秒前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
weixin_4173968333 分钟前
桌面云终端PXE启动失败怎么排查?从DHCP Option到镜像下发
开发语言·前端·php·技术·酒店·综合布线·弱电
某不知名網友1 小时前
ROS2进阶:服务通信、自定义SRV接口、参数服务器与基于服务的参数通信详解
java·开发语言·microsoft
java_nnnn1 小时前
LeetCode刷题滑动窗口(水果成篮+找到字符串中所有字母的异位词)Java
java·开发语言·leetcode
qetfw2 小时前
Bash 字符串处理:参数展开、序列与脚本执行方式
linux·开发语言·chrome·bash
小羊没烦恼!2 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
取个好名称2 小时前
什么是3D文件格式?3D文件可以包含什么
3d
学Linux的语莫2 小时前
python中类的常见写法
开发语言·python·状态模式
需要8262 小时前
容器化 Java:镜像瘦身与 JVM 容器感知(cgroup)
java·开发语言·jvm
dyxal2 小时前
A2A 协议 v1.0 完全指南:方法名、Agent Card、三种绑定与 FastAPI 实战
开发语言·qt·fastapi