本文最后更新于211 天前,其中的信息可能已经过时,如有错误请联系作者
UE纹理学习之路
溶解效果
1.在Materials文件夹中创建新的材质
2.从第二张图片中,我们可以了解到以下知识点
Clamp 确保值处于一个固定的范围
template< uint32 Num >
FORCEINLINE TAffine< float, Num > Clamp( const TAffine< float, Num >& x, float Min, float Max )
{
// Using Chebyshev approximation
float xMin = x.GetMin();
float xMax = x.GetMax();
float FuncMin = FMath::Clamp( xMin, Min, Max );
float FuncMax = FMath::Clamp( xMax, Min, Max );
if( Min <= xMin && xMax <= Max )
return x;
if( xMax <= Min )
return TAffine< float, Num >( Min );
if( xMin >= Max )
return TAffine< float, Num >( Max );
float Alpha = ( FuncMax - FuncMin ) / ( xMax - xMin );
float Gamma = 0.5f * ( 1.0f - Alpha ) * ( FuncMax + FuncMin );
float Delta = ( 1.0f - Alpha ) * FuncMax - Gamma;
TAffine< float, Num > Result;
Result.c = Alpha * x.c + Gamma;
Result.K = FMath::Abs( Alpha * x.K ) + Delta;
for( uint32 i = 0; i < Num; i++ )
Result.e[i] = Alpha * x.e[i];
return Result;
}
上面是Clamp的源码
该函数用于对输入的 TAffine<float, Num>
类型的对象 x
进行某种形式的“夹持”或“限制”操作。这里,TAffine
可能是一个表示仿射变换的类,它通常用于图形学和计算机视觉中,用来表示平移、旋转、缩放等变换。
- 输入参数:
x
:一个TAffine<float, Num>
类型的对象,表示待处理的仿射变换。Min
和Max
:两个浮点数,表示夹持的上下限。
- 核心逻辑:
- 首先,计算
x
的最小值和最大值(通过调用x.GetMin()
和x.GetMax()
)。 - 使用
FMath::Clamp
函数将这两个值限制在Min
和Max
之间,得到FuncMin
和FuncMax
。 - 根据
x
的最小值和最大值与Min
和Max
的关系,有几种不同的处理情况:- 如果
x
的所有值都在Min
和Max
之间,直接返回x
。 - 如果
x
的最大值小于等于Min
,返回一个所有元素都为Min
的TAffine
对象。 - 如果
x
的最小值大于等于Max
,返回一个所有元素都为Max
的TAffine
对象。
- 如果
- 如果以上条件都不满足,使用 Chebyshev 近似法计算
Alpha
、Gamma
和Delta
。 - 使用这些计算出的值更新
TAffine
对象Result
的各个成员。
- 首先,计算
- 返回值:
- 返回处理后的
TAffine<float, Num>
对象Result
。
- 返回处理后的
这里并没有展示 TAffine
类和 FMath::Clamp
函数的实现细节 应当在之后的学习中指出
创建可复用的材质函数
我们如何创建可复用的材质函数
-
在Material中创建Material Function
-
将该函数暴露到库中,可以在蓝图中被反复调用
- 在为Subtract添加了新的输入后 其MF_HitFlashDemo会添加一个新的输入口
- 如下图,MF_HitFlashDemo等效原本的M_HitFlashDemo的功能,材料函数可以实现反复利用,大大提高了蓝图布局的简洁
为用户界面设计材质
- 创建一个新的材质,修改材质的Material Domain为User Interface
- 使用LinarGradient函数实现渐变效果
LinearGradient的蓝图实现,先进行系统学习,之后研究LinearGradient的实现源码
- 使用if函数实现进度条的颜色控制,其中将单向量转换为变量进行控制
- 进入控件PlayerHealth_Widget,创建Image 并使其变成变量,之后我们将在蓝图中使用
- 添加下面内容 即可大功告成