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指定像素点在空间中相对于模型起点的位置。

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

淡出材质

接受一个贴图对象参数,乘以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的亮度打到淡出效果。操作如下。

相关推荐
ue星空6 小时前
UE5失真材质
ue5·材质
ue星空1 天前
UE5材质节点Distance
ue5·材质
ue星空1 天前
UE5动画蓝图
ue5·蓝图
青年夏日科技工作者1 天前
UE5.3 虚幻引擎 Linux ubuntu插件开发打包
ue5
Zhichao_971 天前
【UE5 C++课程系列笔记】19——通过GConfig读写.ini文件
ue5
ue星空2 天前
UE5材质节点Frac/Fmod
ue5·材质
ue星空2 天前
UE5通过蓝图节点控制材质参数
ue5·材质
ue星空2 天前
UE5材质节点Camera Vector/Reflection Vector
ue5·材质
windwind20003 天前
UE5 Debug的一些心得
ue5
ue星空3 天前
UE5材质节点VertexNormalWs/PixelNormalWS
ue5·材质