UE纹理学习之路
本文最后更新于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 可能是一个表示仿射变换的类,它通常用于图形学和计算机视觉中,用来表示平移、旋转、缩放等变换。

  1. 输入参数
    • x:一个 TAffine<float, Num> 类型的对象,表示待处理的仿射变换。
    • MinMax:两个浮点数,表示夹持的上下限。
  2. 核心逻辑
    • 首先,计算 x 的最小值和最大值(通过调用 x.GetMin()x.GetMax())。
    • 使用 FMath::Clamp 函数将这两个值限制在 MinMax 之间,得到 FuncMinFuncMax
    • 根据 x 的最小值和最大值与 MinMax 的关系,有几种不同的处理情况:
      • 如果 x 的所有值都在 MinMax 之间,直接返回 x
      • 如果 x 的最大值小于等于 Min,返回一个所有元素都为 MinTAffine 对象。
      • 如果 x 的最小值大于等于 Max,返回一个所有元素都为 MaxTAffine 对象。
    • 如果以上条件都不满足,使用 Chebyshev 近似法计算 AlphaGammaDelta
    • 使用这些计算出的值更新 TAffine 对象 Result 的各个成员。
  3. 返回值
    • 返回处理后的 TAffine<float, Num> 对象 Result

这里并没有展示 TAffine 类和 FMath::Clamp 函数的实现细节 应当在之后的学习中指出

 

创建可复用的材质函数

我们如何创建可复用的材质函数

 

  1. 在Material中创建Material Function

 

  1. 将该函数暴露到库中,可以在蓝图中被反复调用

     

    1. 在为Subtract添加了新的输入后 其MF_HitFlashDemo会添加一个新的输入口

 

  1. 如下图,MF_HitFlashDemo等效原本的M_HitFlashDemo的功能,材料函数可以实现反复利用,大大提高了蓝图布局的简洁

 

为用户界面设计材质

  1. 创建一个新的材质,修改材质的Material Domain为User Interface

 

  1. 使用LinarGradient函数实现渐变效果

LinearGradient的蓝图实现,先进行系统学习,之后研究LinearGradient的实现源码

 

  1. 使用if函数实现进度条的颜色控制,其中将单向量转换为变量进行控制

 

  1. 进入控件PlayerHealth_Widget,创建Image 并使其变成变量,之后我们将在蓝图中使用

 

  1. 添加下面内容 即可大功告成

 


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