isda's ocean in three.js · FFT swell · caustics · light shafts
Four dive-site scenes on the ocean from the isda project: a JONSWAP swell on FFT cascades, water that takes the red out of the light first, and caustics and light shafts made by the same waves. Seven freedivers from four pipelines are in the water.
Fin studio · Mootion bot, Nov 2023
The 2023 Mootion bot, re-rigged in Blender with four freediving fins. Each blade has its own bone chain, so it bends with the kick. Swap fins and scrub the stroke here, then switch to Dive and take it down the line.
Seven freedivers, four pipelines
Rigged figures from the Fin Lab, the isda game, a MakeHuman freediver and a Hunyuan 2 generation. All of them run in the ocean above on their own clips, aligned to one swimming frame from their own hips, head and thigh bones.
May 2025 · Hunyuan 2 · thereceegoes
An image-to-3D model made with Hunyuan 2 in May 2025 from the thereceegoes photo, then rigged with a Mixamo skeleton. The long white bi-fins are part of the generated mesh and follow the shin and foot bones, so the kick here is procedural. The hips and knees swing about the hip line, with the legs in antiphase.
All four fins share the diver's skeleton. Pockets are weighted rigidly to the foot and the blade blends along its own chain. The numbers below are the modelled geometry, plus the kick values the dive uses. Click a row to load that fin.
| Fin | Blade length | Span | Blade angle | Chain | Kick | Rate | Thrust | O₂ while kicking |
|---|
Cycles stills and EEVEE loops rendered straight from the same file the GLB is exported from. The water is a volume box with a caustic-textured spot light above it.
Screenshots of the Blender 5.2 UI with the scene set up by viewport_shots.py. Fin chains use their own bone colours, and the weight paint shows how one chain bone's influence fades along the blade.
A long blade can't follow the foot rigidly. Its tip trails behind the kick and snaps through at the turn of each stroke. So each blade gets a chain, and the kick drives the chain with the foot's velocity, delayed a little more at each bone.
Foot_L / Foot_R and rolled so local X bends the blade.