Generate Rocaille-style domain warping shaders with sinusoidal displacement. This skill should be used when building WebGL/GLSL visualizations, shader art, procedural backgrounds, or adding organic swirling light effects. Creates characteristic flowing patterns through iterative coordinate warping using the formula v += sin(v.yx + t) / amplitude.
Resources
3Install
npx skillscat add tdimino/claude-code-minoan/rocaille-shader Install via the SkillsCat registry.
We need to produce a 2-3 sentence plain-text summary, objective, factual, no marketing language, no superlatives, no calls to action. Must be natural prose, no bullet points, no headings, no markdown. At most 60 words. Provide only the summary text. We need to explain what the skill does, what problem it solves, when to use it. From description: skill generates Rocaille-style domain warping shaders with sinusoidal displacement, used for WebGL/GLSL visualizations, shader art, procedural backgrounds, organic swirling light effects.
Rocaille Shader Skill
Generate organic, swirling light effects through progressive domain warping - a technique that creates increasingly complex patterns by iteratively displacing coordinates using sinusoidal functions.
Core Technique
The Rocaille effect builds complexity through repeated application of:
v += sin(v.yx + t) / amplitude;Where:
vis a 2D coordinate vectorv.yxswaps x/y components creating characteristic swirltis time for animationamplitudecontrols warp intensity (1.0 = strong, 4.0 = subtle)- Each iteration adds more organic complexity
Quick Reference
| Warps | Effect | Use Case |
|---|---|---|
| 1-2 | Subtle wave | Backgrounds, subtle motion |
| 3-5 | Organic flow | Music visualizers, hero sections |
| 6-9 | Complex swirl | Psychedelic effects, main attraction |
| 10+ | Chaotic | Experimental, glitch art |
Usage
To generate a shader, specify:
- Warp count (1-15): Number of displacement iterations
- Color mode:
basic,rainbow,monochrome,neon, or custom RGB - Output format:
shadertoy,threejs,webgl,p5js
Generate Custom Shader
Run the generator script:
python3 scripts/rocaille_generator.py --warps 5 --color rainbow --format shadertoyOptions:
--warps N- Number of warp iterations (default: 5)--color MODE- Color mode: basic, rainbow, monochrome, neon (default: rainbow)--format FMT- Output format: shadertoy, threejs, webgl, p5js, all (default: shadertoy)--amplitude N- Warp intensity divisor (default: 2.0)--speed N- Animation speed multiplier (default: 1.0)--demo- Generate interactive HTML demo page
Asset Templates
Pre-built templates available in assets/templates/:
| Template | Description |
|---|---|
shadertoy.glsl |
Shadertoy-compatible fragment shader |
threejs.js |
Three.js ShaderMaterial with uniforms |
vanilla-webgl.html |
Pure WebGL2, no dependencies |
p5js.js |
P5.js shader mode integration |
interactive.html |
Full demo with controls |
Implementation Patterns
Minimal Shadertoy
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = (fragCoord - 0.5 * iResolution.xy) / iResolution.y;
vec2 v = uv;
for(int i = 0; i < 5; i++) {
v += sin(v.yx + iTime) / 2.0;
}
float d = 1.0 / length(v);
fragColor = vec4(vec3(d * 0.1), 1.0);
}Three.js Integration
const material = new THREE.ShaderMaterial({
uniforms: {
uTime: { value: 0 },
uWarpCount: { value: 5 },
uAmplitude: { value: 2.0 }
},
vertexShader: vertexCode,
fragmentShader: fragmentCode
});
// In animation loop
material.uniforms.uTime.value = performance.now() / 1000;Customization
Base Shape Variations
Replace 1.0 / length(v) with:
length(v)- Inverted (dark center)sin(length(v) * 10.0)- Ripple ringsabs(v.x) + abs(v.y)- Diamond shapemax(abs(v.x), abs(v.y))- Square shape
Color Mapping
// Rainbow based on angle
vec3 color = 0.5 + 0.5 * cos(atan(v.y, v.x) + vec3(0, 2, 4));
// Neon glow
vec3 color = vec3(d * 0.2, d * 0.05, d * 0.3);
// Temperature gradient
vec3 color = mix(vec3(0.1, 0.2, 0.8), vec3(1.0, 0.3, 0.1), d);Reference Documentation
For deeper understanding:
references/rocaille-complete.md- Full 8-step shader breakdownreferences/domain-warping.md- Theory from Inigo Quilezreferences/glsl-patterns.md- Common GLSL patterns used
Combining Effects
Layer with other techniques:
- Bloom: Apply gaussian blur to bright areas
- Grain: Add
fract(sin(dot(uv, vec2(12.9898, 78.233))) * 43758.5453) - Vignette: Multiply by
1.0 - length(uv) * 0.5 - Chromatic aberration: Sample RGB at slightly offset UVs