虚幻引擎 Lerp (Float / Vector / etc.) 节点

🎯 一、Lerp的数学原理与核心逻辑

Linear Interpolate (Lerp) 的核心功能是根据一个插值因子 Alpha,在两个输入值之间进行线性过渡,计算公式为:Lerp(A,B,t) = A + (B - A) * t

  • A(起始值):当 Alpha = 0 时输出 A

  • B(目标值):当 Alpha = 1 时输出 B

  • Alpha(插值因子):通常为 0~1 的浮点数,决定插值进度(0.5 时输出 A 与 B 的中点)

注意:Lerp 在 材质编辑器 中通常叫做 LinearInterpolate,在 蓝图 中则根据类型分为 Lerp (Float)Lerp (Vector)Lerp (Rotator) 等节点


🎯 二、蓝图动画:从零搭建平滑运动系统(以电梯为例)

最终目标

制作一个点击后从地面平滑上升到 450 单位高度的电梯(2 路纹理混合)。

📝 准备工作

  • 使用第三人称模板项目,新建一个 Actor 蓝图命名 BP_Elevator

  • 为其添加一个 Static Mesh 组件并赋予电梯模型

🧱 步骤 1:添加交互触发逻辑

在事件图表中按顺序搭建点击检测:

  1. 获取玩家控制器 → 显示鼠标光标:在 Event BeginPlay 后连接「Show Mouse Cursor」

  2. 启用输入:连接「Enable Input」节点,指定玩家控制器为输入接收者

  3. 绑定点击事件:选中电梯的 Static Mesh 组件,在 Details 面板中点击 Events → OnClicked (StaticMeshComponent)

📈 步骤 2:设置 Timeline 控制 Alpha 值

Timeline 的本质是随时间生成数值的时间轴驱动器——你设定一条曲线,它就能随时间稳定输出 0→1 的插值系数

  1. 右键空白处搜索添加 Timeline 节点,双击进入 Timeline 编辑器

  2. 在 Timeline 编辑器中将 Length 改为 1.0(1 秒)

  3. 点击 Add Float Track 添加浮点轨道,命名为 AlphaCurve

  4. 在轨道上设置两个关键帧:Time=0, Value=0;Time=1, Value=1

  5. 关闭编辑器回到蓝图图表,分别拖出 Timeline 的三个引脚:

    • Play(播放):开始正向播放曲线

    • Update(更新):每帧输出当前 Alpha 值

    • AlphaCurve(输出引脚):即随时间变化的插值系数

