S

shader-dev

by @minimax-aiv1.0.0
3.8(8)

统一的 GLSL 着色器开发技能,覆盖 36 种 ShaderToy 兼容技术,用于实时视觉特效创建

game-developmentgraphicsshadersglslvisual-effectsGitHub
安装方式
npx skills add minimax-ai/skills --skill shader-dev
compare_arrows

Before / After 效果对比

1
使用前

手动编写 GLSL 着色器代码需要深入理解数学和图形学知识,调试复杂效果需要反复试验。一个光线追踪场景可能需要数天开发,常见技术如软阴影和景深难以快速实现。

使用后

自然语言描述即可生成完整着色器代码,涵盖光线追踪、软阴影、体渲染等 36 种技术。自动处理数学计算和优化,调试实时预览,复杂视觉效果从数天缩短至数小时。

description SKILL.md

shader-dev

Shader Craft

A unified skill covering 36 GLSL shader techniques (ShaderToy-compatible) for real-time visual effects.

Invocation

/shader-dev <request>

$ARGUMENTS contains the user's request (e.g. "create a raymarched SDF scene with soft shadows").

Skill Structure

shader-dev/
├── SKILL.md                      # Core skill (this file)
├── techniques/                   # Implementation guides (read per routing table)
│   ├── ray-marching.md           # Sphere tracing with SDF
│   ├── sdf-3d.md                 # 3D signed distance functions
│   ├── lighting-model.md         # PBR, Phong, toon shading
│   ├── procedural-noise.md       # Perlin, Simplex, FBM
│   └── ...                       # 34 more technique files
└── reference/                    # Detailed guides (read as needed)
    ├── ray-marching.md           # Math derivations & advanced patterns
    ├── sdf-3d.md                 # Extended SDF theory
    ├── lighting-model.md         # Lighting math deep-dive
    ├── procedural-noise.md       # Noise function theory
    └── ...                       # 34 more reference files

How to Use

  • Read the Technique Routing Table below to identify which technique(s) match the user's request

  • Read the relevant file(s) from techniques/ — each file contains core principles, implementation steps, and complete code templates

  • If you need deeper understanding (math derivations, advanced patterns), follow the reference link at the bottom of each technique file to reference/

  • Apply the WebGL2 Adaptation Rules below when generating standalone HTML pages

Technique Routing Table

User wants to create... Primary technique Combine with

3D objects / scenes from math ray-marching + sdf-3d lighting-model, shadow-techniques

Complex 3D shapes (booleans, blends) csg-boolean-operations sdf-3d, ray-marching

Infinite repeating patterns in 3D domain-repetition sdf-3d, ray-marching

Organic / warped shapes domain-warping procedural-noise

Fluid / smoke / ink effects fluid-simulation multipass-buffer

Particle effects (fire, sparks, snow) particle-system procedural-noise, color-palette

Physically-based simulations simulation-physics multipass-buffer

Game of Life / reaction-diffusion cellular-automata multipass-buffer, color-palette

Ocean / water surface water-ocean atmospheric-scattering, lighting-model

Terrain / landscape terrain-rendering atmospheric-scattering, procedural-noise

Clouds / fog / volumetric fire volumetric-rendering procedural-noise, atmospheric-scattering

Sky / sunset / atmosphere atmospheric-scattering volumetric-rendering

Realistic lighting (PBR, Phong) lighting-model shadow-techniques, ambient-occlusion

Shadows (soft / hard) shadow-techniques lighting-model

Ambient occlusion ambient-occlusion lighting-model, normal-estimation

Path tracing / global illumination path-tracing-gi analytic-ray-tracing, multipass-buffer

Precise ray-geometry intersections analytic-ray-tracing lighting-model

Voxel worlds (Minecraft-style) voxel-rendering lighting-model, shadow-techniques

Noise / FBM textures procedural-noise domain-warping

Tiled 2D patterns procedural-2d-pattern polar-uv-manipulation

Voronoi / cell patterns voronoi-cellular-noise color-palette

Fractals (Mandelbrot, Julia, 3D) fractal-rendering color-palette, polar-uv-manipulation

Color grading / palettes color-palette

