P-09 · BUILD / PROJECT · 2026 PROTOTYPE

3D Explore

A browser fantasy exploration game, and a repeatable pipeline for turning free 3D assets into a world.

STACK: Babylon.jsWebGPURapier3DTypeScriptZustand

What it is

A fantasy exploration game that runs in a browser: Babylon.js on WebGPU, Rapier3D for physics, Zustand holding game state. Open world, quests, inventory, combat, and a cast of NPCs who talk back.

The game is the visible part. The reason I built it is the pipeline underneath.

The actual project

Solo 3D development dies on assets. You can write the systems, but you cannot model a world, and buying one costs more than the project is worth. So the real work here was establishing a repeatable pipeline for free assets: generate the model with Tripo AI, optimise the GLB with gltf-transform, drop it into the game. No engine changes, no manual cleanup pass, no per-asset special-casing.

What holds it together is a locked art direction. The palette (pale stone, teal, gold) lives as code constants, and every asset is generated and validated against it. Consistency is enforced at the pipeline rather than negotiated per model, which is the only way a one-person art department produces a world that looks like one world.

The locked palette: pale stone, teal and gold

The systems

Combat is physics-based, with enemy spawning and equipment loadouts rather than a stat comparison dressed up as a fight. The dialogue engine is custom and branching, driving twelve or more NPCs with personality variants, so the same quest hook sounds different depending on who hands it to you. Quests and inventory work as you’d expect. The world map caches its terrain generation and carries quest markers and fast travel.

In-game panels for quests and dialogue

Details I’m pleased with

Automated QA, which is not where I expected to spend time on a game. Terrain-physics regression tests catch the classic failure where a terrain change opens a hole the player falls through forever. Material coverage validation catches assets that arrived without a material assigned: invisible in the editor, glaringly wrong at runtime. And a release experience check walks the actual first-run path, because “it works on my machine after twenty minutes of warm cache” is not a shipping condition.

Where it stands

About 89 TypeScript files, built in two weeks. A prototype: the pipeline is the finding, and the pipeline works.