{ "format": "shader-studio/v3", "kind": "shader", "exportedAt": "2026-10-06T00:00:00.000Z", "shader": { "id": "first-shader", "name": "First Shader", "description": "Animated blue-to-orange bands. Companion project for the Shadergrove first-shader tutorial.", "author": "Shadergrove", "controls": [ { "key": "speed", "type": "number", "label": "Speed", "default": 1, "min": 0, "max": 3, "step": 0.05 } ], "render": { "postProcessing": { "enabled": false, "effects": [] } }, "fragment": "precision highp float;\n\nuniform vec2 iResolution;\nuniform float iTime;\nuniform float u_speed;\n\nvarying vec2 vUv;\n\nvoid main() {\n vec2 uv = vUv;\n uv.x *= iResolution.x / iResolution.y;\n\n float wave = 0.5 + 0.5 * sin(uv.x * 8.0 + iTime * u_speed);\n vec3 blue = vec3(0.08, 0.20, 0.55);\n vec3 orange = vec3(1.0, 0.45, 0.12);\n\n gl_FragColor = vec4(mix(blue, orange, wave), 1.0);\n}\n", "vertex": "varying vec2 vUv;\n\nvoid main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n", "presets": [ { "id": "calm", "name": "Calm", "createdAt": "2026-10-06T00:00:00.000Z", "values": { "speed": 0.4 } }, { "id": "fast", "name": "Fast", "createdAt": "2026-10-06T00:00:00.000Z", "values": { "speed": 2 } } ] } }