ObsidianNotes/GDShader.md

971 B

#GODOT

基础语法

// gdscript 如何传递数据给 material
ShaderMaterial.set_shader_parameter
// Shader 的 vertex 如何传递 worldPosition 给 fragment 使用 
声明变量时不用uniform 而是用 varying
// 如何读取repeat的贴图 (如果是主贴图的话, 需要在导入设置或者在CanvasItem内的Texture中 选择 repeat)
uniform sampler2D noise : repeat_enable;
或者去fract uv 获得小数部分然后采样
// 如何uniform 一个可以编辑的颜色
uniform vec4 new_color : source_color = vec4(1,1,1,1);
// 如何uniform 一个range float
uniform float test: hint_range(0.0, 1.0, 0.1) = .5;

Example : 顶点中获得世界坐标并传递给片元(2D)

varying vec2 worldPos;
void vertex() {
	worldPos = (MODEL_MATRIX * vec4(VERTEX, 0.0, 1.0)).xy;
}
void fragment(){
	//do some thing..
}