see also Official homepage.
- About The Project
- Getting Started
- Shaders
- Tests
- Docker
- Roadmap
- Contributing
- License
- Contact
- Acknowledgements
- Literature
- Common issues
This project provides me a solid Vulkan/OpenGL renderer starting point for implementing
modern established rendering techniques and getting quickly started in own research topics.
As this project evolved it gained additional functionality:
- collecting/using CMake best practices
- collecting/using C++ best practices and testing new lang features π
- collecting experience in fuzzy/benchmark testing in C++
- collecting experience in integrating π Rust π code in Cmake projects
I frequently test under Linux and Windows.
For more information regarding the build environment refer to my
Kataglyphis-ContainerHub repository.
| Category | Feature | Implement Status |
|---|---|---|
| Vulkan Render agnostic | Rasterizer | βοΈ |
| Raytracing | βοΈ | |
| Path tracing | βοΈ | |
| PBR support (UE4, Disney, etc.) | βοΈ | |
| .obj Model loading | βοΈ | |
| Mip Mapping | βοΈ | |
| OpenGL Render agnostic | ||
| Directional Lights | βοΈ | |
| Point Lights | βοΈ | |
| Spot Lights | βοΈ | |
| Directional Shadow Mapping | βοΈ | |
| Omni-Directional Shadow Mapping | βοΈ | |
| Cascaded Shadow Mapping | βοΈ | |
| Cloud system | βοΈ | |
| 3D-worley noise generation | βοΈ | |
| .obj Model loading | βοΈ | |
| PBR support (UE4,disney,phong, etc.) | βοΈ | |
Support for #include directives in shaders. |
βοΈ | |
| Sky box | βοΈ | |
| Supporting compute shader | βοΈ | |
| On the fly 3D worley/perlin noise creation | βοΈ | |
| C++/CMake agnostic | Code coverage for Clang | βοΈ |
| Advanced unit testing | πΆ | |
| Advanced performance testing | πΆ | |
| Advanced fuzz testing | πΆ |
Legend:
- βοΈ - completed
- πΆ - in progress
- β - not started
- Vulkan 1.4
- OpenGL 4.6
- GLAD
- glm
- glfw
- tinyobjloader
- stb
- vma
- tinygltf
- gtest
- gbenchmark
- google fuzztest
- cmake
- gsl
- nlohmann_json
- SPDLOG
- NSIS
- doxygen
- cppcheck
- renderdoc
- nsightgraphics
- valgrind
- clangtidy
- visualstudio
- ClangPowerTools
- Codecov
- Ccache
- Sccache
C++23 or higher required.
C17 or higher required.
CMake 4.2.0 or higher required.
NOTE: On Windows use Git Bash
- Clone the repo
git clone --branch develop --recurse-submodules [email protected]:Kataglyphis/Kataglyphis-BeschleunigerBallett.git
- Use the scripts (in the
Scriptsfolder for installing dependencies on your system) - Then build your solution with [CMAKE] (https://cmake.org/)
You can follow my steps from my CMake best practices repo.
For now the features in Rust are experimental. If you want to use them install Rust and setRUST_FEATURES=ONon your CMake build.
Alternatively you can use the build scripts I use for my standard configuration:
- [
buildEngine.sh] - [
buildEngine.bat]
$ {WORKING_DIR}/GraphicsEngineVulkan/buildEngine[.sh/.bat]I provide two ways for compiling shaders with. Hence if you want to add new
files as #include in your shaders you have to modify the files: (should be self-explanatory)
- [
include/vulkan_base/ShaderIncludes.hpp] - [
cmake/CompileShadersToSPV.cmake]
appropriately.
I follow the test setup as descriped in: CMake best practices
You can find all details in my Kataglyphis-ContainerHub repository.
If you want to run it on NVIDIA GPUs you will have to
install the NVIDIA Container Toolkit
before you proceed with the next steps.
NOTE: Pls for GPU accelerated Windows Docker have a look here
Watch the refman generated by doxygen.
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the MIT-License. See LICENSE for more information.
Jonas Heinle - @Cataglyphis_ - [email protected]
Project Link: https://github.com/Kataglyphis/GraphicsEngineVulkan
You will find important links to information in the code. But here in general some good sources of information:
Thanks for free 3D Models:
Some very helpful literature, tutorials, etc.
OpenGL
Clouds
- pbr-book
- Inigo Quilez
- Shadertoy Horizon Zero Dawn
- Sebastian Lague
- Horizon Zero Dawn
- Clouds and noise
- Shadertoy Clouds using 3D Perlin noise
Noise
Vulkan
- Udemy course by Ben Cook
- Vulkan Tutorial
- Vulkan Raytracing Tutorial
- Vulkan Tutorial; especially chapter about integrating imgui
- NVidia Raytracing tutorial with Vulkan
- Blog from Sascha Willems
Physically Based Shading
- Advanced Global Illumination by Dutre, Bala, Bekaert
- The Bible: PBR book
- Real shading in Unreal engine 4
- Physically Based Shading at Disney
- RealTimeRendering
- Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs
- Sampling the GGX Distribution of Visible Normals
Path tracing
Docker
- Problem:
If Validation Layers could not be found:
Solution for linux:
A value given directly by extern c function 322 [XXXX-XX-XX 10:30:40.877] [error] Validation layers requested, but not available! [XXXX-XX-XX 10:30:40.879] [error] Failed to create a Vulkan instance! [XXXX-XX-XX 10:30:40.880] [error] Validation layers requested, but not available! [XXXX-XX-XX 10:30:40.882] [error] Failed to create a Vulkan instance! ERROR: vkGetInstanceProcAddr: Invalid instance [VUID-vkGetInstanceProcAddr-instance-parameter]
Otherwise you would have to install them via sdk.sudo apt install libvulkan1 vulkan-tools vulkan-validationlayers










