What problem does it solve? Writing custom shaders in Three.js is error-prone: bare uniform values silently fail, redeclaring built-in uniforms causes GLSL compilation errors, and missing customProgramCacheKey makes onBeforeCompile patches disappear. This Skill provides the correct syntax patterns, uniform formats, and anti-patterns to avoid these failures. ## Core Features & Use Cases - ShaderMaterial and RawShaderMaterial guidance: Covers constructor parameters, built-in uniforms and attributes, precision requirements, and when to use each material type. - Uniform and define management: Documents the { value: ... } wrapper format, GLSL-to-JavaScript type mapping, mutation-based updates, and needsUpdate rules for defines. - onBeforeCompile patching: Shows how to modify built-in materials like MeshStandardMaterial while preserving PBR lighting, including customProgramCacheKey requirements. - Use Case: You want to add a wave vertex displacement to a MeshStandardMaterial. The Skill provides the exact onBeforeCompile pattern, cache key override, and null-checked uniform update loop to make it work on the first try. ## Quick Start Write a Three.js ShaderMaterial with a time uniform and a fragment shader that animates color based on UV coordinates.