Godot着色器
函数说明
Godot着色器中有三个函数,分别为顶点着色器,片段着色器,灯光着色器。执行顺序同上。
顶点着色器
顶点着色器(vertex)控制所有的顶点,可以使顶点位置等发生变化。使用vertex可以方便缩放,移动,斜切等操作。
片段着色器
片段着色器(fragment)控制所有的像素,可以修改像素的颜色、透明度等信息。使用fragment可以方便操作滤镜、透明、混色等操作。
灯光着色器
灯光着色器(light)为每一个像素运行一次灯光,方便根据法线、灯光、颜色等控制像素当前的灯光情况。
语法
- varying
- 要从顶点处理器函数往片段(或者灯光)处理器函数里发送数据,可以使用 varying
- uniform
- 设置外部传值
着色器空间
在Godot中,共有四个空间,分别是:
- 局部空间(Local Space)
- 局部空间的坐标UV取值范围为(0, 1),原点为左上角。
- 世界空间(World Space)
- 世界坐标是编辑器中通常使用的坐标。
- 画布空间(Canvas Space)
- 画布空间坐标范围为(0, 0)到视口大小,原点为屏幕左上角。
- 屏幕空间(Screen Space)
- 屏幕空间坐标范围为(-1, 1),原点为屏幕中心。
可以分别使用Vertex内置的MODEL_MATRIX、CANVAS_MATRIX、SCREEN_MATRIX一步步向上转换。
特殊用法
二维shader获取当前uv的像素坐标
使用UV / TEXTURE_PIXEL_SIZE
可获取到当前uv的像素坐标。
获取屏幕纹理
使用uniform sampler2D screen_tex: hint_screen_texture, filter_nearest;
获取屏幕纹理,在Godot4.x中,已经弃用SCREEN_TEXTURE
内置变量。