Agent Skills
返回列表
💻

Godot 着色器

开发编程 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/godot-shaders-uwhd 技能。

技能介绍

写 Godot 着色器容易卡在哪

Godot 4 的着色器写法和 3.x 差别不小:SCREEN_TEXTURE 被移除,颜色相关的 hint 改名,2D 和 3D 着色器的输出变量也不是同一套。照着旧代码或通用 GLSL 经验写,常常出现「着色器没报错但画面没变化」的情况——比如在 spatial 着色器里写 COLOR,编译器不报错,但什么都不会发生。

这个技能覆盖哪些工作

它把 Godot 4.3+ 的 .gdshader 编写拆成一条明确路径:

  • 先定类型:2D 用 shader_type canvas_item;,3D 材质用 shader_type spatial;,粒子、天空、雾也有各自的类型。
  • 挂载方式:新建 ShaderMaterial,把 .gdshader 赋给它,再放到节点的 material 上,uniform 会自动出现在检查器里。
  • 写输出:fragment() 里输出 COLOR(2D)或 ALBEDO/EMISSION/ALPHA/ROUGHNESS/METALLIC(3D),可选的 vertex() 做几何位移,light() 做自定义光照。
  • 调参:用 uniform 加 hint 暴露可调参数,source_color 让颜色走 sRGB 管理。
  • 动画与采样:内置 TIME 驱动周期动画,texture(tex, UV) 采样贴图,GDScript 里用 material.set_shader_parameter("name", value) 从代码赋值。

内置示例覆盖常见场景:2D 的 tint + 滚动 UV、基于噪声阈值的溶解、3D 的自发光边缘光,以及读取屏幕的后处理效果(4.x 用 hint_screen_texture 配合 SCREEN_UV)。

适用边界与注意点

它只处理 Godot 4 的着色器代码本身。跨引擎的着色概念(UV、顶点/片元理论)属于 shader-programming;粒子和 VFX 节点属于通用 3D 技能;非着色器视觉表现不在范围内。

几个容易踩的坑:

  • 输出变量写错:canvas_item 写 COLOR,spatial 写 ALBEDO,写反等于没写。
  • 颜色 uniform 不加 source_color:会被当成原始线性值,画面偏暗或发灰。
  • 3D 透明度需要显式开启:ALPHA < 1.0 要配合 render mode 或材质 transparency,否则仍是不透明或镂空。
  • UV 越界:不写 repeat_enable 会被 clamp,滚动或平铺贴图记得加上。
  • TIME 会一直增长:周期效果用 fract()/mod() 包一层,避免精度漂移。
  • 慎用 discard:会破坏 early-Z,能设 ALPHA/COLOR.a 就别丢弃片元。

内置变量、render mode、varying、自定义 light() 和可视化着色器图,参考技能附带的 references/shading-language.md。

使用场景

  • 给 Sprite2D 加描边、溶解或受击闪白时,需要编写 `canvas_item` 着色器并输出 `COLOR`。
  • 给 3D 模型做边缘光、卡通着色或滚动 UV 时,需要编写 `spatial` 着色器并输出 `ALBEDO`、`EMISSION`。
  • 实现屏幕空间后处理时,需要声明 `hint_screen_texture` 并通过 `SCREEN_UV` 读取当前画面。
  • 需要从 GDScript 动态调整着色器参数时,会用 `set_shader_parameter` 写入暴露的 uniform。

适合人员

  • 独立游戏开发者在 Godot 4.3+ 项目中为 2D 精灵和 UI 节点编写自定义材质。
  • 技术美术需要在 Godot 4 中实现边缘光、溶解和后处理等可复用渲染效果。
  • 从 Godot 3.x 迁移的工程师需要修正着色器里的 `SCREEN_TEXTURE`、颜色 hint 和输出变量写法。