Skip to content

Godot 着色器

Godot 中的着色器

内容

  • 实现画面变化过程中的画面残影与故障效果

笔记

Godot 中的 Shader: .shader 文件

与 GLSL 不同,在同一文件下可同时包含 vertex 和 fragment From GLSL to Godot shaders

各种基本的类型 Shading reference

Render modes

针对 2d 物件

shader_type canvas_item;

针对 3d 物件

shader_type spatial
render_mode unshaded;

Godot Bulitin Idents 内置标识

canvas_item

CanvasItem shaders

spatial

Spatial shaders

函数 API

将数组加载到纹理

要想精确地获取每个像素的值,不能用采样函数 texture,因为采样函数会涉及归一化、过滤以及插值等复杂操作,基本无法得到某一确切像素的值。 纹素获取函数 texlFetch 是 OpenGL ES 3.0 引入的 API,它将纹理视为图像,可以精确地访问像素的内容,可以类比为通过索引获取数组某个元素的值。

vec4 texelFetch(sampler2D sampler, ivec2 P, int lod);

texelFetch 使用的是未归一化的坐标直接访问纹理中的纹素,不执行任何形式的过滤和插值操作,坐标范围为实际载入纹理图像的宽和高。

两种类似的操作,但是最终的渲染结果会有细微差异。

gl_FragColor = texture(s_Texture, v_texCoord);
gl_FragColor = texelFetch(s_Texture, ivec2(int(v_texCoord.x * imgWidth), int(v_texCoord.y * imgHeight)), 0);