Fix release for 1.1.1: the minimal path end to end, engine commands that run on Godot, Unity and Unreal, hook warnings you can see, and verdicts that say when they could not check. Details in CHANGELOG.md; upgrade steps in UPGRADING.md (v1.1.1 → v1.1.2). Fixes #67 Fixes #131 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuJn2FdynEybfL5KC697nJ
5.5 KiB
Agent Test Spec: godot-shader-specialist
Agent Summary
Domain: Godot shading language (GLSL-derivative), visual shaders (VisualShader graph), material setup, particle shaders, and post-processing effects. Does NOT own: gameplay code, art style direction. No gate IDs assigned.
Static Assertions (Structural)
description:field is present and domain-specific (references Godot shading language / materials / post-processing)tools:list includes Read, Write, Edit, Glob, Grep- Model tier is
sonnet— frontmattermodel:reads exactlysonnet(tiers:.claude/docs/model-tiers.md) - Agent definition references
docs/engine-reference/godot/VERSION.mdas the authoritative source for Godot shader API changes
Test Cases
Case 1: In-domain request — appropriate output
Input: "Write a dissolve effect shader for enemy death in Godot." Expected behavior:
- Produces valid Godot shading language code (not HLSL, not GLSL directly)
- Uses
shader_type spatial;orcanvas_itemas appropriate - Defines
uniform float dissolve_amount : hint_range(0.0, 1.0); - Samples a noise texture to determine per-pixel dissolve threshold
- Uses
discard;for pixels below the threshold - Optionally adds an edge glow using emission near the dissolve boundary
- Code is syntactically correct for Godot's shading language
Case 2: HLSL redirect
Input: "Write an HLSL compute shader for this dissolve effect." Expected behavior:
- Does NOT produce HLSL code
- States that Godot materials are written in Godot's own shading language (
.gdshader, a GLSL derivative), not HLSL - Translates the HLSL intent into the equivalent
.gdshaderapproach (noise threshold,discard, emission at the dissolve edge) - If a compute shader was really the intent, flags compute as a separate low-level path (RenderingDevice; unavailable on the Compatibility renderer) and brings in godot-gdextension-specialist for compute-shader offloading
Case 3: Post-cutoff API change — shader texture types (Godot 4.4)
Input: "Use texture() with a sampler2D to sample the noise texture in the shader."
Expected behavior:
- Checks the version reference before writing the shader (
VERSION.md, thenbreaking-changes.mdandmodules/rendering.md) - Identifies what the 4.4 change covers: engine-side shader texture parameter/return types moved from
Texture2DtoTexture— script and engine API code that handles shader textures, not shading-language syntax - Uses
uniform sampler2D noise_texture;withtexture(noise_texture, UV)— the form its own patterns use; the reference records no change to shading-language sampling syntax - Does NOT invent a changed sampling syntax for 4.4–4.6, or rewrite
sampler2D/texture()because of the 4.4 row
Case 4: Fragment shader LOD strategy
Input: "The fragment shader for the water surface has 8 texture samples and is causing GPU bottlenecks on mid-range hardware." Expected behavior:
- Identifies the per-fragment texture sample count as the primary cost driver
- Proposes an LOD strategy:
- Reduce sample count at distance with a simplified LOD material for distant water, not a per-pixel distance branch in the fragment shader
- Move UV/scroll math that does not need per-pixel evaluation into the vertex shader and pass it through a
varying - Make sure the water textures are mipmapped (e.g.
filter_linear_mipmap) so distant samples read smaller mip levels
- Provides the shader code modification implementing the LOD approach
- Does NOT change gameplay behavior of the water system
Case 5: Context pass — Godot 4.6 glow rework
Input: Engine version context: Godot 4.6. Request: "Add a bloom/glow post-processing effect to the scene." Expected behavior:
- References the VERSION.md note: Godot 4.6 includes a glow rework
- Because
VERSION.mdrecordsInstalled at pin timeas NOT DETERMINED, asks which editor version is installed before tuning for the 4.6 glow behavior - Produces glow configuration guidance on the
WorldEnvironmentnode'sEnvironmentresource - States the documented 4.6 change: glow now processes before tonemapping (it was after), with screen blending — so glow intensity/blend tuned on an earlier version will look different and may need re-tuning
- Does NOT invent renamed or removed glow properties that
breaking-changes.mdandmodules/rendering.mddo not document - Flags any properties that the LLM's training data may have incorrect information about due to the post-cutoff timing
Protocol Compliance
- Stays within declared domain (Godot shading language, materials, VFX shaders, post-processing)
- Redirects gameplay code requests to gameplay-programmer
- Writes material and post-process shaders as
.gdshader(Godot shading language) — never HLSL - Checks engine version reference for post-cutoff shader API changes (4.4 texture types, 4.6 glow rework)
- Returns structured output (shader code with uniforms documented, LOD strategies with performance rationale)
- Flags any post-cutoff API usage as requiring verification
- Asks "May I write this to [filepath]?" naming the file before writing
Coverage Notes
- Dissolve shader (Case 1) should be paired with a visual test screenshot in
production/qa/evidence/ - Texture-type case (Case 3) confirms the agent reads what a post-cutoff change actually covers before applying it, instead of rewriting syntax the change does not touch
- Glow rework (Case 5) is a Godot 4.6-specific test — verifies the agent applies the most recent migration notes