據 AlphaMoat 統計,截至 2026-09,Godot Shader Development 累計下載 2,307 次、獲 0 個星標,在全部 5,078 個 AI 技能中排名第 4,230 位,在「開發程式設計」分類(577 個)中排名第 520 位。
| 平台 | 累計安裝 | 累計下載 | 星標 | 評論 |
|---|---|---|---|---|
| ClawHub ↗ | 30 | 1123 | - | - |
| SkillHub ↗ | 240 | 2307 | - | — |
各平台的計數口徑不同,統計時間不一致。
著色器型別分三類:Spatial(3D 材質/光照/後處理)、CanvasItem(2D 精靈/UI/粒子)、Particles(GPU 粒子)。提供可直接使用的模板:發光、波紋扭曲、顏色替換、溶解、精靈閃爍等 2D 效果;PBR 材質、全息、水面等 3D 著色器;火焰與魔法粒子;螢幕抖動、暗角、色差等後處理。效能最佳化技巧:預計算常量、用 lowp/mediump 精度、合併紋理到圖集、用 mix() 替代 if 減少動態分支、向量化計算。除錯可用 ALBEDO = NORMAL * 0.5 + 0.5; 視覺化法線、ALBEDO = vec3(UV, 0.0); 視覺化 UV,並用 Godot 內建分析器檢視 Draw Calls。注意:引用的補充參考檔案不在本包內。
資料釋出於 2026-10-27
以下是根據技能文件生成的示例,不代表實際執行結果。
2026-09 起統計方法調整:同名技能按作者分別統計,並覆蓋全部技能。圖中虛線為調整前的月份,與之後的資料不直接比較,也不計算跨越調整的增長。
| 月份 | 累計下載 | 環比 | 星標 |
|---|---|---|---|
| 2026-09 | 2307 | — | - |
| 2026-08 | 1685 | +20.4% | - |
| 2026-07 | 1399 | +26.1% | - |
| 2026-06 | 1109 | +15.4% | - |
| 2026-05 | 961 | — | - |
| 2026-03 | 508 | — | - |
以下是作者釋出的原始檔案,按純文字顯示,本站未做修改或稽核;其中的連結不可點選,命令請核實後再執行。抓取於 2026-10-23。
--- name: godot-shader description: Godot 4.x shader development guide covering visual effects, materials, particle shaders, and optimization. Use when creating custom shaders, visual effects, post-processing, or optimizing rendering performance in Godot games. Includes shader templates and common effects. --- # Godot 着色器开发指南 ## 着色器基础 ### 着色器类型
```yaml
Spatial (3D):
- 3D 模型材质
- 光照和阴影
- 后处理效果
CanvasItem (2D):
- 2D 精灵效果
- UI 特效
- 粒子系统
Particles:
- GPU 粒子
- 高性能粒子效果
```
### 基本结构
```glsl
shader_type canvas_item;
// 顶点着色器(可选)
void vertex() {
VERTEX += vec2(sin(TIME), cos(TIME));
}
// 片段着色器
void fragment() {
COLOR = texture(TEXTURE, UV);
}
```
## 常用 2D 效果
### 1. 发光效果
```glsl
shader_type canvas_item;
uniform float glow_intensity : hint_range(0, 10) = 2.0;
uniform vec4 glow_color : source_color = vec4(1.0, 1.0, 1.0, 1.0);
void fragment() {
vec4 tex_color = texture(TEXTURE, UV);
// 边缘检测
vec2 size = TEXTURE_PIXEL_SIZE;
float alpha = 0.0;
alpha += texture(TEXTURE, UV + vec2(0.0, -size.y)).a;
alpha += texture(TEXTURE, UV + vec2(0.0, size.y)).a;
alpha += texture(TEXTURE, UV + vec2(-size.x, 0.0)).a;
alpha += texture(TEXTURE, UV + vec2(size.x, 0.0)).a;
alpha = max(0.0, alpha - tex_color.a * 4.0);
COLOR = tex_color + glow_color * alpha * glow_intensity;
}
```
### 2. 波纹扭曲
```glsl
shader_type canvas_item;
uniform float wave_amplitude = 10.0;
uniform float wave_frequency = 5.0;
uniform float wave_speed = 2.0;
void fragment() {
vec2 distorted_uv = UV;
distorted_uv.x += sin(UV.y * wave_frequency + TIME * wave_speed) * wave_amplitude * 0.01;
distorted_uv.y += cos(UV.x * wave_frequency + TIME * wave_speed) * wave_amplitude * 0.01;
COLOR = texture(TEXTURE, distorted_uv);
}
```
### 3. 颜色替换
```glsl
shader_type canvas_item;
uniform vec4 old_color : source_color = vec4(1.0, 0.0, 0.0, 1.0);
uniform vec4 new_color : source_color = vec4(0.0, 1.0, 0.0, 1.0);
uniform float tolerance : hint_range(0, 1) = 0.1;
void fragment() {
vec4 tex_color = texture(TEXTURE, UV);
float dist = distance(tex_color.rgb, old_color.rgb);
if (dist < tolerance) {
COLOR = vec4(new_color.rgb, tex_color.a);
} else {
COLOR = tex_color;
}
}
```
### 4. 溶解效果
```glsl
shader_type canvas_item;
uniform float dissolve_amount : hint_range(0, 1) = 0.5;
uniform sampler2D noise_texture;
uniform vec4 edge_color : source_color = vec4(1.0, 0.5, 0.0, 1.0);
void fragment() {
vec4 tex_color = texture(TEXTURE, UV);
float noise = texture(noise_texture, UV).r;
if (noise < dissolve_amount) {
discard; // 完全透明
} else if (noise < dissolve_amount + 0.1) {
COLOR = edge_color; // 边缘发光
} else {
COLOR = tex_color;
}
}
```
### 5. 精灵闪烁
```glsl
shader_type canvas_item;
uniform float flash_speed = 5.0;
uniform float flash_intensity : hint_range(0, 1) = 0.5;
void fragment() {
vec4 tex_color = texture(TEXTURE, UV);
float flash = sin(TIME * flash_speed) * 0.5 + 0.5;
tex_color.rgb += vec3(flash * flash_intensity);
COLOR = tex_color;
}
```
## 3D 着色器
### PBR 材质
```glsl
shader_type spatial;
uniform vec4 albedo : source_color = vec4(1.0, 1.0, 1.0, 1.0);
uniform float metallic : hint_range(0, 1) = 0.0;
uniform float roughness : hint_range(0, 1) = 0.5;
uniform sampler2D albedo_texture;
uniform sampler2D normal_texture;
void fragment() {
ALBEDO = albedo.rgb * texture(albedo_texture, UV).rgb;
METALLIC = metallic;
ROUGHNESS = roughness;
NORMAL_MAP = texture(normal_texture, UV).rgb;
}
```
### 全息效果
```glsl
shader_type spatial;
uniform float scanline_speed = 2.0;
uniform float scanline_frequency = 50.0;
uniform vec4 hologram_color : source_color = vec4(0.0, 1.0, 1.0, 1.0);
void fragment() {
// 扫描线
float scanline = sin(UV.y * scanline_frequency + TIME * scanline_speed);
scanline = smoothstep(0.0, 0.5, scanline);
// 边缘发光
float fresnel = pow(1.0 - dot(NORMAL, VIEW), 3.0);
ALBEDO = hologram_color.rgb;
ALPHA = (scanline * 0.3 + 0.7) * (fresnel + 0.3);
EMISSION = hologram_color.rgb * fresnel * 2.0;
}
```
### 水面效果
```glsl
shader_type spatial;
uniform float wave_speed = 1.0;
uniform float wave_height = 0.5;
uniform sampler2D normal_map1;
uniform sampler2D normal_map2;
void vertex() {
VERTEX.y += sin(VERTEX.x * 2.0 + TIME * wave_speed) * wave_height;
VERTEX.y += cos(VERTEX.z * 2.0 + TIME * wave_speed * 0.8) * wave_height;
}
void fragment() {
vec2 uv1 = UV * 1.0 + TIME * 0.05;
vec2 uv2 = UV * 1.0 - TIME * 0.03;
vec3 n1 = texture(normal_map1, uv1).rgb;
vec3 n2 = texture(normal_map2, uv2).rgb;
NORMAL_MAP = mix(n1, n2, 0.5);
ALBEDO = vec3(0.1, 0.4, 0.8);
METALLIC = 0.8;
ROUGHNESS = 0.2;
}
```
## 粒子着色器
### 火焰粒子
```glsl
shader_type particles;
void start() {
// 初始速度向上
VELOCITY = vec3(randf_range(-1.0, 1.0), randf_range(2.0, 5.0), randf_range(-1.0, 1.0));
// 随机大小
float scale = randf_range(0.5, 1.5);
TRANSFORM[0][0] *= scale;
TRANSFORM[1][1] *= scale;
TRANSFORM[2][2] *= scale;
// 随机颜色(红到黄)
COLOR.r = 1.0;
COLOR.g = randf_range(0.0, 1.0);
COLOR.b = 0.0;
}
void process() {
// 逐渐变小
float scale = 1.0 - LIFETIME / LIFETIME;
TRANSFORM[0][0] *= scale;
TRANSFORM[1][1] *= scale;
// 逐渐透明
COLOR.a = 1.0 - LIFETIME / LIFETIME;
}
```
### 魔法粒子
```glsl
shader_type particles;
uniform float orbit_radius = 2.0;
uniform float orbit_speed = 2.0;
void start() {
COLOR = vec4(0.5, 0.0, 1.0, 1.0); // 紫色
TRANSFORM[3].xyz = vec3(0.0, 0.0, 0.0); // 从中心开始
}
void process() {
// 环绕运动
float angle = LIFETIME * orbit_speed;
TRANSFORM[3].x = cos(angle) * orbit_radius;
TRANSFORM[3].z = sin(angle) * orbit_radius;
// 闪烁
COLOR.a = sin(LIFETIME * 10.0) * 0.5 + 0.5;
}
```
## 后处理效果
### 屏幕抖动
```glsl
shader_type canvas_item;
uniform float shake_intensity = 5.0;
uniform float shake_speed = 10.0;
void fragment() {
vec2 shake = vec2(
sin(TIME * shake_speed) * shake_intensity,
cos(TIME * shake_speed * 1.3) * shake_intensity
) * 0.001;
COLOR = texture(TEXTURE, UV + shake);
}
```
### 暗角效果
```glsl
shader_type canvas_item;
uniform float vignette_intensity : hint_range(0, 2) = 0.5;
uniform float vignette_radius : hint_range(0, 1) = 0.8;
void fragment() {
vec4 tex_color = texture(TEXTURE, UV);
vec2 center = UV - 0.5;
float dist = length(center);
float vignette = smoothstep(vignette_radius, 0.0, dist);
tex_color.rgb *= mix(1.0 - vignette_intensity, 1.0, vignette);
COLOR = tex_color;
}
```
### 色差效果
```glsl
shader_type canvas_item;
uniform float aberration_amount = 0.005;
void fragment() {
vec2 direction = normalize(UV - 0.5);
float r = texture(TEXTURE, UV + direction * aberration_amount).r;
float g = texture(TEXTURE, UV).g;
float b = texture(TEXTURE, UV - direction * aberration_amount).b;
COLOR = vec4(r, g, b, 1.0);
}
```
## 性能优化
### 技巧
```yaml
1. 避免复杂计算:
- 预计算常量
- 使用 lowp/mediump 精度
2. 减少纹理采样:
- 合并纹理到图集
- 使用 mipmaps
3. 简化条件分支:
- 使用 mix() 替代 if
- 避免动态分支
4. 利用 GPU 并行:
- 向量化计算
- 避免依赖前一个像素
```
### 精度选择
```glsl
// 低精度(移动端)
uniform lowp vec4 color;
// 中精度(大多数情况)
uniform mediump float intensity;
// 高精度(需要精确计算)
uniform highp mat4 transform;
```
## 调试技巧
### 可视化法线
```glsl
void fragment() {
ALBEDO = NORMAL * 0.5 + 0.5; // 法线可视化
}
```
### 可视化 UV
```glsl
void fragment() {
ALBEDO = vec3(UV, 0.0); // UV 可视化
}
```
### 性能分析
```
# 使用 Godot 内置分析器
Debugger > Profiler > Start
# 查看 Draw Calls
Debugger > Monitors > 2D Draw Calls
```
## 参考资源
- **常用效果**: [references/common-effects.md](references/common-effects.md)
- **优化指南**: [references/optimization.md](references/optimization.md)
- **数学函数**: [references/math-functions.md](references/math-functions.md)
用 gh 命令列工具檢視 GitHub 上的 PR 檢查、工作流執行與 API 查詢的技能。
聚合 16 個搜尋引擎、無需 API Key 的檢索技能。
用命令列直接列出、配置、授權並呼叫 MCP 服務與工具。
生成有效的 Mermaid 圖表,如流程圖、時序圖、思維導圖、ER 圖、使用者旅程等。
用受管 OAuth 訪問 YouTube Data API,檢索影片並管理頻道內容。
透過受管的 OAuth 連線訪問 GitHub REST API。
覆蓋規劃、實現、驗證與測試的編碼工作流技能。
整理 Docker 常用命令與容器工作流的技能。
資料月份:2026-09 · 下載/星標/安裝數聚合自公開技能註冊庫(ClawHub、SkillHub),按月更新。口徑說明見資料方法。