虚幻四 如何将场景中的Mesh显示在UI/UMG中(SceneCapture2D))

实现的效果如下面这张绝地求生的界面,我们将角色显示在UI上面
Demo下载

图片源自网络

首先

创建一个新项目选择第三人称模板。
打开角色蓝图(ThirdPersonCharacter),添加一个组件SceneCaptureComponent2DComponent(场景捕捉2d,你可以想象成一个摄像机组件),把他作为摄像机摇臂的组件,方便直接使用鼠标控制视角(与玩家视角同步)


AddComponent

然后在详细面板我们重点关注如下几个参数:

  • Texture Target,渲染目标的输出,对象为 RenderTarget(渲染目标)
  • Capture Source,捕获源,我们设为默认就行了
    • SceneColor(HDR) in RGB,inv Opacity in A的意思就是把空间颜色(无光照)设为RGB通道,不透明性设为透明通道。
    • Final Color(LDR) in GRB这个颜色就是最终的颜色,有光照,与玩家视角的效果一致,但是透明通道没有输出。
  • Primitive Render Mode,原始渲染模式一共有三个模式(在4.20版本中,下面述说的两个数组不再显示在详细面板中,可以使用蓝图得到)
    • Legacy,使用黑名单(HiddenActors数组)
    • Render Scene Primitives,原始渲染
    • Use ShowOnly List,使用白名单(ShowOnlyActors数组)
细节面板

两个数组的获取

接下来在BeginPlay中动态添加ShowOnlyActors(注意把渲染模式设为Use ShowOnly List)


角色蓝图

创建渲染目标与材质资源

Create Render Target

打开细节面板,我们需要关注的是如下参数(属于性能方面的优化)


  1. 尺寸,这个是对效果最明显的了,尺寸越大效果越精细,同时更吃性能
  2. 渲染目标格式,保持默认就好
  3. Mipmaps Gen Setting,选择NoMipmaps
  4. 贴图类别选择UI


    最终效果

最后将角色蓝图中场景捕捉组件的渲染目标设为这个


由于我们将渲染模式设为使用白名单(Use ShowOnly List),但是数组是在BeginPlay中动态添加的,所以在编辑器界面没有出现目标,你可以将其设为默认试试
右键资源,创建材质
细节面板,我对材质不熟悉,如有讲错请见谅

贴图

上图中有五个引脚,分别对应

  • ARGB通道(混合)
  • R通道(红)
  • G通道(绿)
  • B通道(蓝)
  • A通道(透明)
ARGB通道效果,这里就直接输出的颜色

A通道效果,这里输出的是不透明度,黑色的是0,白色的是1,我们拿这个通道作为蒙版,只显示黑色的地方,白色的地方设为透明

最终效果,将透明通道反转

预览界面的正常效果

创建UI

UI的创建非常简单,就一个Image控件



最终效果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,687评论 25 708
  • 原文链接:https://github.com/opendigg/awesome-github-android-u...
    IM魂影阅读 32,974评论 6 472
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 2018年2月26日 星期一 开学第一天,我家小宝还在赶寒假作业。 这个糟心的寒假,妹妹第一次寒假作业就没完成,寒...
    晴致生活馆阅读 220评论 0 0
  • 假如我是一只小鸟 我要到四季去观赏 我要证明 我也有我的方向 我要飞向蓝天 跟着众鸟飞翔 飞呀一一飞呀 一路看到了...
    陈子more阅读 428评论 0 3