Bootstrap

【UE5】可以实时绘制的体积渲染 【第三章 体积纹理绘制 - 2.笔刷蓝图】

紧接上文!上一篇制作了画板和笔刷,那么如何控制画笔,画出想要的图案呢?
这一节制作笔刷相关蓝图。

笔刷

一个最基础的球形笔刷,包含三个要素,“半径”,“浓度”,“位置”。

半径和浓度

其中,半径和浓度已经实现了。
在这里插入图片描述

移动

为其增加一个位移 Center 1
虽然说“增加”,但要使用减法 Center

虽然我们称之为“增加”,但在实际操作中是通过减法来实现的。
这是因为我们正在操作的是“UV坐标系”,因此需要通过减去 Center 来实现位移。 具体来说,如果我们想将点向右移动,那就相当于将整个坐标系向左移动。
Center = (1,0,0)为例,可以看到笔刷球体跑到了一侧:
在这里插入图片描述
在这里插入图片描述

绘制

BP_VolPainter 只是用来测试,接下来要做完整的绘制功能

为了简化教程,我们添加一个第一人称模板

用第一人称模板只是为了简化教程步骤
第一人称模板不是必须的,在制作的时候,我会注意将功能独立于模板
你可以用自己喜欢的方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

VolumePainter

接下来新建一个Actor组件VolumePainter

这是为了保持通用性,不把关键代码写到第一人称模板里

在这里插入图片描述
在这里插入图片描述

Reset RT

VolumePainter 新建函数 Reset RT,负责清除RT
在这里插入图片描述

Traces Target

新建函数Traces Target ,他将用来计算绘制点

首先为函数增加三个输入:

名称类型说明
MeshActorStatic Mesh Actor场景中,被绘制的体积模型
PaintLocationVector笔刷位置
PaintRadiusFloat笔刷半径

首先为了调试,使用 Draw Debug 系列函数制作一些可视化:
在这里插入图片描述

绿色部分:为体积的立方体模型绘制一个盒体,表示我们正在对这个模型进行绘制。使用 IsValid 判断是否正确的输入了MeshActor ,“正确”绘制,“不正确”不绘制。

蓝色部分:无论是否有MeshActor ,都要为笔刷绘制一个用于调试的可视化球体。


接下来,需要判断笔刷是否在 MeshActor 内部。

不是什么都需要使用“碰撞检测”的!

在这里插入图片描述

我们只需要将 PaintLocation 笔刷位置转换为 MeshActor 空间的局部位置①,判断是否在Box内部②就可以了。
顺便,根据判断结果,我们改变一下笔刷调试球的颜色③。

接下来获取模型的资产尺寸,定义盒体
在这里插入图片描述

Pawn

像我之前所说,核心功能都在VolumePainter,它可以在任何需要的地方应用。
因此不会对Pawn进行过多设计,这里只会注重VolumePainter如何使用,我们会简短的进入Pawn后离开,

接下来进入Pawn的蓝图
在这里插入图片描述

添加Scene

添加一个场景组件并附加在相机下,并移动它让他在相机前方:
在这里插入图片描述

添加VolumePainter

添加VolumePainter:
在这里插入图片描述

添加Tick,并将Scene的位置设置到TracesTarget作为笔刷位置:
在这里插入图片描述

拖出MeshActor ,并新建变量
在这里插入图片描述

为变量勾选可编辑实例
在这里插入图片描述

场景

摆放体积模型

在场景中摆放SM_TwoSided
在这里插入图片描述
在这里插入图片描述

如果现在RT是空的,则不会显示球(例如重启,切换关卡,都可能清空RT)。
以防你有些迷茫,这时可以使用BP_VolPainter再画一次RT
但这不影响后续
在这里插入图片描述

摆放Pawn

这3步十分关键:

  1. BP_FirstPersonCharacter拖入到场景

  2. Mesh Actor选择填入刚才的体积模型
    在这里插入图片描述

  3. 选择自动控制玩家0
    在这里插入图片描述


准备就绪:
在这里插入图片描述
在这里插入图片描述


一切准备就绪,接下来我们就可以绘制体积了!

;