This project was setup by following the mesh shading implementation streaming via Arseny Kapoukine
Now mostly follow the bgfx style with my own rough understanding to do the abstraction.
It is a playground to understand modern graphics programming better.
- volk
- meshoptimizer
- tracy
- glfw
- imgui
- bx
- bimg
- bgfx_common
- glm
- METIS
- premake5
- FidelityFX
- brixelizer
supports:
- mesh-shading
- task-submission
- Lod
- mesh level occlusion
- meshlet level occlusion
- frustum culling
- back-face culling
leash the vulkan in cage
-
frame graph
- sort and clip unnecessary passes and resources based on the contribution to the final result.
- auto barrier: intend to record the resource state and transform states and layouts atomically.
- auto alias: alias transition buffers if their lifetime is not overlapped. (Note: images are not been processed yet because a more specific condition required)
-
gfx api abstraction
- vulkan
-
profiling
- based on Tracy
-
render command system
- allow store the command then translate to platform API (e.g. vulkan)
-
nanite style dynamic meshlet lod selection
-
deferred rendering
-
gltf scene loading
-
bindless texture
-
SMAA
-
geometry shader based voxelization(with oct-tree optimized)
-
radiance cascade 2D
-
FidelityFX Brixelizer intergrate
-
download premake5 and install it first.
-
generate project with command:
premake5 vs2022 x64you can find the solution file in
./build/vulkage.sln
-
build METIS manually
-
open the
./externs/metis/include/metis.h, then un-comment following macros(or set by your needs):// ... #define IDXTYPEWIDTH 32 // ... #define REALTYPEWIDTH 32f -
generate the solution via ./externs/metis/vsgen.bat
-
build the metis solution
-
-
build the vukage solution
-
set the project
vulkageas startup
Working dir: ./
project_root$> vulkage.exe [model_dir] [-p]
[-p] : Force parse the gltf model. The project will parse the model file once and dump the medium data to reduce loading time.
a) METIS lib should be compiled manually.
b) You should prepare models by yourself
c) Start from
demo.cppif you like to read the code.d) The project tested with vs2022 and tested on Nvidia 3070 serials, and should work on newer Nvidia cards(not sure if AMD supports mesh shaders on retail drivers yet). The project used the vulkan extension:
VK_EXT_mesh_shader, default vertex pipeline might not work because I didn't setup the test project yet, it might broken due to some modification.
- Niagara streaming - Arseny Kapoukine
- FrameGraph: Extensible Rendering Architecture in Frostbite - Yuriy O'Donnell
- Advanced Graphics Tech: Moving to DirectX 12: Lessons Learned - Tiago Rodrigues
- Render graphs - Apoorva Joshi
- Vulkan Barriers Explained - Matthäus Chajdas
- Organizing GPU Work with Directed Acyclic Graphs - Pavlo Muratov
- Radiance Cascades - Alexander Sannikov
- RC bilinear ring fix - C. M. J. Osborne, A. Sannikov
- RC fundamental - MΛX
- And Vulkan documents :)