📍 步骤 3:设置移动范围并连接 Lerp

  1. 创建 Lerp (Vector) 节点,设置:

    • A(起始位置) → 电梯的原始位置(如 (0, 0, 0)

    • B(目标位置) → 将 Z 轴设为 450

  2. 将 Timeline 的 AlphaCurve 输出连接到 Lerp 的 Alpha 输入

  3. 将 Timeline 的 Update 引脚连接到 Set World Location(或 Set Relative Location),并把 Lerp 的输出连接到后者。这样 Timeline 每输出一个新 Alpha,Lerp 就会计算对应位置并更新

🔁 步骤 4:完整逻辑连线

text
OnClicked → Timeline.Play
Timeline.Update → Lerp (Vector).Alpha(Timeline.AlphaCurve 同样需连接)
Lerp.Return Value → Set Actor Location

运行游戏并点击电梯,1 秒内平滑上升到 450 高度。

扩展提示:添加 Flip Flop 节点控制升降交替,配合 Timeline 的 Reverse 或 Play from Start 引脚即可实现自动循环开关门或电梯往复运动

✅ 蓝图设计检查清单

  • 已添加 Static Mesh 组件并绑定 OnClicked 事件

  • 已添加 Timeline,长度 1 秒,关键帧 0→1

  • 已添加 Lerp (Vector),A 为起始位置,B 为上升后位置

  • 已添加 Set Actor Location,并将 Lerp 输出连接到其 New Location

  • 已处理鼠标光标显示和输入启用


🎨 三、材质混合:使用顶点颜色绘制地形纹理(3 路纹理混合)

最终目标

在静态网格体上通过红、绿、蓝三个通道,分别绘制三张不同纹理的叠加材质(3 路纹理混合)。

📝 准备工作

  • 在 Content Browser 中右键创建 Material,命名 M_VertexBlend_3Way

  • 准备三张贴图(T_Dirt、T_Grass、T_Rock)并导入

  • 准备一个具有足够顶点密度的静态网格体(如平面或地形代理模型)

🧱 步骤 1:添加顶点颜色与纹理节点

  1. 打开 M_VertexBlend_3Way 材质编辑器,右键添加:

    • VertexColor 节点:读取网格体上绘制的顶点颜色

    • Texture Sample x3:分别设置为 T_Dirt(纹理1)、T_Grass(纹理2)、T_Rock(纹理3)

🧩 步骤 2:搭建三路插值链

针对 3 路混合,需要两个 Lerp 节点级联,通过 RGB 通道逐层混合:

层级 Lerp 节点 A 输入 B 输入 Alpha 控制 结果去向
底层(Lerp 1) Lerp_1 纹理 2 纹理 1 VertexColor.R(红) 接入 Lerp_2.A
顶层(Lerp 2) Lerp_2 Lerp_1 输出 纹理 3 VertexColor.B(蓝) 接入材质最终输出

具体连接步骤:

  1. 创建 Lerp_1,将 T_Grass(纹理2)连接到 A,T_Dirt(纹理1)连接到 B

  2. 从 VertexColor 拖出 R(红色) 通道连接到 Lerp_1 的 Alpha。当红色通道为 0 时显示纹理 2,为 1 时显示纹理 1

  3. 创建 Lerp_2,将 Lerp_1 的输出连接到 A,T_Rock(纹理3)连接到 B

  4. 从 VertexColor 拖出 B(蓝色) 通道连接到 Lerp_2 的 Alpha

  5. 将 Lerp_2 的输出连接到材质的 Base Color

🎨 步骤 3:启用顶点绘制并验证

  1. 在网格体的材质槽中应用 M_VertexBlend_3Way

  2. 进入 Paint 模式,选择 Vertex Weight 工具

  3. 将 Texture Weight Type 设置为 RGB(Three Textures),对应红=纹理 1、绿=纹理 2、蓝=纹理 3 三个独立绘图通道

  4. 用红色刷子在网格体上绘制,即显示纹理 1(T_Dirt);用蓝色刷子绘制,即显示纹理 3(T_Rock)

扩展思路:如果需要在材质中实现昼夜切换(例如白天显示日间贴图、夜晚切换发光材质),只需在材质中放置一个 Lerp,A 接日间纹理、B 接夜间发光材质,Alpha 接 Scalar Parameter DaytimeValue,再在蓝图中创建动态材质实例并随时间改变该参数即可

✅ 材质设计检查清单

  • 已添加 VertexColor 节点

  • 已添加三张 Texture Sample 并分别设为日间、草地、岩石贴图

  • 已添加至少两个 Lerp 节点并按 RGB 通道正确连接

  • 已将最终 Lerp 输出连接到材质的 Base Color

  • 已将纹理权重类型设置为 RGB(Three Textures)


🎯 四、高级技巧速查

🎯 平滑相机跟随

用 Timeline 做插值系数生成器 + Lerp 做位置计算器,将相机当前帧的平滑位置设为 Lerp(相机前帧位置,角色目标位置,Alpha),并使用 Spring Arm 组件处理碰撞防穿模

🎨 材质高级混合(4 路 / 5 路)

4 路混合加入 Alpha 通道(ARGB),5 路混合则需要额外 Lerp,其 Alpha 由 1 - VertexColor.Alpha 驱动,将“五号纹理”与四路链输出再次混合

🔄 使用官方轮子(更简洁的替代方案)

Move Component To 节点可直接执行平滑移动——只需指定目标位置和移动时间,系统自动完成插值并包含缓入缓出效果,比手动搭建 Lerp+Timeline 更快捷

⚡ 实时响应式插值

VInterp To(向量插值)和 RInterp To(旋转器插值)专为帧速率变化剧烈的环境设计——它们不依赖固定时长,而是按给定速度每帧向目标值逼近,适用于角色平滑转向、武器后坐力恢复等实时动画


🧩 五、补充技巧与避坑指南

✨ 补充技巧

  • 快捷键操作:材质图表中按 L 键 快速创建 Lerp 节点

  • 使用 HSV 色彩插值:普通 Lerp (LinearColor) 容易产生脏色,如果需要保持色彩饱和度且按最短色调路径过渡,使用 Lerp Using HSV (LinearColor) 效果更好

  • 四元数旋转插值:Lerp 旋转建议用 Slerp(球面线性插值),均匀平滑且不产生万向节锁;如果必须用 Lerp (Rotator),开启“最短路径”并接受轻微的旋转不均匀性

⚠️ 避坑指南

  • Alpha 未限制 0~1:数值超出范围会使结果超出 [A,B] 区间,使用 Clamp 进行保护

  • Tick 驱动无 Delta Time:直接 Tick 累加 Alpha 会导致插值速度与帧率挂钩,正确做法是用 Delta Time * Speed 逐步累加

  • 材质与蓝图节点混淆:材质图表中的 LinearInterpolate 与蓝图的 Lerp (Float / Vector / Rotator) 参数相同但应用场景完全不同,不可混用


💎 总结

Lerp 的本质就是一个极其干净的公式:A + (B-A) * Alpha。把握住 Alpha 控制插值进度 这个核心逻辑,并结合各类 AI 节点(如 Timeline、Delta Time、顶点颜色 RGB 通道等),就能够轻松实现平滑动画、材质纹理逐层混合、动态数值过渡等各类场景。后续遇到需要“平滑变化”或“按权重切换”的需求,不妨优先考虑 Lerp。

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容