@AlexYTScaling Appreciate it! Different goal though — I'm going fully procedural, no assets at all. Everything generated in code (Three.js + WebGPU/TSL), so there's nothing to import. Meshy's great if you need models, I'm trying to avoid having any.
A week of building Boring Forest — a WebGPU experiment (Three.js + TSL) with Claude Code:
💰 $656.77
⏱ 22h 53m active work
🔤 623M tokens (95% cache reads)
📨 2,701 requests across 21 sessions
📝 Project total: 17.6k lines of code
What got built:
🗿 A 15-meter procedural stone golem boss — sleeps in its lair, wakes when you approach, chases you straight through the forest: fells the spruces in its path (they snag on neighbors, leave stumps), crushes deadfall underfoot, throws rocks, slams the ground, two phases, stagger, death collapse
🌲 World detail: boulders, logs, stumps, undergrowth with ferns, grass that doesn't grow through objects
🔊 Audio rebuilt from noise into sound: granular grass rustle instead of white-noise "wind", footsteps that sound like feet
🌙 Atmosphere: backlit rim glow on the forest, a second moon with a proper phase, god rays through canopy gaps, pollen sparkling only against the sun
Biggest single run: a ~3-hour autonomous session executing the boss plan — $77. Average cost per request: $0.24.
Lessons learned:
📌 Checkpoint files beat memory. After every task the agent writes a markdown checkpoint: what worked, what didn't and why, verified numbers. Next session starts with "read the checkpoint and continue" — no context lost, no re-explaining.
📌 Prompt caching is the whole economy: 95% of those 623M tokens were cache reads. Long focused sessions keep the cache warm — restarting context is what costs.
💡 One tip: give the agent its own senses. We built headless tools it runs itself — screenshot capture from in-game cameras, offline audio rendered to WAV with spectrum analysis, a functional test suite. So "does the wind sound like wind?" became a spectrum readout and "does the golem reach the player?" became a pass/fail — the agent iterates on numbers instead of asking me to look every time.
@jmbollenbacher My post was probably misleading — here are the actual cache metrics:
- cacheRead — 191,679,658 tokens
- cacheWrite — 11,515,994 tokens
- uncached input — 2,216 tokens
- hit rate — 94.3%
Golem update — two days of refinements, from footsteps to rim lighting.
Opus 5, 13 prompts, ~3h of active agent time, 204M tokens, ~$234 API-equivalent. Mechanics — $91, four art rounds — $144.
Lesson: art iteration is expensive not from thinking, but cache invalidation — every screenshot batch and shader tweak rewrites the context. One task ("I don't like the eyes and mouth") cost $69, 80% of it cache writes.
#ThreeJS #TSL
@MBashirzadeh So drift is mostly covered on my side: there's the original reference, my notes go in with every round of edits, and the agent regularly takes screenshots to self-check against it. So each round re-anchors on the reference, not on prompt history.
@staydown124 Good catch on the mechanism. That's exactly what I'm experimenting for — figuring out the optimal process. Will try batching art notes, thanks.
@staydown124 Claude Code is my default at the moment. I see potential in Grok Build. I think we're at a point where you just have to keep experimenting constantly :)
Decided to keep the golem at 15 meters — looks big enough. It no longer walks through trees, it knocks them down. The hardest part so far is sound — leaving that for later.
Next step: polish, and of course weapons against the golem.
#ThreeJS#TSL
Opus 5. First pass — the golem looks rough and far from the reference, but I think there's something to it. Right now it's 15 meters tall. Next step is to see how it looks at different heights, then polish.
#ThreeJS#TSL
@Devon8zzh Might try something much bigger for another location. Here the trees are 7–22 meters, so a 15-meter golem knocks them down pretty dramatically. Plus they can slow him down a bit.