// browser-native physics
Real-time 3D physics, cloth simulation, GLSL shaders, and scripting. A creative studio that runs in a tab — no install, no signup.
// capabilities
// cloth
Verlet integration with pins, wind, and tear thresholds.
// physics
objects.forEach(obj => {|// scripting
// fragment.glsl
Write fragment and vertex shaders. Every keystroke updates the surface.
One-link sharing. Fork any scene.
// edit it
Write shaders and build geometry with code. Drag to orbit, tweak sliders, and see changes instantly.
uniform float u_time; uniform float u_scanSpeed; uniform float u_rainbowScale; varying vec2 vUv; varying vec3 vNormal; varying vec3 vPosition; varying vec3 vViewDir; vec3 hsv2rgb(vec3 c) { vec4 K = vec4(1.0, 2.0/3.0, 1.0/3.0, 3.0); vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); } void main() { float fresnel = pow(1.0 - max(dot(vNormal, vViewDir), 0.0), 3.0); float hue = fract(vUv.y * u_rainbowScale + u_time * 0.2 + fresnel * 0.5); vec3 rainbow = hsv2rgb(vec3(hue, 0.8, 1.0)); float scanline = sin(vUv.y * 80.0 + u_time * u_scanSpeed) * 0.5 + 0.5; scanline = smoothstep(0.3, 0.7, scanline) * 0.15; vec3 color = mix(rainbow * 0.6, vec3(1.0), fresnel * 0.7) + scanline; gl_FragColor = vec4(color, 1.0); }
// pricing
The studio is free forever. Pay when you need cloud saves, privacy, or team features.
The full studio, forever.
For artists, indie devs, and people building portfolios.
or $79/year (save 27%)
For teams, classrooms, and research groups.
or $249/year (save 28%)