Bloom / tone mapping / glitch post-processing multipass-buffer

Multi-pass ping-pong buffers multipass-buffer

Texture / sampling techniques texture-sampling

Camera / matrix transforms matrix-transform

Surface normals normal-estimation

Polar coords / kaleidoscope polar-uv-manipulation procedural-2d-pattern

2D shapes / UI from SDF sdf-2d color-palette

Procedural audio / music sound-synthesis

SDF tricks / optimization sdf-tricks sdf-3d, ray-marching

Anti-aliased rendering anti-aliasing sdf-2d, post-processing

Depth of field / motion blur / lens effects camera-effects post-processing, multipass-buffer

Advanced texture mapping / no-tile textures texture-mapping-advanced terrain-rendering, texture-sampling

WebGL2 shader errors / debugging webgl-pitfalls

Technique Index

Geometry & SDF

  • sdf-2d — 2D signed distance functions for shapes, UI, anti-aliased rendering

  • sdf-3d — 3D signed distance functions for real-time implicit surface modeling

  • csg-boolean-operations — Constructive solid geometry: union, subtraction, intersection with smooth blending

  • domain-repetition — Infinite space repetition, folding, and limited tiling

  • domain-warping — Distort domains with noise for organic, flowing shapes

  • sdf-tricks — SDF optimization, bounding volumes, binary search refinement, hollowing, layered edges, debug visualization

Ray Casting & Lighting

  • ray-marching — Sphere tracing with SDF for 3D scene rendering

  • analytic-ray-tracing — Closed-form ray-primitive intersections (sphere, plane, box, torus)

  • path-tracing-gi — Monte Carlo path tracing for photorealistic global illumination

  • lighting-model — Phong, Blinn-Phong, PBR (Cook-Torrance), and toon shading

  • shadow-techniques — Hard shadows, soft shadows (penumbra estimation), cascade shadows

  • ambient-occlusion — SDF-based AO, screen-space AO approximation

  • normal-estimation — Finite-difference normals, tetrahedron technique

Simulation & Physics

  • fluid-simulation — Navier-Stokes fluid solver with advection, diffusion, pressure projection

  • simulation-physics — GPU-based physics: springs, cloth, N-body gravity, collision

  • particle-system — Stateless and stateful particle systems (fire, rain, sparks, galaxies)

  • cellular-automata — Game of Life, reaction-diffusion (Turing patterns), sand simulation

Natural Phenomena

  • water-ocean — Gerstner waves, FFT ocean, caustics, underwater fog

  • terrain-rendering — Heightfield ray marching, FBM terrain, erosion

  • atmospheric-scattering — Rayleigh/Mie scattering, god rays, SSS approximation

  • volumetric-rendering — Volume ray marching for clouds, fog, fire, explosions

Procedural Generation

  • procedural-noise — Value noise, Perlin, Simplex, Worley, FBM, ridged noise

  • procedural-2d-pattern — Brick, hexagon, truchet, Islamic geometric patterns

  • voronoi-cellular-noise — Voronoi diagrams, Worley noise, cracked earth, crystal

  • fractal-rendering — Mandelbrot, Julia sets, 3D fractals (Mandelbox, Mandelbulb)

  • color-palette — Cosine palettes, HSL/HSV/Oklab, dynamic color mapping

Post-Processing & Infrastructure

  • post-processing — Bloom, tone mapping (ACES, Reinhard), vignette, chromatic aberration, glitch

  • multipass-buffer — Ping-pong FBO setup, state persistence across frames

  • texture-sampling — Bilinear, bicubic, mipmap, procedural texture lookup

  • matrix-transform — Camera look-at, projection, rotation, orbit controls

  • polar-uv-manipulation — Polar/log-polar coordinates, kaleidoscope, spiral mapping

  • anti-aliasing — SSAA, SDF analytical AA, temporal anti-aliasing (TAA), FXAA post-process

  • camera-effects — Depth of field (thin lens), motion blur, lens distortion, film grain, vignette

  • texture-mapping-advanced — Biplanar mapping, texture repetition avoidance, ray differential filtering

Audio

  • sound-synthesis — Procedural audio in GLSL: oscillators, envelopes, filters, FM synthesis

