## 1. Your prompt, rewritten > "Animate my attached bot (a white sphere with two slanted black capsule eyes) using as many FX (effects) techniques as possible. Draw from early gaming through modern real-time 3D, film, video and painting. Think like an animator, director, game developer and fine artist. First give me the full catalog, ordered by sequence. Then build one bot at a time as a live, interactive demo. Keep the character consistent across all demos. Pause after each one. Flag any technique that needs an external API before you use it."
## 2. What option 10 shows
The bot is a 192-triangle sphere with its eyes painted onto a texture. It sits among three wooden crates on a stone floor. The camera orbits.
Each checkbox switches one PS1 flaw on or off. Tap "Modern fix" to correct them all at once, then "PS1 look" to restore them.
| Flaw | What you'll see | Why the PS1 did it |
|---|---|---|
| Affine texture warp | Floor tiles zig-zag and bend along a diagonal | No per-pixel divide; textures were stretched in screen space |
| Vertex snapping | Edges shimmer and crawl as the camera moves | Screen positions were whole pixels only |
| 15-bit dither | Fine checker grain in the fog and shading | 32,768 colours, with a fixed 4×4 dither pattern hiding the banding |
| No depth buffer | Crates can pop in front of the bot at wrong moments | Triangles were sorted by average depth instead |
| Fog | Distance fades to blue-grey | Hid the short draw distance |
| Gouraud shading | Smooth light across faces (untick for faceted) | Lighting per corner, blended across the face |
## 3. Try these experiments
1. **Untick "Subdivided floor"** (the PS1 default here). The whole floor is just 2 triangles, so the warp is extreme. Tick it: 128 smaller triangles hide most of the warping. Real PS1 developers split floors like this for exactly that reason.
2. **Drag camera distance to 3.2.** Warp and wobble grow as you get closer.
3. **Watch the eyes.** They're on the texture, so affine warp bends them slightly as the bot turns.
4. **Untick only "Vertex snapping."** The shimmer stops but the texture warp stays. The two flaws have separate causes.
## 4. Less obvious details
- **The blob shadow is period-accurate.** PS1 games rarely had real shadows. A dark disc under the character gave depth for almost no cost.
- **Blinking swaps textures.** The model never changes. The engine swaps between two 128×64 textures, one with open eyes and one with slits. Many PS1 characters had rigid faces for the same reason.
- **The dither pattern is the real one.** The same 4×4 offset matrix the hardware used, applied before rounding each channel to 5 bits.
- **Clipping is the one thing I fixed.** Triangles crossing the camera's near plane get cut properly here. On the PS1 they often vanished or tore when you got too close to a wall.
## Examples
**Affine vs perspective-correct**
```
affine (PS1): u = w0·u0 + w1·u1 + w2·u2 ← linear on screen
perspective: u = Σ(w·u/z) ÷ Σ(w/z) ← divide per pixel
one extra divide per pixel = too slow in 1994
```
**Frame pipeline**
```
mesh → scale/rotate → light per vertex → view space
→ clip near plane → project (round to pixel if snap)
→ sort by depth (or depth buffer) → rasterize
→ texture (affine?) × light → fog → 4×4 dither → 5-bit per channel
```
**Floor subdivision**
```
1 quad = 2 tris 8×8 grid = 128 tris
┌───────────┐ ┌─┬─┬─┬─┐
│ ╱ │ warp is ├─┼─┼─┼─┤ each piece warps
│ ╱ │ one big ├─┼─┼─┼─┤ a little → errors
│ ╱ │ bend └─┴─┴─┴─┘ stay tiny
└───────────┘
```
Stack mention: option 10 does not name an implementation (SVG, canvas, three.js, etc.) in the original Claude writeup.
C. 32-bit / retro 3D