Three.js From Zero · Article s12-04

S12-04 Procedural Cloud Rendering on TSL

Season 12 · S12-04 · Specialized Production Patterns

Procedural Cloud Rendering on TSL — porting Horizon’s Nubis ideas

Clouds are not one texture with alpha. The interesting part is how density, lighting, and camera movement conspire to feel voluminous while staying inside a browser budget.

renderingtslatmosphere

1. Why this article exists

This is exactly the kind of rendering niche that sits in the “useful but underserved” pocket: visually rich, technically interesting, and helpful for world-building beyond plain skyboxes.

2. What we are building in the demo

  • A layered cloud bank with controllable density and drift.
  • A quick lighting model that differentiates sun-facing volume from shadowed interior.
  • A browser-friendly framing of what to borrow from Nubis versus what to simplify.

3. Live demo

The demo below is a compact study model, not a full production system. The goal is to make the article’s mental model tactile: what changes, what matters, and what you would keep when the codebase graduates into a real project.

booting...
Season 12 is deliberately less single-vertical than Season 11. The throughline is still applied production: every demo is framed as a pattern you could reuse in paid work.

4. Implementation sketch

const density = fbm(samplePos * detail) * coverage;
const lit = mix(shadowColor, sunColor, saturate(noL * 0.7 + 0.3));
color += lit * density;

5. Production notes

Useful companion articles from earlier seasons:

What usually goes wrong first:

  • Do not oversell the approximation as “the full AAA cloud stack.”
  • Noise without large-shape composition reads as mush.
  • Expensive volumetric steps need a strong art-direction payoff.

6. Takeaways

  • Big-shape composition matters more than microscopic noise detail.
  • Lighting turns density into believable volume.
  • The right simplification is often more teachable than a faithful port.