Build guide · Experiment 09
FORMA is a fictional gallery of generative sculpture. The brief was to show the heavy end of the graphics range: real 3D, physically based materials, and reflections that move. Everything on the stage is live WebGL through three.js. There are no rendered images and no video, just geometry, light, and a baked studio environment.
Each of the six objects is a different way of turning math into a body you can walk around.
TorusKnotGeometry with high tube resolution.CatmullRomCurve3, and skins it with a TubeGeometry.sin x·cos y + sin y·cos z + sin z·cos x across a grid and drops an instanced cube wherever
the surface passes through zero.// Aizawa attractor → a single sculptural ribbon
let x=0.1,y=0,z=0; const pts=[];
for (let i=0;i<5200;i++){
const dx=(z-0.7)*x - 3.5*y;
const dy=3.5*x + (z-0.7)*y;
const dz=0.6 + 0.95*z - z*z*z/3 - (x*x+y*y)*(1+0.25*z) + 0.1*z*x*x*x;
x+=dx*0.008; y+=dy*0.008; z+=dz*0.008;
if (i>300) pts.push(new THREE.Vector3(x*1.5, z*1.5-1.2, y*1.5));
}
const geo = new THREE.TubeGeometry(new THREE.CatmullRomCurve3(pts), 3000, 0.028, 14);
The same mesh can be recast in chrome, bronze, obsidian, or marble from the plaque. Each is a
MeshPhysicalMaterial tuned by metalness, roughness, and clearcoat. Because the material
is swapped live, one geometry becomes four completely different objects. Marble adds a sheen layer;
obsidian adds a clearcoat so it stays glassy even while nearly black.
The reflections are the whole trick. There is no HDR file to download: a RoomEnvironment
is rendered once into a PMREMGenerator, producing a pre-filtered environment map that every
surface samples. With ACESFilmicToneMapping and a spotlight key, a rim light, and a warm
fill, the chrome trefoil ends up reflecting a studio that was never modelled in full.
OrbitControls with damping let you walk around a piece; the
auto-rotate pauses while you drag and resumes after a couple of idle seconds.Live site: buloy.space/x/forma · All experiments: buloy.space/x