Better Clouds

Better Clouds banner

Most Minecraft shader packs and mods that touch clouds go for photorealism, which can look stunning in isolation but clashes badly with the rest of the game. Better Clouds takes a different approach: simple, blocky, volumetric clouds that actually feel like they belong in Minecraft. The mod has accumulated over five million downloa ds across Modrinth and CurseForge. In early 2026 I stepped back from active development and handed maintainership to @orangishcat. It is available on Modrinth and the source is on GitHub.

Rendering

Each cloud is a cube, and the cloud field is generated by sampling a height field on a fixed grid and jittering each position within its cell. The height field itself comes from octave Perlin noise. Crucially, the grid is flat in the sense that there are never two cloud cubes stacked directly above each other, which keeps the overlap manageable and gives a meaningful performance advantage. Because every cloud is just a position, instanced rendering is a natural fit. Each instance needs only a vec3, and the instance buffer is generated in chunks on the CPU asynchronously so the main thread is not stalled.

Lighting is handled with an authored radial color gradient that tracks the sun and moon position. In Minecraft the sun and moon are always on opposite sides of the sky, so the gradient wraps around the horizon and the clouds shift color accordingly, giving them a warm glow at sunrise and a cooler tone at night.

Transparency

Rendering a large field of overlapping transparent cubes efficiently is the central challenge. Order-independent transparency is the right category of solution, but the obvious choice, Weighted Blended OIT, turned out to be too slow. The bottleneck was the blend hardware: WBOIT requires blending into multiple render targets simultaneously, and with the amount of overdraw the clouds produce the blend units became a serious constraint.

The approach I landed on uses the stencil buffer instead. All cloud cubes share the same opacity value, which means the only thing that determines how opaque a pixel looks is how many layers of cloud overlap at that point. In the first pass the stencil operations count the number of cloud cubes that cover each pixel, effectively computing a per-pixel coverage value. A second pass then reads that coverage and calculates the combined opacity analytically, without needing any blending hardware at all. This turned out to be significantly faster in practice.