「Godot」Shader从入门到入坟

Godot版本:4.2.2

文档:[Godot Engine Shaders Tutorials]

着色器

  • vertex:顶点着色器
  • fragment:片段着色器

GDShader模式

  • shader type:有canvas_item,spatial,particle,sky,fog.其中2D Shader使用canvas_item,3D Shader使用spatial,其他类型不常用

GDShader数据类型

  • 普通数据类型
    • int:整型
    • float:浮点型
    • bool:布尔
GDShader
void vertex() {
	int my_int = 10;
	my_int = -10;
	// 将浮点型强转为整型
	my_int = int(9.);
	
	// 浮点型10.0可以忽略0不写,10.和10.0一样
	float my_float = 10.;
	my_float = -10.23;
	my_float = float(10);
	
	bool my_bool = false;
	my_bool = true;
}

GDShader Vector

  • Vector数据
    • vec2:vec2(1.0, 2.0);
    • vec3:vec3(1.0, 2.0, 3.0);
    • vec4:vec4(1.0, 2.0, 3.0, 4.0);
    • ivec4:ivec4(1, 2, 3, 4); ivec2,ivec3同理
    • bvec4:bvec4(false, true, true, false); ivec2,ivec3同理
GDShader
void vertex() {
	vec2 my_vec2 = vec2(1., 2.);
	vec4 my_vec4 = vec4(1., 2., 3.,4.);
	my_vec4 = vec4(1.,my_vec2,4.);
	ivec4 my_ivec4 = ivec4(1, 2, 3, 4);
	bvec4 my_bvec4 = bvec4(false, true, true, false);
}
  • Vector数据Swizzing
GDShader
void vertex() {
	vec2 my_vec2 = vec2(1., 2.);
	vec3 my_vec3 = vec3(1., 2., 3.);
	vec4 my_vec4 = vec4(1., 2., 3.,4.);
	
	my_vec3.xy = my_vec4.xy;
	my_vec3.yz = my_vec4.zw;
	my_vec3.rgb = my_vec4.xyw;
	my_vec2.xy = my_vec3.bb;
	// ...
}

TIME

  • 全局时间参数,在着色器中使用TIME会出现动态的效果

Uniform

  • 这个字段可以从外部传进参数
  • hint_rang:可以指定范围,第三个参数是最小间隔
  • source_color:可以调用颜色面板
  • grounp_uniform:可以对参数分类,二级分类等

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注