UE5 在骨骼动画模型上绘制贴图

参考:Unreal 5.1 - How to paint damage textures and other effects on skeletal meshes
针对模型,在运行状态下通过射线指定一定范围,添加材质效果。
在这里插入图片描述

核心思路

  • 通过射线获取命中点,作为材质参数
  • 材质中,命中的世界坐标与像素点所在的世界坐标做SphereMask,产生一张表示命中范围的贴图。该范围与世界坐标相关
    • 材质根据UV平铺在水平面上在这里插入图片描述
    • 设置仅拍摄该对象的相机进行拍摄
  • 把产生的贴图作为参数传到附加效果的材质上

弊端

视频的方法制作无法应对模型UV重复的情况,如左右腿公用一批素材,此时原版素材绘制的内容会镜像到另一侧。绘制另一侧时会无法生效,因为原版UV位置与命中点检测不匹配。

主要操作

  • 创建动态材质和Render Texture
  • 专用平铺材质
  • 专用淡出材质
  • 截图相机
  • 设置参数并获取截图

创建动态材质

  • 创建RenderTarget1用于记录射线打中过的位置
  • 创建RenderTarget2用于相对于RT1的用法上做淡出
  • 使用当前材质创建新的动态材质实例
    • 设置RT1和RT2到响应参数
  • 使用淡出材质创建动态材质实例,M_Fadeout
    • RT2作为M_Fadeout的参数
    • 通过DrawCanvasToRenderTarget函数将M_Fadeout绘制到RT2上,每帧减弱

平铺材质

  • Shading Model:Unlit
  • World Position Offset
    • 居中:UV 减 0.5
    • 乘以贴图大小(如1024)
    • 成为三维向量:Append(0)
    • 减去像素点在模型位置的影响:减 Absolute World Position
      • 参考视频用了CaptureLocation参数接受模型的起点
      • 个人认为用Actor Position替代也可以
  • Emissive Color
    • SphereMask(像素的世界坐标,命中点世界坐标,半径,边缘硬度)

Unilit模式使色彩仅取决于材质自身。
World Position Offset指定像素点在空间中相对于模型起点的位置。World Position Offset

Emissive Color给命中点周围半径范围内上色。
Emissive Color

淡出材质

M_Fadeout
接受一个贴图对象参数,乘以0.95作为当前的材质。
会作为材质,绘制到上文的RenderTarget2中。那一帧的RenderTarget2又作为改材质的参数,产生一个亮度减弱5%的效果。

截图相机

用于拍摄平铺材质。
在可绘制对象中增加SceneCaptureComponent2D,调整成垂直向下的角度。旋转看具体情况。
Composite Mode:Additive。增量拍摄,数值约拍越高,越来越亮。
Primitive Render Mode:Use Show Only List。为了只拍平铺材质本身,避免排到场景。
CaptureEveryFrame:false
CaptureOnMovement:false
上面两项False表示拍摄时机蓝图/代码控制。

设置参数并截图

绘制函数,参数(命中位置,半径)

  1. 获得当前材质,保存为OldMaterial
  2. 使用平铺材质
  3. 设置模型的材质参数CaptureLocation:Vector(也可以不用)
  4. 设置模型的材质参数HitLocation:Vector
  5. 设置模型的材质参数ImpactRadius:Scalar命中半径
  6. 将SceneCapture2D的TexutureTarget设为RT1,拍摄
  7. 将SceneCapture2D的TexutureTarget设为RT2,拍摄
  8. 最后把OldMaterial材质还给模型

当调用绘制函数时,会先将模型的材质替换成平铺材质,拍摄表示命中信息的贴图RT1和RT2。最后复原保证模型显示。
RT1可以用于记录已经命中过的区域。
RT2可以用于逐渐淡出的表现。

淡出

M_Fadeout的值是RT2的95%,通过把M_Fadeout作为参数绘制到RT2上,可以降低RT2的亮度打到淡出效果。操作如下。
在这里插入图片描述

  • 32
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值