Claude-skill-registry graphics-rendering
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/graphics-rendering" ~/.claude/skills/majiayu000-claude-skill-registry-graphics-rendering && rm -rf "$T"
manifest:
skills/data/graphics-rendering/SKILL.mdsource content
Graphics & Rendering
Rendering Pipeline
┌─────────────────────────────────────────────────────────────┐ │ RENDERING PIPELINE │ ├─────────────────────────────────────────────────────────────┤ │ VERTEX STAGE: │ │ Model Space → World Space → View Space → Clip Space │ │ ↓ │ │ RASTERIZATION: Triangles → Fragments │ │ ↓ │ │ FRAGMENT STAGE: Color, Lighting, Texturing │ │ ↓ │ │ OUTPUT: Final pixel color to framebuffer │ └─────────────────────────────────────────────────────────────┘
Shader Programming
Standard PBR Shader (HLSL)
// ✅ Production-Ready: PBR Surface Shader struct SurfaceData { float3 Albedo; float3 Normal; float Metallic; float Roughness; float AO; }; float3 FresnelSchlick(float cosTheta, float3 F0) { return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0); } float DistributionGGX(float3 N, float3 H, float roughness) { float a = roughness * roughness; float a2 = a * a; float NdotH = max(dot(N, H), 0.0); float NdotH2 = NdotH * NdotH; float denom = (NdotH2 * (a2 - 1.0) + 1.0); return a2 / (PI * denom * denom); } float4 PBRLighting(SurfaceData surface, float3 viewDir, float3 lightDir) { float3 H = normalize(viewDir + lightDir); float3 F0 = lerp(0.04, surface.Albedo, surface.Metallic); float D = DistributionGGX(surface.Normal, H, surface.Roughness); float3 F = FresnelSchlick(max(dot(H, viewDir), 0.0), F0); float3 diffuse = surface.Albedo * (1.0 - surface.Metallic); float3 specular = D * F; return float4((diffuse + specular) * surface.AO, 1.0); }
Toon/Cel Shader
// ✅ Production-Ready: Toon Shader float4 ToonShading(float3 normal, float3 lightDir, float4 baseColor) { float NdotL = dot(normal, lightDir); // Step function for cel shading float toonRamp; if (NdotL > 0.7) toonRamp = 1.0; else if (NdotL > 0.3) toonRamp = 0.6; else if (NdotL > 0.0) toonRamp = 0.3; else toonRamp = 0.1; return baseColor * toonRamp; } // Outline pass (inverted hull method) float4 OutlineVertex(float4 position, float3 normal, float outlineWidth) { position.xyz += normal * outlineWidth; return position; }
Visual Effects (VFX)
Particle System Setup
PARTICLE SYSTEM ARCHITECTURE: ┌─────────────────────────────────────────────────────────────┐ │ EMITTER: Rate, Bursts, Shape │ │ ↓ │ │ SPAWN: Initial velocity, Size, Color, Lifetime │ │ ↓ │ │ UPDATE: Forces, Collisions, Color over life │ │ ↓ │ │ RENDER: Billboard, Mesh, Trail │ └─────────────────────────────────────────────────────────────┘ COMMON VFX RECIPES: ┌────────────────┬────────────────────────────────────────────┐ │ Fire │ Orange→Yellow gradient, upward velocity │ │ Smoke │ Gray billboards, turbulence noise │ │ Sparks │ Point emitter, gravity, short lifetime │ │ Magic │ Spiral path, glow, color cycling │ │ Blood │ Burst, gravity, decal on collision │ └────────────────┴────────────────────────────────────────────┘
Optimization Techniques
| Technique | Draw Call Reduction | When to Use |
|---|---|---|
| Static Batching | 90%+ | Static geometry |
| Dynamic Batching | 50-80% | Small moving objects |
| GPU Instancing | 95%+ | Many identical objects |
| LOD System | 40-60% | Distant objects |
| Occlusion Culling | 30-70% | Indoor scenes |
LOD Configuration
LOD DISTANCE SETUP: ┌─────────────────────────────────────────────────────────────┐ │ LOD0 (100% tris): 0-20m → Full detail │ │ LOD1 (50% tris): 20-50m → Reduced detail │ │ LOD2 (25% tris): 50-100m → Low detail │ │ LOD3 (10% tris): 100m+ → Billboard/Impostor │ └─────────────────────────────────────────────────────────────┘
🔧 Troubleshooting
┌─────────────────────────────────────────────────────────────┐ │ PROBLEM: Too many draw calls (>2000) │ ├─────────────────────────────────────────────────────────────┤ │ SOLUTIONS: │ │ → Enable GPU instancing for repeated objects │ │ → Use texture atlases │ │ → Merge static meshes │ │ → Implement LOD system │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ PROBLEM: Shader artifacts / visual glitches │ ├─────────────────────────────────────────────────────────────┤ │ SOLUTIONS: │ │ → Check for division by zero │ │ → Validate normal vectors │ │ → Use saturate() on color outputs │ │ → Check texture sampling modes │ └─────────────────────────────────────────────────────────────┘
Platform Guidelines
| Platform | Max Draw Calls | Shader Complexity | Texture Size |
|---|---|---|---|
| Mobile | 100-200 | Low | 1024px max |
| Console | 2000-3000 | High | 4096px |
| PC | 3000-5000 | Very High | 8192px |
| VR | 100-150 | Low | 2048px |
Use this skill: When creating shaders, optimizing visuals, or implementing effects.