SD1.从血条材质开始
大约 15 分钟
导读
格子部分(方案1)
TEXCOORD
注
TEXCOORD(Texture Coordinates)节点通常用于处理纹理坐标。纹理坐标是指在纹理映射过程中,用于确定在纹理图像上的哪个位置获取颜色的坐标。 也称为UV坐标。
- UE中贴图的左上角为原点(0.0,0.0),右下角是(1.0,1.0)
- 垂直方向是Y轴,水平方向是X轴。
ColorMap
注
Colormap(色彩映射)是用于将数据值映射到颜色的方法。
在UE中,颜色贴图通常采用RGBA的格式,即红色(R),绿色(G),蓝色(B)和Alpha通道(A)。每个通道的含义如下:
红色通道(R):
- 含义: 红色通道表示颜色的红色分量。
- 用途: 红色通道通常用于表示表面的反射率,金属度(Metallic)等属性。
绿色通道(G):
- 含义: 绿色通道表示颜色的绿色分量。
- 用途: 绿色通道通常用于表示表面的粗糙度(Roughness)等属性。
蓝色通道(B):
- 含义: 蓝色通道表示颜色的蓝色分量。
- 用途: 蓝色通道通常用于表示表面的法线贴图或其他法线信息。
Alpha通道(A):
- 含义: Alpha通道表示颜色的透明度或不透明度。0表示完全透明,1表示完全不透明。
- 用途: Alpha通道通常用于在材质中控制透明度,例如实现半透明效果、蒙皮遮罩等。
ComponentMask节点
IF节点
if (tex.x >= 0.25)
{
return float3(1.0, 0.0, 0.0);//红色
}
return float3(1.0,1.0, 1.0);//白色
- 0-0.25的部分都是红色
- 0.25-1.0的部分都是白色
Frac节点
tiling平铺
注
循环单元,这里不是上下左右循环拼接的循环,而是指原本贴图平铺=1时的部分为循环单元。
最终显示=(颜色1占比+颜色2占比)x 平铺次数
其中颜色1占比+颜色2占比 =1比如(0.5+0.5)x平铺2次,此时每个独立颜色1占总图1/4
Custom节点
// 1. 总血量Maximums = 一个格子血量PerSplitHP * 格子数量CellCount
float CellCount = Maximums / PerSplitHP;
// 2. 如果格子数量CellCount = 1 返回 0。
if (CellCount == 1)
{
return 1;
}
// 3. 绘制格子
float2 tex = frac(float2(UV.x * CellCount, 0));
// 4. 计算间隔宽度
float Compensate = CellCount * SpacingValue;//补偿
float Spacing = clamp(Compensate, 0.001, 0.99);//钳制在0.01-0.99内
// 5. 检查是否在间隔范围内
if (tex.x >= Spacing)
{
return 1;
}
return 0;
remap节点
注
将一个范围的值映射到另一个范围,比如0-100映射到0-1,同时起着钳制作用。
临界值问题
格子部分(方案2)
LineGradient节点
Ceil节点
注
"ceil" 是 "ceiling"(天花板)的缩写,通常指向向上取整的操作。
// Param: Maximums - 总血量
// Param: PerSplitHP - 一个格子的血量
// Param: SpacingValue - 间隔值,用于调整间隔宽度
// 1. 总血量Maximums = 一个格子血量PerSplitHP * 格子数量CellCount
float CellCount = Maximums / PerSplitHP;
// 2. 如果格子数量CellCount = 1 返回 1。
if (CellCount == 1)
{
return 1;
}
// 3. 绘制格子
float2 tex = frac(float2(UV.x * CellCount, 0));
// 4. 计算间隔宽度
// 补偿:用于调整间隔宽度
float Compensate = CellCount * SpacingValue;
// 间隔宽度:钳制在0.001-0.99内
float Spacing = clamp(Compensate, 0.001, 0.99);
// 5. 检查是否在间隔范围内
if (tex.x >= Spacing)
{
return 1;
}
return 0;
修改于2024/1/16
状态部分
Lerp节点
注
Lerp 的作用是在两个值之间按照线性关系产生一个中间值。
2024/2/19补
1. 只更新最大血量
2. 更新最大血量和当前血量百分比
先减血,后突破最大体力并加上突破部分。
先减血,后突破最大体力不加上突破部分。
实现细节
2024/3/01修
- 先更新血量委托,这里的血量要参与后面的血量百分比计算。
- 修改血量上下限需考虑更新原本的血量百分比,根据Buff效果决定要不要加上突破部分。
- 提前设定好=0死亡的委托,以及血量<=最大血量的钳制。
3. 临时血量表现效果