Photograph a toy. A few minutes later it stands on a lunar surface, hops six times higher than it could at home, and the dust it kicks up falls in clean arcs, because there's no air up there to hold it. You get a short film, a mission patch with its call sign, and one true number: how high it jumped, next to how high the same push would get it on Earth.
The question
Every kid has sent a toy somewhere impossible in their head. What if the trip were physically honest? Could a four-minute wait feel like a flight, and could “one-sixth gravity” become something you see a familiar object do, rather than a number you were told?
What we made
A mission pipeline that chains four kinds of model and one physics engine into a single moment:
- Segmentation (rembg, 2 s): the toy is cut from the photo. The original photo is deleted once the model exists.
- Photo to 3D (SAM 3D Objects, about 45 s): one image and its mask become a textured mesh.
- Simulation (Blender rigid bodies at 1.62 m/s²): the toy pushes off with the same velocity a small hop gives on Earth. Dust grains are emitted at the launch and fly as pure ballistics: zero drag, scene gravity, landing exactly on the surface.
- Render (Cycles on one GPU): a hard single sun 14° above the horizon, a black sky, the Earth 1.9° wide and low, a synthetic heightfield with stamped craters and a regolith normal map, a 35 mm lens on a slow push-in, and the faint 5×5 réseau crosses of Apollo Hasselblad film.
- Mission control: a countdown, a trans-lunar coast with the Earth shrinking, stage calls, and a voice that reads your call sign the way mission control does (“Rex one, you are go for lunar descent”), synthesized locally.
The card at the end shows the jump: 0.50 m on the Moon, 8 cm on Earth, from the same push-off (v² / 2g, with g = 1.62 and 9.81 m/s²).
What's physically true, and labeled
- Gravity 1.62 m/s². No atmosphere: ballistic dust, no scattering, hard shadows, a black sky.
- The Earth's apparent size from the Moon (about 1.9°) and its position relative to the sun.
- The jump heights are computed, not keyframed; the toy is a rigid body that falls back under lunar gravity and settles.
- The terrain is synthetic, the toy is an AI reconstruction of your photo, and the film says both.
What happened in testing
- The first flights launched the toy at 37 m/s. Blender scales the velocity inherited from an animated rigid body by the simulation's substep count; one substep per frame fixed it, and the remaining 12% offset is measured and compensated.
- Even then the toy kept accelerating after release. A six-way bisect of the scene (rocks, dust, Earth, normal map) pinned it on the terrain's particle Collision modifier, which corrupts rigid-body contact on the same object. The dust now collides with a hidden twin of the terrain.
- The first dust was a cloud of beach balls hanging a meter in the air and landing on an invisible plane 2 cm above the ground (the modifier's default outer thickness). Grains are now 3 mm, the spray is low, and they settle on the surface.
- Imported glTF materials arrived fully metallic, rendering the toy dark and tinted. They're set to plastic on import.
- Every physics fix was verified by a trajectory probe (position per frame, apex versus the analytic value) before anything was rendered.
What's next
A LOLA elevation tile at a named landing site instead of the synthetic heightfield; a second camera for a top-down “footprint” shot; Earth with real cloud data for the mission date.
Tools
rembg, SAM 3D Objects (served persistently inside a container so the model loads once), Blender 4.0 headless with Cycles on CUDA, ffmpeg, FastAPI, Kokoro TTS, Vite + TypeScript, Playwright for the end-to-end mission test. One box, no external APIs.