mix 函数是 Godot Shader 中非常常用的插值函数,用于在两个值之间进行线性插值。
基本语法
mix(a, b, t)
参数
- a:起始值(可以是标量、向量或颜色)
- b:结束值(类型必须与 a 相同)
- t:混合因子(取值范围通常为 0.0 到 1.0)
返回值
- 返回 a 和 b 的线性插值结果:a * (1.0 - t) + b * t
使用示例
// 颜色混合
vec3 color1 = vec3(1.0, 0.0, 0.0); // 红色
vec3 color2 = vec3(0.0, 0.0, 1.0); // 蓝色
vec3 result = mix(color1, color2, 0.5); // 得到紫色 (0.5, 0.0, 0.5)
// 数值插值
float a = 0.0;
float b = 10.0;
float value = mix(a, b, 0.3); // 得到 3.0
// 基于纹理的混合
vec4 tex1 = texture(texture1, UV);
vec4 tex2 = texture(texture2, UV);
vec4 final_color = mix(tex1, tex2, 0.7); // 70% tex2 + 30% tex1
实际应用
// 渐变效果
shader_type canvas_item;
void fragment() {
vec4 color1 = vec4(1.0, 0.0, 0.0, 1.0); // 红色
vec4 color2 = vec4(0.0, 0.0, 1.0, 1.0); // 蓝色
// 使用 UV 的 x 坐标作为混合因子
COLOR = mix(color1, color2, UV.x);
}
这个简单的示例会创建一个从左到右从红色渐变到蓝色的效果。