UE5材质记录 - 01关于Lerp

本文详细介绍了UE5中材质节点Lerp的功能和使用,包括线性插值的概念、公式以及在颜色、纹理混合中的应用。通过创建和测试Lerp节点,展示了如何利用Alpha通道的灰度图实现不同效果的混合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为学习记录,侵删

材质节点—Lerp

一. 介绍

1. UE 文档

LinearInterpolate
LinearInterpolate 表达式会以第三个输入值为遮罩参数,然后在两个输入值之间进行插值。可以想象成两张纹理根据一张遮罩进行过渡,类似Photoshop中的图层遮罩。遮罩Alpha的强度决定了两个输入值贡献的权重。如果Alpha是0.0,就使用第一个输入值。如果Alpha是1.0,就使用第二个输入值。如果Alpha在0.0和1.0之间,输出是两个输入之间的插值。注意,混合是按通道进行的。 所以,如果Alpha是一个RGB颜色,则Alpha的红色通道会定义A和B的红色通道之间的插值,它 独立 于Alpha的绿色通道,后者定义了A和B的绿色通道之间的插值。

2. 理解

   LinearInterpolate 也就是常说的Lerp节点,有三个输入,前两个输入A和B是两种效果,比如两种颜色或者两个种不同的纹理,第三个输入Alpha通道是混合强度(A和B两个输入内容的混合强度)。

Alpha
Alpha = 0 用A输入值
Alpha = 1 用B输入值
0 < Alpha < 1 A和B之间的插值

也就是说如果Alpha在0到1之间时,如果靠近0那么就会靠近A的输入内容,如果靠近1那么就会靠近B的输入内容

Alpha = 0
Alpha = 1
Alpha = 0.5

那么Alpha

### UE5 中编写描边材质的方法 在 Unreal Engine 5 (UE5) 中,创建描边材质可以通过材质编辑器来完成。这种类型的材质通常用于给对象添加轮廓线的效果,在游戏开发中非常有用。 #### 创建基础材质节点 启动 UE5 并打开项目后,进入内容浏览器并右键点击空白处选择 `Material` 来新建一个材质文件。双击此文件以开启材质编辑器窗口。在这里可以构建所需的描边逻辑[^1]。 ```cpp // C++ 示例:动态设置材质参数(假设已经通过蓝图或其他方式绑定了 MaterialInstanceDynamic) UMaterialInstanceDynamic* DynamicMat = UMaterialInstanceDynamic::Create(BaseMaterial, this); if (DynamicMat != nullptr) { DynamicMat->SetScalarParameterValue(FName(TEXT("OutlineThickness")), ThicknessValue); // 设置描边粗细 } ``` #### 添加几何体边缘检测 为了实现描边效果,需要利用场景深度信息来进行边缘检测。这一步骤涉及到使用特殊的材质表达式如 `SceneDepth`, `Derivatives` 和 `DistanceToNearestSurface` 等函数来计算物体表面法向量变化率从而识别边界位置。 ```hlsl float EdgeDetection(float3 NormalWSpace) { float edgeFactor; // 获取当前像素的世界空间坐标及其周围四个方向上的世界空间坐标的深度值 float depthCenter = SceneDepth(); float depthLeft = SampleSceneDepth(-1, 0); float depthRight = SampleSceneDepth(1, 0); float depthTop = SampleSceneDepth(0, -1); float depthBottom = SampleSceneDepth(0, 1); // 计算差异绝对值之和作为边缘强度因子 edgeFactor = abs(depthCenter - depthLeft) + abs(depthCenter - depthRight) + abs(depthCenter - depthTop) + abs(depthCenter - depthBottom); return saturate(edgeFactor * OutlineIntensityMultiplier); // 控制最终显示出来的线条宽度 } ``` #### 应用颜色混合模式 最后一步是定义如何将原始模型的颜色与生成的描边颜色相结合。一般情况下会采用叠加的方式使两者相加;也可以根据具体需求调整为其他形式比如乘积、减去等操作。 ```hlsl float4 ApplyEdgeColor(float4 OriginalColor, float EdgeStrength) { const float4 outlineColor = float4(0.0f, 0.0f, 0.0f, 1.0f); // 黑色描边 return lerp(OriginalColor, outlineColor, EdgeStrength); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值