Debugging & Validation

  • webgl-pitfalls — Common WebGL2/GLSL errors: fragCoord, main() wrapper, function order, macro limitations, uniform null

WebGL2 Adaptation Rules

All technique files use ShaderToy GLSL style. When generating standalone HTML pages, apply these adaptations:

Shader Version & Output

  • Use canvas.getContext("webgl2")

  • Shader first line: #version 300 es, fragment shader adds precision highp float;

  • Fragment shader must declare: out vec4 fragColor;

  • Vertex shader: attributein, varyingout

  • Fragment shader: varyingin, gl_FragColorfragColor, texture2D()texture()

Fragment Coordinate

  • Use gl_FragCoord.xy instead of fragCoord (WebGL2 does not have fragCoord built-in)
// WRONG
vec2 uv = (2.0 * fragCoord - iResolution.xy) / iResolution.y;
// CORRECT
vec2 uv = (2.0 * gl_FragCoord.xy - iResolution.xy) / iResolution.y;

main() Wrapper for ShaderToy Templates

  • ShaderToy uses void mainImage(out vec4 fragColor, in vec2 fragCoord)

  • WebGL2 requires standard void main() entry point — always wrap mainImage:

void mainImage(out vec4 fragColor, in vec2 fragCoord) {
    // shader code...
    fragColor = vec4(col, 1.0);
}

void main() {
    mainImage(fragColor, gl_FragCoord.xy);
}

Function Declaration Order

  • GLSL requires functions to be declared before use — either declare before use or reorder:
// WRONG — getAtmosphere() calls getSunDirection() before it's defined
vec3 getAtmosphere(vec3 dir) { return getSunDirection(); } // Error!
vec3 getSunDirection() { return normalize(vec3(1.0)); }

// CORRECT — define callee first
vec3 getSunDirection() { return normalize(vec3(1.0)); }
vec3 getAtmosphere(vec3 dir) { return getSunDirection(); } // Works

Macro Limitations

  • #define cannot use function calls — use const instead:
// WRONG
#define SUN_DIR normalize(vec3(0.8, 0.4, -0.6))

// CORRECT
const vec3 SUN_DIR = vec3(0.756, 0.378, -0.567); // Pre-computed normalized value

Script Tag Extraction

  • When extracting shader source from <script> tags, ensure #version is the first character — use .trim():
const fs = document.getElementById('fs').text.trim();

Common Pitfalls

  • Unused uniforms: Compiler may optimize away unused uniforms, causing gl.getUniformLocation() to return null — always use uniforms in a way the compiler cannot optimize out

  • Loop indices: Use runtime constants in loops, not #define macros in some ES versions

  • Terrain functions: Functions like terrainM(vec2) need XZ components — use terrainM(pos.xz + offset) not terrainM(pos + offset)

HTML Page Setup

