A graphics engine built on top of Vulkan+OpenGL. Serves also as playground for learning various best practices in Graphic APIs, CMake, Rust, ....
see also Official homepage.
Key Features β’ How To Use β’ Download β’ Credits β’ Related β’ License
Table of Contents
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
Frequently tested under
- windows server 2025 x64 Clang 20.1.0 and MSVC
- ubuntu 24.04 x64 Clang 18.1.3
- ubuntu 24.04 ARM Clang 18.1.3
| 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.3
- 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.0.2 or higher required.
- Clone the repo
git clone --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
Dockerfile stays at project root.
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.
# build
docker build -t kataglphis_renderer_ubuntu24_04 .
# run container on wayland
# start docker in root of this repo
xhost +local:root
docker run --rm -it \
--gpus all \
--network=host \
-e QT_QPA_PLATFORM=wayland \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/.Xauthority:/root/.Xauthority \
--env DISPLAY=$DISPLAY \
--env XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
-v "$(pwd)":/workspace:rw \
-w /workspace \
kataglphis_renderer_ubuntu24_04 NOTE: Pls for GPU accelerated Windows Docker have a look here
docker build -f docker/windows/Dockerfile -t my-windows-dev-image .docker run --rm -it `
-v "$($PWD.Path):C:\workdir" `
my-windows-dev-imageWatch 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











