模块化可重用的Unreal Engine 4 红外相机效果制作

一、目的

构建一个红外相机效果的小窗,当然红外效果是虚假效果,并非与温度特征绑定,效果如下图所示。同时希望功能能够实现模块化,可重用,方便迁移。


红外小窗效果.png

二、总体思路

首先通过后处理材质实现红外效果,然后将后处理材质给到2D捕捉相机组件,然后相机采集的信号给到一个渲染目标2D(Render Target 2D),渲染目标2D生成用户界面材质,用户界面材质给到UI界面上的一个Image,这个Image就会实时显示后处理后的相机捕捉的视频。

三、构建后处理材质

后处理材质,采用的是自定义景深参数,一旦自定义景深与场景深度不等,即判断为需要高亮的特征,使其对应发出高温的颜色,自定义景深默认下不会进行计算,需要给元素开启自定义景深之后,才会参与渲染计算,即如果想让某个场景元素显示为高温,就要开启他的自定义景深通道。构建过程:

  1. 新建后处理材质M_pp,材质域设置为后处理域。
  2. 材质按下图进行配置设置


    后处理材质全览.png

    后处理材质菲涅尔效应部分.png

    后处理材质红蓝效果部分.png

    后处理材质高温效果部分.png
  3. 使用了自定义景深参数与场景深度参数,进行高低温颜色效果的区分计算。


    后处理材质自定义景深与场景深度对比.png

四、构建WBP界面蓝图

构建一个WBP蓝图:WBP_Infrared,其中加入一个image元素,作为显示小窗,随后小窗的笔刷会与动态材质绑定(具体操作在后边步骤)。


WBP蓝图构建及设置.png

五、构建用户界面材质材质

新建一个用户界面材质M_InfraredCam,材质域选为用户界面,然后创建一个TextureSample模块,右键转换为变量,然后改名为:DynamicRender,记住这个名,后边会用它来与RenderTarget2D进行沟通。


用户界面材质.png

六、构建一个Actor

这个Actor只集成场景捕捉相机组件2D及其附带蓝图,名字为BP_。

1. 在组件窗口中添加场景捕捉相机组件2D

  • 相机的“后期处理材质”设置为已经建立好的M_pp的实例inst。

2. 构建蓝图

  • 创建一个渲染目标2D。创建动态材质实例,parent设置为已经建立的M_InfraredCam。


    模块化可重用的红外显示蓝图程序.png
  • 将捕捉相机的捕捉源设置为最终颜色(LDR),然后将捕捉相机的纹理目标设置为第一步已经建立的2D渲染目标。然后为渲染目标起名为TextureDynamic;为动态材质设置纹理参数,即设置上文中DynamicRender变量为渲染目标TextureDynamic; 同步的,将动态材质通过函数,转化为笔刷变量,便于贴到UI显示框中。


    模块化可重用的红外显示蓝图程序2.png
  • 将新建的笔刷变量命名为Material2Brush;万事俱备,开始建立并设置UI界面,将界面添加到视口中。
    有很重要一步,回到WBP_Infrared,新建一个变量命名为camredActor,变量类型选择为新建的蓝图BP_CameraInfrared对象引用。这样在本蓝图中就可以引出这个变量,然后将self给到第一个接线端,目标与创建的WBP控件相连。这样就可以将本蓝图的变量传递到WBP蓝图中了。
    模块化可重用的红外显示蓝图程序3.png

    WBP蓝图构建及设置2.png
  • 添加控件移除功能,在需要时可以移除小窗口控件。


    模块化可重用的红外显示蓝图程序4.png

七、启动自定义景深触发物体高亮

需要找到物体或者蓝图的属性中的Mesh项目下的render customDepth Pass选项,选中的项目便会以高温的颜色效果显示。

八、使用

将Actor蓝图加入到父Actor中,调整相机位置,然后调用这个Actor的红外显示的自定义事件就可以实现红外小窗。

你可能感兴趣的:(模块化可重用的Unreal Engine 4 红外相机效果制作)