When generating a standalone HTML page:

  • Canvas fills the entire viewport, auto-resizes on window resize

  • Page background black, no scrollbars: body { margin: 0; overflow: hidden; background: #000; }

  • Implement ShaderToy-compatible uniforms: iTime, iResolution, iMouse, iFrame

  • For multi-pass effects (Buffer A/B), use WebGL2 framebuffer + ping-pong (see multipass-buffer technique)

Common Pitfalls

JS Variable Declaration Order (TDZ — causes white screen crash)

let/const variables must be declared at the top of the <script> block, before any function that references them:

// 1. State variables FIRST
let frameCount = 0;
let startTime = Date.now();

// 2. Canvas/GL init, shader compile, FBO creation
const canvas = document.getElementById('canvas');
const gl = canvas.getContext('webgl2');
// ...

// 3. Functions and event bindings LAST
function resize() { /* can now safely reference frameCount */ }
function render() { /* ... */ }
window.addEventListener('resize', resize);

Reason: let/const have a Temporal Dead Zone — referencing them before declaration throws ReferenceError, causing a white screen.

GLSL Compilation Errors (self-check after writing shaders)

  • Function signature mismatch: Call must exactly match definition in parameter count and types. If defined as float fbm(vec3 p), cannot call fbm(uv) with a vec2

  • Reserved words as variable names: Do not use: patch, cast, sample, filter, input, output, common, partition, active

  • Strict type matching: vec3 x = 1.0 is illegal — use vec3 x = vec3(1.0); cannot use .z to access a vec2

  • No ternary on structs: ESSL does not allow ternary operator on struct types — use if/else instead

Performance Budget

Deployment environments may use headless software rendering with limited GPU power. Stay within these limits:

  • Ray marching main loop: ≤ 128 steps

  • Volume sampling / lighting inner loops: ≤ 32 steps

  • FBM octaves: ≤ 6 layers

  • Total nested loop iterations per pixel: ≤ 1000 (exceeding this freezes the browser)

Quick Recipes

Common effect combinations — complete rendering pipelines assembled from technique modules.

Photorealistic SDF Scene

  • Geometry: sdf-3d (extended primitives) + csg-boolean-operations (cubic/quartic smin)

  • Rendering: ray-marching + normal-estimation (tetrahedron method)

  • Lighting: lighting-model (outdoor three-light model) + shadow-techniques (improved soft shadow) + ambient-occlusion

  • Atmosphere: atmospheric-scattering (height-based fog with sun tint)

  • Post: post-processing (ACES tone mapping) + anti-aliasing (2x SSAA) + camera-effects (vignette)

Organic / Biological Forms

  • Geometry: sdf-3d (extended primitives + deformation operators: twist, bend) + csg-boolean (gradient-aware smin for material blending)

  • Detail: procedural-noise (FBM with derivatives) + domain-warping

  • Surface: lighting-model (subsurface scattering approximation via half-Lambert)

Procedural Landscape

  • Terrain: terrain-rendering + procedural-noise (erosion FBM with derivatives)

  • Texturing: texture-mapping-advanced (biplanar mapping + no-tile)

  • Sky: atmospheric-scattering (Rayleigh/Mie + height fog)

  • Water: water-ocean (Gerstner waves) + lighting-model (Fresnel reflections)

Stylized 2D Art

  • Shapes: sdf-2d (extended library) + sdf-tricks (layered edges, hollowing)

  • Color: color-palette (cosine palettes) + polar-uv-manipulation (kaleidoscope)

  • Polish: anti-aliasing (SDF analytical AA) + post-processing (bloom, chromatic aberration)

Shader Debugging Techniques

Visual debugging methods — temporarily replace your output to diagnose issues.

What to check Code What to look for

Surface normals col = nor * 0.5 + 0.5; Smooth gradients = correct normals; banding = epsilon too large

Ray march step count col = vec3(float(steps) / float(MAX_STEPS)); Red hotspots = performance bottleneck; uniform = wasted iterations

Depth / distance col = vec3(t / MAX_DIST); Verify correct hit distances

UV coordinates col = vec3(uv, 0.0); Check coordinate mapping

SDF distance field col = (d > 0.0 ? vec3(0.9,0.6,0.3) : vec3(0.4,0.7,0.85)) * (0.8 + 0.2*cos(150.0*d)); Visualize SDF bands and zero-crossing

Checker pattern (UV) col = vec3(mod(floor(uv.x*10.)+floor(uv.y*10.), 2.0)); Verify UV distortion, seams

Lighting only col = vec3(shadow); or col = vec3(ao); Isolate shadow/AO contributions

Material ID col = palette(matId / maxMatId); Verify material assignment

Weekly Installs304Repositoryminimax-ai/skillsGitHub Stars7.3KFirst Seen11 days agoSecurity AuditsGen Agent Trust HubPassSocketPassSnykPassInstalled onopencode297codex293cursor292gemini-cli291github-copilot291kimi-cli289

forum用户评价 (0)

发表评价

效果
易用性
文档
兼容性

暂无评价,来写第一条吧

统计数据

安装量200
评分3.8 / 5.0
版本1.0.0
更新日期2026年3月30日
对比案例1 组

用户评分

3.8(8)
5
0%
4
0%
3
0%
2
0%
1
0%

为此 Skill 评分

0.0

兼容平台

🔧Claude Code

时间线

创建2026年3月30日
最后更新2026年3月30日