3d着色在这里(暂时学2d方面的,这里先忽略掉了, 有兴趣的可以去看一下):https://docs.godotengine.org/zh_CN/latest/tutorials/shading/shading_reference/spatial_shader.html
渲染模式
模式 |
说明 |
blend_mix |
混合(默认) |
blend_add |
叠加 |
blend_sub |
减去 |
blend_mul |
乘法 |
blend_premul_alpha |
? |
blend_disabled |
禁用blend |
unshaded |
只包含反射,不包含光照和阴影 |
skip_vertex_transform |
VERTEX / NORMAL等需要在vertex手动设置 |
vertex 内建函数
顶点数据,顶点坐标信息
shader_type canvas_item;
render_mode skip_vertex_transform;
void vertex() {
VERTEX = (EXTRA_MATRIX * (WORLD_MATRIX * vec4(VERTEX, 0.0, 1.0))).xy;
}
默认不使用skip_vertex_transform,代码VERTEX = (EXTRA_MATRIX * (WORLD_MATRIX * vec4(VERTEX, 0.0, 1.0))).xy;
这个完全没有必要做
函数 |
说明 |
in mat WORLD_MATRIX |
图像空间到视图空间的转换。 |
in mat4 EXTRA_MATRIX |
额外的转变。 |
in mat4 PROJECTION_MATRIX |
查看空间以剪切空间变换。 |
in float TIME |
全球时间,以秒为单位。 |
in vec4 INSTANCE_CUSTOM |
实例自定义数据。 |
in bool AT_LIGHT_PASS |
如果光通过则为真。 |
inout vec2 VERTEX |
顶点 |
in vec2 TEXTURE_PIXEL_SIZE |
默认2D纹理的标准化像素大小。 对于纹理大小为64x32px的Sprite,TEXTURE_PIXEL_SIZE =vec2(1 / 64,1 / 32) |
inout vec2 UV |
UV坐标 |
inout vec4 COLOR |
顶点的颜色。 |
inout float POINT_SIZE |
点绘图的点大小。 |
fragment 内建函数
//默认值
COLOR = texture(TEXTURE, UV);
//法线贴图
NORMALMAP = texture(NORMAL_TEXTURE, UV).rgb;
函数 |
说明 |
in vec4 FRAGCOORD |
片段坐标,像素调整。 |
inout vec3 NORMAL |
通过NORMAL_TEXTURE得到的法线 |
out vec3 NORMALMAP |
法线贴图 |
inout float NORMALMAP_DEPTH |
用于缩放的法线贴图深度。 |
in vec2 UV |
来自顶点功能的UV。 |
inout vec4 COLOR |
色彩 |
in sampler2D TEXTURE |
默认的2D纹理 |
in sampler2D NORMAL_TEXTURE |
默认2D法线纹理。 |
in vec2 TEXTURE_PIXEL_SIZE |
默认2D纹理的标准化像素大小。 对于纹理大小为64x32px的Sprite,TEXTURE_PIXEL_SIZE =vec2(1 / 64,1 / 32) |
in vec2 SCREEN_UV |
屏幕uv做吧, 与SCREEN_TEXTURE一起使用 |
in vec2 POINT_COORD |
协调绘图点。 |
in float TIME |
全球时间以秒为单位。 |
in bool AT_LIGHT_PASS |
如果光通过则为真。 |
in sampler2D SCREEN_TEXTURE |
屏幕纹理,mipmap包含高斯模糊版本。 |
light 内置函数
函数 |
说明 |
in vec4 FRAGCOORD |
片段坐标,像素调整。 |
inout vec3 NORMAL |
通过NORMAL_TEXTURE得到的法线 |
in vec2 UV |
来自顶点功能的UV。 |
inout vec4 COLOR |
色彩 |
in sampler2D TEXTURE |
默认的2D纹理 |
in vec2 TEXTURE_PIXEL_SIZE |
默认2D纹理的标准化像素大小。 对于纹理大小为64x32px的Sprite,TEXTURE_PIXEL_SIZE =vec2(1 / 64,1 / 32) |
in vec2 SCREEN_UV |
屏幕uv做吧, 与SCREEN_TEXTURE一起使用 |
in vec2 POINT_COORD |
协调绘图点。 |
in float TIME |
全球时间以秒为单位。 |
inout vec2 LIGHT_VEC |
向量从光到片段,可以修改以改变阴影计算。 |
inout float LIGHT_HEIGHT |
光高,只受法线影响 |
inout vec4 LIGHT_COLOR |
光的颜色。 |
in vec2 LIGHT_UV |
光线uv坐标。 |
out vec4 SHADOW_COLOR |
阴影色 |
inout vec4 LIGHT |
通过光贴图和输出色得到值 |