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的亮度打到淡出效果。操作如下。

相关推荐
龙智DevSecOps解决方案19 小时前
Perforce演讲回顾(上):从UE项目Project Titan,看Helix Core在大型游戏开发中的版本控制与集成使用策略
游戏·ue5·源代码管理·perforce·helix core
先生沉默先2 天前
使用Materialize制作unity的贴图,Materialize的简单教程,Materialize学习日志
学习·unity·贴图
闲人编程2 天前
使用Python实现图形学的阴影贴图算法
python·算法·图形学·贴图·阴影贴图
幻狐boke2 天前
【mod分享】山脊赛车无限高清重置mod,替换高清贴图和光影材质,可实现reshade光追
游戏·贴图
foenix662 天前
使用高模烘焙贴图为低模添加细节:详细教程
贴图
psdadd2 天前
Light Image Resizer v7.0.7 解锁版下载及安装方法(图片大小调整工具)
图像处理·贴图
我救我自己2 天前
UE5.4.3 录屏回放系统ReplaySystem蓝图版
java·前端·ue5
cainiao0806053 天前
UE4/UE5开发资源
ue5·ue4
charon87785 天前
Unreal 实现建造游戏|地面交互shader
游戏·ue5·游戏引擎·虚幻
周周的Unity小屋5 天前
UE5蓝图实战:动态墙上挖坑与自定义坑尺寸
ue5·蓝图挖坑