This is a game engine I created in 4 months to improve my game engine programming skills.
Video version of the text below
Simple yet efficient rendering API was designed to abstract away from modern graphics APIs. It makes extensive use of custom GPU memory allocators, CPU and GPU parallelism. Unlike in Vulkan or DirectX 12, there's no need to think about synchronization.
Frame graph makes it very simple to manage render passes and attachments. It automatically sets memory barriers, image layout transitions, allocates memory for attachments, makes use of memory aliasing for non-overlapping attachments. There’s even no such thing as a command buffer! All you do is submit draw calls in parallel in any order you want, and the frame graph takes care of the rest. Very simple and still efficient.
Acceleration structures such as quadtree and octree are extensively used to cull geometry, lights, shadows, environment maps, and particle effects.
All subsystems run in parallel on any number of threads. Many subsystems spawn parallel subtasks that make even greater use of all available processing power.
Texture streaming allows loading textures from disk and present them on the screen within the same frame without framerate drops. A custom texture format stores MIP levels from smallest to largest to aid texture streaming.
Particle effects simulation makes extensive use of SIMD and SOA memory layout. Different particle systems are simulated in parallel.
Parallax-correcting weight-blended local environment maps are baked right in the engine at runtime (it’s not a requirement to bake them at runtime though, they can easily be loaded from disk as well).
Percentage-Closer Soft Shadows and translucent shadow maps make great use of multithreading and frustum culling: each cubemap side is rendered in parallel and performs its own frustum culling query.
Frame graph architecture allows to easily add new post-processing techniques such as bloom (inspired by COD: MW bloom), tonemapping (Uncharted 2) or FXAA.
The engine supports many resource types: textures, models, animations, shaders, materials, particle effects, prefabs, and levels. All of them can be edited and added into the engine without writing any code. Every resource is loaded in parallel.
- Install vcpkg as described here;
- Download and install Vulkan from here;
- Install thirdparties like this:
vcpkg install sdl2
vcpkg install vulkan:x64-windows
- Clone and generate the MSVC solution like this:
git clone https://github.com/suVrik/KWA.git
cd KWA
mkdir _build
cd _build
cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake ..