Files
Claude-Code-Game-Studios/CCGS Skill Testing Framework/agents/engine/unity/unity-shader-specialist.md
T
DonchitosandClaude Opus 5.5 b21fa0f7f2 Release 1.1.2 — the default path works end to end
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
2026-09-29 21:32:19 +10:00

5.3 KiB

Agent Test Spec: unity-shader-specialist

Agent Summary

Domain: Unity Shader Graph, custom HLSL, VFX Graph, URP/HDRP pipeline customization, 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 Shader Graph / HLSL / VFX Graph / URP / HDRP)
  • tools: list includes Read, Write, Edit, Glob, Grep
  • Model tier is sonnet — frontmatter model: reads exactly sonnet (tiers: .claude/docs/model-tiers.md)
  • Agent definition does not claim authority over gameplay code or art direction

Test Cases

Case 1: In-domain request — appropriate output

Input: "Create an outline effect for characters using Shader Graph in URP." Expected behavior:

  • Produces a Shader Graph node setup description (inverted hull via vertex offset, or a screen-space depth/normal edge detection), named to its convention (e.g., SG_Char_Outline) with reusable logic in a Sub Graph
  • Stays in Shader Graph and drops to custom HLSL only if Shader Graph cannot achieve the effect; any HLSL keeps SRP Batcher compatibility (UnityPerMaterial CBUFFER)
  • For a screen-space variant, uses a URP ScriptableRendererFeature / ScriptableRenderPass recorded through the RenderGraph API (RecordRenderGraph), not the deprecated Execute / CommandBuffer path — per docs/engine-reference/unity/modules/rendering.md
  • Does NOT produce HDRP-specific nodes without confirming the render pipeline

Case 2: Out-of-domain redirect

Input: "Implement the character health bar UI in code." Expected behavior:

  • Does NOT produce UI implementation code
  • Explicitly states that UI implementation belongs to ui-programmer (or unity-ui-specialist)
  • Redirects the request appropriately
  • Any part it keeps is the shader-driven effect only (e.g., a dissolve or fill gradient on the bar) — it writes no health-bar UI code

Case 3: HDRP custom pass for outline

Input: "We're on HDRP and want the outline as a post-process effect." Expected behavior:

  • Produces the HDRP custom pass pattern its own standards name: a C# class inheriting CustomPass, run from a Custom Pass Volume, drawing a full-screen edge-detection shader that samples the depth/normal buffers
  • Uses the HDRP overrides docs/engine-reference/unity/current-best-practices.md documents — Setup(ScriptableRenderContext, CommandBuffer), Execute(CustomPassContext ctx), Cleanup() — never URP's RecordRenderGraph, and marks any other HDRP member it uses (render-target helpers, CustomPassContext fields) unverified — nothing beyond those three is asserted from memory
  • Notes that CustomPass requires HDRP package and does not work in URP
  • Confirms the project is on HDRP before providing HDRP-specific code

Case 4: VFX Graph performance — particle budget

Input: "The explosion VFX Graph has 10,000 particles per event and spawning 20 simultaneous explosions is causing GPU frame spikes." Expected behavior:

  • Identifies GPU particle spawn as the cost driver (200,000 simultaneous particles)
  • Sets a particle capacity limit per effect and sizes it against the < 2ms total VFX GPU budget
  • Pools explosion VFX instances and triggers them through events, rather than creating a graph per explosion
  • Reduces cost for distant or off-screen explosions (particle LOD, bounds-based culling) and scales counts by quality tier
  • Avoids any fix that reads GPU particle data back to the CPU
  • Does NOT change the gameplay event system — proposes a VFX-side budgeting solution

Case 5: Context pass — render pipeline (URP or HDRP)

Input: Project context: URP render pipeline, targets PC and Nintendo Switch. Request: "Add depth of field post-processing." Expected behavior:

  • Uses URP Volume framework: a DepthOfField override in a Volume Profile, with script access through profile.TryGet<>() as docs/engine-reference/unity/modules/rendering.md shows
  • Does NOT use HDRP Volume components (e.g., HDRP's DepthOfField with different parameter names)
  • Places it on the Global Volume for the baseline look or a local Volume for an area, with priority and blend distance set
  • Gates the effect per platform and quality tier — reduced or disabled on Switch — and keeps post-processing inside its 1-2ms frame budget

Protocol Compliance

  • Stays within declared domain (Shader Graph, HLSL, VFX Graph, URP/HDRP customization)
  • Redirects gameplay and UI code to appropriate agents
  • Returns structured output (node graph descriptions, HLSL code, CustomPass patterns)
  • Distinguishes between URP and HDRP approaches — never cross-contaminates pipeline-specific APIs
  • Uses the RenderGraph API for custom URP passes, not the deprecated Execute / CommandBuffer path
  • Produces VFX optimizations that do not change gameplay behavior
  • Asks "May I write this to [filepath]?" naming the file before writing

Coverage Notes

  • Outline effect (Case 1) should be paired with a visual screenshot test in production/qa/evidence/
  • HDRP CustomPass (Case 3) confirms the agent produces the correct Unity pattern, not a generic post-process approach
  • Pipeline separation (Case 5) verifies the agent never assumes the render pipeline without context