Sensei Notes #09 - A racing game, an infinite world, and Three.js r184
Hey!
This week: a racing game that makes Gran Turismo nervous ๐๏ธ, an infinite WebGPU world with zero textures, and Three.js r184 with SSGI, 3x faster shaders, and Claude as a contributor.
๐ฅ Alex is cooking with Apex

Alex aka as @mustache_dev is building a full sim-racing game in the browser, in JavaScript, with Three.js. It's called Apex and it's genuinely impressive.
v0.4 just dropped with a replay system for making cinematic videos, a reworked online racing mode, and a brand new track: Laguna Seca. The physics got a full overhaul too, now much closer to Gran Turismo. He even did a real-time side by side comparison between Apex and GT7 on the same track with the same car, and it holds up surprisingly well.
This is the kind of project that makes you realize how far the web has come for gamedev.
๐ Try Apex
๐ฑ False Earth: an infinite WebGPU world, fully broken down

Ming Jyun Hung just dropped a Codrops case study for False Earth, and it's basically a masterclass on what WebGPU + TSL unlocks over classic WebGL.
A few things worth calling out:
- Infinite grass field built from a grid system that snaps with the camera. World position is used as a deterministic seed so every blade stays consistent across snaps.
- Storage buffers replace the old FBO ping-pong GPGPU workarounds. Per-blade data packs into 4x vec4 (64 bytes) and gets written by compute shaders.
- Indirect draw + GPU-driven culling and LOD so the CPU never touches the visibility pass. Around 80% of instances never reach the vertex shader.
- Voronoi clump blending for natural variation, cubic Bรฉzier spines for bending, and VAT flowers with a circular spawn buffer using
atomicAdd. - AsyncCompile pipeline with a FIFO queue to avoid freezing the browser during shader compilation. Nice pattern to steal for any heavy R3F/TSL scene.
No textures on the blades. Everything procedural. All in the browser.
๐ Read the case study
๐ฎ Try the demo
๐ป Code on GitHub
๐ฆ Three.js r184 is out
r184 just dropped on April 16 and it's a meaty one. Here are the things worth paying attention to.
SSGI Ball Pool demo is probably the flashiest addition. Screen-space global illumination on a physics ball pool, running in the browser. Go play with it.
๐ฎ Try the SSGI Ball Pool demo
Dynamic Lights landed in WebGPURenderer (by @RenaudRohlinger), a new approach for handling lights more efficiently in GPU-driven pipelines.
TSL compilation is now 3x faster. This one matters if you're building anything complex with nodes. The PR is a 3x speedup on shader compilation, just from smarter caching.
LightProbeGrid got a proper GI implementation. Position-dependent diffuse global illumination, so probes actually vary across space instead of being a flat global approximation.
HTMLTexture shipped. You can now render actual HTML as a texture in your Three.js scene. Genuinely useful for UI in 3D or just fun experiments.
The Inspector keeps getting better: this release adds a Timeline tab (basically a command recorder), a TSL Graph view for visualizing your node graph, a Memory tab, extension support, and stack trace capture. It's becoming a real devtool.
FBXLoader got a long overdue fix pass: skinning, rotation animations, morph deltas, Z-up coordinate system correction, and more. If you've been fighting FBX issues, this one's for you.
Fun side note: @claude is listed as a contributor in several r184 PRs. The three.js team has been using AI to help write code. The future is now.
๐ Full r184 changelog
Happy coding ๐งโ๐ป
Wawa