Skip to content
Snippets Groups Projects
Verified Commit 053a89cd authored by Tobias Frisch's avatar Tobias Frisch
Browse files

Add documentation of the projects

parent db38fec2
No related branches found
No related tags found
No related merge requests found
Showing
with 165 additions and 10 deletions
...@@ -5,14 +5,16 @@ ...@@ -5,14 +5,16 @@
## Repository ## Repository
Git LFS is used for bigger resource files like meshes and textures. So you need to install Git LFS and use `git lfs install` after cloning. Git LFS is used for bigger resource files like meshes and textures. So you need to install Git LFS
and use `git lfs install` after cloning.
More information about Git LFS [here](https://git-lfs.github.com/). More information about Git LFS [here](https://git-lfs.github.com/).
## Build ## Build
Git submodules are used for libraries. Git submodules are used for libraries. To download the submodules either clone using
To download the submodules either clone using `git clone --recurse-submodules` or after `git clone` use `git submodule init` and `git submodule update`. `git clone --recurse-submodules` or after `git clone` use `git submodule init` and
`git submodule update`.
Detailed build process: Detailed build process:
- [How to build on Windows](doc/BUILD_WINDOWS.md) - [How to build on Windows](doc/BUILD_WINDOWS.md)
...@@ -21,7 +23,8 @@ Detailed build process: ...@@ -21,7 +23,8 @@ Detailed build process:
### Dependencies (required): ### Dependencies (required):
Most dependencies will be used via submodules but for example Vulkan needs to be installed correctly depending on your platform. So please setup your environment properly. Most dependencies are used via submodules but for example Vulkan needs to be installed correctly
depending on your platform. So please setup your environment properly.
| Name of dependency | Used as submodule | | Name of dependency | Used as submodule |
|-----------------------------------------------------------------------------------|---| |-----------------------------------------------------------------------------------|---|
...@@ -34,7 +37,8 @@ Most dependencies will be used via submodules but for example Vulkan needs to be ...@@ -34,7 +37,8 @@ Most dependencies will be used via submodules but for example Vulkan needs to be
### Modules (optional): ### Modules (optional):
The following modules will be provided in this repository and they will automatically be builded together with the framework if used. You can configure/adjust the build using CMake if necessary. The following modules are provided in this repository and they build automatically together with
the framework if used. You can configure/adjust the build using CMake if necessary.
- [Algorithm](modules/algorithm/README.md) - [Algorithm](modules/algorithm/README.md)
- [Asset-Loader](modules/asset_loader/README.md) - [Asset-Loader](modules/asset_loader/README.md)
...@@ -48,6 +52,28 @@ The following modules will be provided in this repository and they will automati ...@@ -48,6 +52,28 @@ The following modules will be provided in this repository and they will automati
- [Shader-Compiler](modules/shader_compiler/README.md) - [Shader-Compiler](modules/shader_compiler/README.md)
- [Upscaling](modules/upscaling/README.md) - [Upscaling](modules/upscaling/README.md)
### Projects (optional):
The following projects are provided in this repository and can be build with their own CMake
targets:
- [bindless_textures](projects/bindless_textures/README.md)
- [fire_works](projects/fire_works/README.md)
- [first_mesh](projects/first_mesh/README.md)
- [first_scene](projects/first_scene/README.md)
- [first_triangle](projects/first_triangle/README.md)
- [head_demo](projects/head_demo/README.md)
- [indirect_dispatch](projects/indirect_dispatch/README.md)
- [indirect_draw](projects/indirect_draw/README.md)
- [mesh_shader](projects/mesh_shader/README.md)
- [mpm](projects/mpm/README.md)
- [particle_simulation](projects/particle_simulation/README.md)
- [path_tracer](projects/path_tracer/README.md)
- [ray_tracer](projects/ray_tracer/README.md)
- [rtx_ambient_occlusion](projects/rtx_ambient_occlusion/README.md)
- [sph](projects/sph/README.md)
- [voxelization](projects/voxelization/README.md)
## Development ## Development
See this guide to setup your IDE for most forward development. See this guide to setup your IDE for most forward development.
...@@ -58,4 +84,5 @@ See this guide to setup your IDE for most forward development. ...@@ -58,4 +84,5 @@ See this guide to setup your IDE for most forward development.
A pre-built documentation can be found here: A pre-built documentation can be found here:
https://userpages.uni-koblenz.de/~vkcv/doc/ https://userpages.uni-koblenz.de/~vkcv/doc/
But it is recommended to build the documentation with Doxygen locally to get the most recent changes. There is also an optional CMake target to build the documentation via Doxygen. But it is recommended to build the documentation with Doxygen locally to get the most recent
changes. There is also an optional CMake target to build the documentation via Doxygen.
...@@ -13,8 +13,8 @@ add_subdirectory(indirect_draw) ...@@ -13,8 +13,8 @@ add_subdirectory(indirect_draw)
add_subdirectory(mesh_shader) add_subdirectory(mesh_shader)
add_subdirectory(particle_simulation) add_subdirectory(particle_simulation)
add_subdirectory(path_tracer) add_subdirectory(path_tracer)
add_subdirectory(ray_tracer)
add_subdirectory(rtx_ambient_occlusion) add_subdirectory(rtx_ambient_occlusion)
add_subdirectory(saf_r)
add_subdirectory(sph) add_subdirectory(sph)
add_subdirectory(voxelization) add_subdirectory(voxelization)
add_subdirectory(wobble_bobble) add_subdirectory(mpm)
\ No newline at end of file \ No newline at end of file
# Bindless textures
An example project to show usage of bindless descriptor indexing with the VkCV framework
![Screenshot](../../screenshots/bindless_textures.png)
## Details
The project utilizes a Vulkan extension to access an array of descriptors with arbitrary size. The
size does not need to be known during shader compilation and can be adjusted during runtime when
creating the graphics pipeline.
## Extensions
Here is a list of the used extensions:
- [VK_EXT_descriptor_indexing](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_descriptor_indexing.html)
# Fire works
An example project to show a particle simulation via compute shader to visualize virtual firework
![Screenshot](../../screenshots/fire_works.png)
## Details
The project uses many different compute shaders to calculate different steps of the particles
lifecycle. Particles can dynamically be spread to different events for explosions on the GPU. The
particles will then be rendered as volumetric smoke and geometric smoke using geometry shader
invocations.
# First mesh
An example project to show a simple mesh can be rendered with the VkCV framework
![Screenshot](../../screenshots/first_mesh.png)
## Details
This project is rather a proof of concept to show that rendering a more complex mesh than a single
triangle was indeed possible with the given API. It was used as a benchmark for further API design
changes.
# First scene
An example project to show a whole scene can be rendered with the VkCV framework
![Screenshot](../../screenshots/first_scene.png)
## Details
Similar to the projects to show rendering a single triangle or a simple mesh was possible. This
project shows that a whole scene can easily be loaded from any GLTF file and be rendered using the
modules from the VkCV framework.
# First triangle
An example project to show a triangle can be rendered with the VkCV framework
![Screenshot](../../screenshots/first_triangle.png)
## Details
This project was the first step of the development to this framework. It was the proof of concept
the designed API can work to reduce the required overhead code for applications using Vulkan.
# Head demo
An example project to show how the VkCV framework could be used for medical applications
![Screenshot](../../screenshots/head_demo.png)
## Details
This project renders a mesh from a human skull by [HannahNewey](https://sketchfab.com/HannahNewey)
and splits the rendering on three axes into diffusive shading and drawing the vertices as point
cloud. In a similar way you could visualize different layers of a human body to make a specific
part the visual focus without blending the layers above completely away.
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#include <GLFW/glfw3.h> #include <GLFW/glfw3.h>
#include <vkcv/camera/CameraManager.hpp> #include <vkcv/camera/CameraManager.hpp>
#include <vkcv/gui/GUI.hpp> #include <vkcv/gui/GUI.hpp>
#include <chrono>
#include <vkcv/asset/asset_loader.hpp> #include <vkcv/asset/asset_loader.hpp>
#include <vkcv/shader/GLSLCompiler.hpp> #include <vkcv/shader/GLSLCompiler.hpp>
#include <vkcv/scene/Scene.hpp> #include <vkcv/scene/Scene.hpp>
...@@ -13,7 +12,7 @@ ...@@ -13,7 +12,7 @@
#include <vkcv/upscaling/FSRUpscaling.hpp> #include <vkcv/upscaling/FSRUpscaling.hpp>
int main(int argc, const char** argv) { int main(int argc, const char** argv) {
const std::string applicationName = "First Scene"; const std::string applicationName = "Head Demo";
uint32_t windowWidth = 800; uint32_t windowWidth = 800;
uint32_t windowHeight = 600; uint32_t windowHeight = 600;
......
# Indirect dispatch
An example project to show usage of indirect compute shader dispatching
![Screenshot](../../screenshots/indirect_dispatch.png)
## Details
The project shows off indirect dispatching of compute shaders for an implementation of motion
blur. Additionally, the calculated motion vectors for the motion blur can be used for temporal
upscaling techniques such as FSR2.
# Indirect draw
An example project to show usage of indirect draw calls
![Screenshot](../../screenshots/indirect_draw.png)
## Details
The project utilizes multiple Vulkan extensions to access to make indirect draw calls which can be
modified on the GPU from within compute shaders. This will be used to cull the rendered scene on
the GPU instead of (potentially) more expensive frustum culling on the CPU.
## Extensions
Here is a list of the used extensions:
- [VK_KHR_shader_draw_parameters](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_shader_draw_parameters.html)
- [VK_EXT_descriptor_indexing](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_descriptor_indexing.html)
# Mesh shader
An example project to show usage of mesh shaders with the VkCV framework
![Screenshot](../../screenshots/mesh_shader.png)
## Details
The project utilizes a Vulkan extension to use hardware accelerated mesh shaders. Those mesh
shaders can replace the usual vertex-, tessellation- and geometry-shader stages in the graphics
pipeline. They also act more similar to compute shaders.
The application uses those mesh shaders to cull a rendered mesh into individual groups of triangles
which are called meshlets in this context.
The project currently uses the Nvidia GPU exclusive extension for mesh shading but it could be
adjusted to use the cross compatible extension
"[VK_EXT_mesh_shader](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_mesh_shader.html)"
instead.
## Extensions
Here is a list of the used extensions:
- [VK_NV_mesh_shader](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_NV_mesh_shader.html)
File moved
File moved
# MPM
An example project to show the implementation of an MPM soft-body simulation with the VkCV framework
![Screenshot](../../screenshots/mpm.png)
## Details
The project shows off an example implementation of an MPM simulation which are widely used
in computer graphics to simulate the behavior of solids, liquids or gases. It utilizes the discrete
representation of objects as combined particles as well as a discrete grid of data. Together both
representations help to stabilize the result while providing as much detail as possible.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment