DX11 project which had the aim of implementing graphics techniques but turned into an architectural playground :) This project will likely be a base for any other DX11 related projects I have in the future.
There are likely bugs or corner cases not handled, which will be fixed if they ever cause an issue later.
There are also things which need to be refactored, but have been ignored since they work for now.
Features:
-
Graphics Device API:
- Simplified API which mimics Vulkan/DX12 (but still utilizes the slot-binding model)
- Safe strongly typed uint64_t handle-based resources using generational counters
- Automated
- View creation
- Elimination of redundant re-binds
- Read-Write and Read resource unbinds
- MSAA resolves
- Hot shader recompilation for fast iteration and experimentation
-
Graphics API:
- Render Queue
- Bucket-based with int keys
- Allows for sorting graphics commands in any order (e.g per material, etc.)
- Reverse Z-depth
- Render Queue
-
Techniques:
-
Deferred Rendering
-
Parallel Split Shadow Maps (PSSM)
- Utilizing geometry shader instancing
-
Sample Distribution Shadow Maps (SDSM)
- Parallel Depth Reduction on Compute Shader
- Depth min/max CPU read-back for frustum subdivision
- Normal CSM workflow afterwards
-
To-add:
- Percentage Closer Filtering
- Normal maps
- SSAO
- PBR
-
-
Miscellaneous:
- CPU Profiler (Frame-based and Scoped)
- GPU Profiler (Frame-based and Scoped)
- GPU Annotator for clustering commands in a graphics debugger (e.g RenderDoc)
- ImGUI Docking
- Assimp Loader
-
References:
Gallery:
Scene
Exposed graphics primitives
Setting up depth-only pass example:
Scoped frame profiler (CPU and GPU) and API usage
PSSM (Uniform + Logarithmic Split Scheme with Lambda = 0.5)
SDSM (Logarithmic Split Scheme)