An advanced DX12 research renderer, written to experiment with real-time rendering, built entirely around virtualized geometry
Feature development is driven purely by what I'm interested in at the moment.
- Nanite-style virtualized geometry using a novel work-graph approach, capable of real-time rendering of scenes with tens of billions of triangles
- Image-based lighting
- Normal mapping & contact-refinement parallax heightmaps
- Support for arbitrary numbers of point, spot, and directional lights using clustered lighting
- Directional shadow mapping
- Skinned meshes
- Order-independent transparency using a per-pixel linked-list OR adaptive voxel-based OIT
- SSAO with XeGTAO
- Downsample/upsample bloom
- Screen-space reflections with FidelityFX SSSR
- TAA/upscaling with DLSS/FSR
- A powerful render graph for automatic resource transitions and queue synchronization. Supports both retained-mode and immediate-mode GPU command execution.
- Low-level RHI (Only DX12 backend implemented, for now, but built to support Vulkan)
- Shader-instrumentation debugging, using GPU Reshape's backend
- GPU-driven rendering with compute culling & ExecuteIndirect
- Visibility buffer (UE5-style), Deferred, and forward+ rendering
- Virtual shadow mapping (directional-only for now) with multiple raster modes
- DirectStorage integration for low-latency, high-throughput data streaming
- GPU BC7 compressor for rapid asset optimization
- Clustered lighting with a paged linked-list
- Async-compute
- Compute-based skinning
- Meshlets & mesh shaders
- Flecs ECS for scene management
- A basic UI for feature toggles, importing new asset files, debug view selection, and scene graph introspection & modification
- USD using OpenUSD, https://github.com/PixarAnimationStudios/OpenUSD
- Partial assimp loader implemented, https://github.com/assimp/assimp/blob/master/doc/Fileformats.md
- nlohmann-json
- meshoptimizer
- spdlog
- ImGui
- assimp
- flecs
- XeGTAO
- FidelityFX SPD
- FidelityFX SSSR
- FSR
- DLSS
- OpenUSD
- GPU Reshape
- OneTBB
- SLang
- Tracy
- Tree-Sitter
- DirectStorage
Timberdoodle research engine
Sparse Virtual Shadow Maps, by J. Stephano
Adaptive Voxel-based order-independant transparency, Siggraph 2025, Michal Drobot
Nvidia tessellated clusters sample
Visibility Buffer Rendering with Material Graphs, by John Hable
Filament for the material model, with additions from MaterialX
Erik Svjannson's talk on GPU-driven rendering and mesh shaders
Medium article on occlusion culling
The build is being structured so the main components can live as independent repositories:
BasicRHI(low-level GPU abstraction)OpenRenderGraph(render graph framework, depends onBasicRHI)BasicRenderer(application, depends on both)
Current dependency strategy is package-first with submodule fallback:
BasicRenderertriesfind_package(BasicRHI CONFIG)andfind_package(OpenRenderGraph CONFIG)first.- If packages are not available and fallback is enabled, it uses in-tree
add_subdirectory(...).
Relevant options:
BASICRENDERER_USE_PACKAGE_DEPS(defaultON)BASICRENDERER_ENABLE_SUBMODULE_FALLBACK(defaultON)
cmake -S BasicRHI -B out/build/rhi -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build out/build/rhi
cmake --install out/build/rhi --prefix out/install/rhicmake -S OpenRenderGraph -B out/build/org -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH="out/install/rhi"
cmake --build out/build/org
cmake --install out/build/org --prefix out/install/orgcmake -S . -B out/build/renderer -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBASICRENDERER_USE_PACKAGE_DEPS=ON -DBASICRENDERER_ENABLE_SUBMODULE_FALLBACK=OFF -DCMAKE_PREFIX_PATH="out/install/rhi;out/install/org"
cmake --build out/build/rendererTop-level CMake now supports explicit USD package selection:
BASICRENDERER_USD_VARIANT=dbg|rel
When unset, it auto-selects rel for multi-config generators and dbg only for single-config Debug builds.





