luma is a toy renderer written in Odin and Vulkan. It has no external dependencies beyond the "vendor" libraries that ship with Odin, so it builds without any setup. It's mostly a place for me to try out rendering techniques I want to understand.
Scenes are exported from Blender via the tools/blender_export Python script, straight into a binary format the renderer reads directly.
-
GPU-driven rendering: an early pass at it. Draw data lives on the GPU, though there's no GPU frustum culling yet.
-
Rasterized visbuffer with shading in compute. This will be proven useful once there are multiple point lights to shade.
-
Frostbite BRDF shading, plus the usual essentials like normal mapping.
-
Ray traced directional hard shadows and ambient occlusion. Soft shadows and denoising will follow once motion vectors are in.
-
Physically correct bloom.
-
DDGI for global illumination, using irradiance probes. Radiance is stored as spherical harmonics, with the coefficients computed by shooting rays around each probe and integrating with Monte Carlo. Bounces accumulate over frames. Octahedral depth isn't implemented yet.
-
A sky shader baked into a cubemap. Not mine, borrowed.
- shader reloading with managed pipelines
- bindless architecture
- ray tracing
- on-demand command handling
You'll need the Odin compiler and the Vulkan SDK installed. With those in place:
mkdir build
odin run luma -out:build/luma
./build/luma


