【UE5】可以实时绘制的体积渲染 【第三章 体积纹理绘制 - 3.绘制体积】

紧接上文!

Tip

所说的Pawn指的是角色蓝图,也就是BP_FirstPersonCharacter

VolumePainter


修改 Traces Target

进入VolumePainterTraces Target函数。做如下修改:

增加的内容为①和②,他们的作用分别是:

  1. ① 增加一个序列和判断:这一部分的目的是让我们能够控制是否开启Debug绘制。在函数中新增一个布尔变量,其默认值设置为true(真)。
  2. ② 增加函数返回:为画笔计算相对于Cube的点"位置"和"半径"。

创建笔刷材质PaintMaterial

Beginplay 为笔刷材质 M_VolPaint创建动态实例 PaintMaterial

创建SetPaint

新建函数 SetPaint,它负责将笔刷参数同步设置到实例材质:

对应笔刷材质中三个变量:

创建DrawRT

新建函数 DrawRT ,他和上一篇临时制作的 BP_VolPainter 一样,负责将画笔绘制到渲染目标:


串联功能

我们将三个函数连接到Tick

其中黄色的是新增的变量。其中Draw是绘制的开关。

处于安全性考虑,执行每一步前,先判断了资产是否存在。(因为不能假定资产是按顺序生成)

这时,你可能会注意到,变量 Paint Location需要从Pawn获取实时数据。稍后解决这个问题。


Pawn接口

我们需要制作两个函数,方便Pawn调用功能进行设置。

创建SetVolmePainter

在VolumePainter中

VolumePainter中,创建函数SetVolmePainter,新建了变量PaintScene,类型为场景组件。

在Pawn中

Pawn中,使用SetVolmePainter,将参数连入,对VolmePainter进行设置。

将CubeMesh、渲染目标、代表笔刷的Scene连入:


创建DrawVolmePainter

在VolumePainter中

VolumePainter中,创建函数DrawVolmePainter,它负责让Pawn设置画笔

在Pawn中

Pawn中,使用DrawVolmePainter设置笔刷。

不会做输入?

复制一个IA_Jump,起名为IA_Draw

打开IMC_Default,将IA_Draw加入并指定为左键:


获取笔刷位置

我们现在可以通过Scene对象直接获取位置了:


测试

来到 Pawn ,在Beginplay后面,对笔刷和画板进行一次初始化:

看看现在的效果


连续绘画

使其可以连续绘画非常简单,打开笔刷材质 M_VolPaint ,增加画板RT_VolTexture :

绘制:

擦除:

Tip:做擦除,就是将笔刷密度改成负数


这篇教程终于告一段落了!后续还会更新一些针对这个体积渲染的妙妙玩法扩展。

例如自定义笔刷,体积的颜色绘制等等。

现在你们可以尝试把功能做到第一人称武器的炮弹上!

到时候见~

相关推荐
帅_shuai_6 小时前
UE GAS 属性集
c++·游戏·ue5·虚幻引擎
5***o5004 天前
PHP在电商中的支付集成
sql·ue5·rizomuv
AA陈超5 天前
从0开始学习 **Lyra Starter Game** 项目
c++·笔记·学习·游戏·ue5·lyra
AA陈超10 天前
以 Lyra 的架构为基础,创建一个名为 “Aura“ 的英雄并实现发射火球技能
c++·笔记·学习·ue5·lyra
AA陈超10 天前
Lyra项目中的输入系统
c++·笔记·学习·游戏·ue5·lyra
AA陈超10 天前
ASC学习笔记0027:直接设置属性的基础值,而不会影响当前正在生效的任何修饰符(Modifiers)
c++·笔记·学习·ue5·虚幻引擎
开发游戏的老王10 天前
UE5.6 C++项目升级UE5.7时用Rider加载项目失败的解决办法
ue5·游戏引擎·虚幻·虚幻引擎·rider·ue5.7·target.cs
AA陈超11 天前
ASC学习笔记0020:用于定义角色或Actor的默认属性值
c++·笔记·学习·ue5·虚幻引擎
平行云11 天前
World Labs & Paraverse:统一3D世界的创造与访问
3d·unity·ai·ue5·aigc·实时云渲染·云xr
AA陈超11 天前
使用UnrealEngine引擎,实现鼠标点击移动
c++·笔记·学习·ue5·虚幻引擎