Polyforge — Browser 3D Modeling Studio
A from-scratch 3D studio in the browser (Three.js + React UMD, no build step) recreating Ian Hubert's Lazy Tutorials step by step.
A browser-native 3D modeling studio that runs entirely without build tooling, using Three.js for rendering and React UMD for the UI. The app is being developed specifically to recreate all 22 of Ian Hubert's Lazy Tutorials—an open-ended feature roadmap that grows the toolset as each tutorial demands.
- Three.js r128
- React 18 UMD
- Babel Standalone
- JavaScript
- JSX
- WebGL
- CSS3
- Bootstrap Storage
Polyforge is a from-scratch 3D studio that runs in the browser with zero setup: just open Polyforge.html and a local HTTP server. It loads Three.js r128, React 18, and Babel standalone from CDNs, keeping the entire app in plain script tags and JSX files with no bundler or install step. The state lives in a single Store (scene objects, modifiers, undo stack, animation tracks, localStorage autosave); geometry is always indexed and triangulated for consistent topology and UV handling across every edit operation.
The app supports all the fundamentals: object mode with gizmos and transform modals, edit mode with vertex/face selection and proportional editing (including a connected/geodesic mode), multi-loop cuts, UV island editing with image textures, sculpting with dyntopo, modifiers (boolean CSG, mirror, array, bevel, subdiv), keyed animation, camera and lighting (including area lights), and scene save/load as JSON or OBJ export. Notably, Project From View (with bounds) and Gloss Mix/Roughness (a clearcoat lobe mix) are implemented.
The real mission: recreate all 22 of Ian Hubert's Lazy Tutorials inside Polyforge—following each tutorial step by step, capturing reference stills from the videos, and growing whatever tools are needed. Currently 1 of 22 is complete (Making Fliers: bulletin board with 11 slightly-bent planes, UV-mapped, glossy paper, area-lit through a camera). PROGRESS.md tracks the full inventory and per-tutorial write-ups.
- No build step: plain HTML + script tags; loads Three.js, React, Babel from CDN; serve via Python http.server
- Edit mode includes proportional editing with Sharp/Smooth falloffs and Connected (geodesic) mode for island-aware edits; multi-loop-cut with digit count; Project From View (Bounds)
- UV editor as a split panel: island select-linked, G/R/S modals with live 3D feedback, exact-rect placement for atlas packing
- Sculpting with dyntopo + X-symmetry, draw/inflate/smooth/grab/flatten/pinch brushes
- Modifiers system: boolean (BSP CSG), mirror, array, radial, bevel, subdivision, solidify, smooth, displace, twist; scene-wide undo handles all ops