A DirectX 12 project for real-time enabled cloud simulation and interactivity.
Made by Ruben Young Jacky Park Eli Asimow and Avi Serebrenik, Fall 2025
Project Document Milestone 1 Presentation
At its core, Cumulus is a realtime DirectX 12 cloud renderer with collisions, GPU generated clouds, and a clear environment.
We utilize the cloud rendering framework from the Horizon game series, as outlined in the Nubis 3 presentation from Advancements in Real-Time Rendering 2023. We then advance this method by incorporating interaction, allowing users to feel as though the clouds are truly part of the environment. Since the Nubis method uses offline modeled clouds, to enable interaction, we generate cloud data procedurally on the GPU to support our framework. This enables us to create more dynamic scenes, where we can smoothly transition between different weather conditions, resulting in true, realistic, and real-time cloudscapes.
- World-space NVDF placement — volumes positioned consistently in world coordinates
- Ray-marched rendering — integrates density with Beer–Lambert absorption/compositing
- SDF-guided stepping — signed-distance field cached in 3D textures to skip empty space
- Noise-based Details — Additional details at 0.5m scale using Alligator and "Curly-Alligator" noise
A cloud created in a compute shader
- We support procedurally creating cloud NVDF data in a compute shader pass. However, this is a recent addition, and the set noise and detail values still need to be finetuned for a more realistic look.
- Creation starts by initializing cloud "seeds" on the CPU side, which become world-space coordinates where clouds get initialized. These positions can be updated to show cloud movement and formation.
- For each seed, we create an SDF (given by Inigo Quilez's blog) that is a simple round cone with "Vesica Segments" aka football shapes around them. The number of these shapes, their size, and the orientation of all of these is given by noise.
- Next, based on this SDF, we create density values. Importantly, these values must slowly ease in, so we don't see the edge of the sdf shapes.
- Finally, density type and shape profile are also generated with some added noise.
- Atmosphere rendering pass
- Compute Shader pipeline for ray-marching
- Post-processing pipeline
- Automated loading of models/textures from files
- Construction of 3D NVDF data fields for the core Nubis method, 3D textures for atmosphere
- String-based, shader-driven resource binding for easy user experience
- Driven by ID3D12ShaderReflection
- Rendering is abstracted into a “Pass” framework,
- Automatically generates Root Signatures and Pipeline States (shader-driven)
- Upload Buffer system for staging CPU data temporarily before copying to the default heap
- Automatic lifetime reporting for catching memory leaks in Debug mode
- Diligent error detection and logging
- ImGUI integration
Dynamic Convex Hull of a teapot
- Convex Hull object bounds
- Managed via several structured buffers on GPU – built to be dynamic as meshes update position / animation
Recording.2025-11-24.133249.mp4
- Compute Shader: Modify Density Texture when cell collides with convex hull
- Based on Eric Bruneton's Precomputed Atmospheric Scattering
- Skips precompute to read from offline Irradiance, Scattering, and Transmission textures
- Blends Polar and Cartesian camera models
- Day and night cycle with selectable time of day
- Fully calculated in a pre-pass with raycasting
- Added moon and night time sky.
- Daytime can be modified in the UI to set sun position.
This project uses the Premake 5 build system, which is bundled with the application and the executable can be found under ./external/
To generate a Visual Studio solution, simply run generate_vs2022.bat on Windows. This will:
- Generate a "Cumulus.sln" solution file
- Generate and configure the VS projects specified under ./premake5.lua
- Any Source/Header Files in the specified folder will be automatically added to the corresponding project. It is not necessary to modify the lua build script if adding a new file.
This project is built using MSVC with the Visual Studio 2022 toolset (v143) for the C++17 standard.
- DirectX Tex
- Reading image files for texture generation
- Assimp 3.0.0
- Loading 3D Models
Broken Camera Matrix while working on Atmospheric Scattering



