This is a realtime 3D rendering application written in Vulkan / C++ / GLSL.
- OS: Windows 10
- IDE: Visual Studio 2019
- GPU: RTX 2060 SUPER
Successful build on other environments is not guaranteed.
A lot of code were based on these great resources:
- Vulkan tutorial by Alexander Overvoorde
- Vulkan samples by Sascha Willems
- Nvpro Core from NVIDIA DesignWorks Samples
- LearnOpenGL by Joey de Vries
- 32768 particles (uniformly distributed on the surface of a sphere)
- Screen resolution 1200x800
- HDR (reinhard tone mapping)
- Bloom (gaussian blur)
- Compute shader + shared variables
Youtube link : https://youtu.be/CDU1MrpubUw
- 20 point lights
- 1024 bunnies - instanced rendering
- Screen resolution 1200x800
- MSAA applied (maximum sample count supported by current device)
Used edge detection (comparing neighborhood normal vectors) to only apply msaa to the pixels on edges
To fix thread coherence problem ("edge pixels" and "non-edge pixels" are computed in one pass), the render pass for edge pixels was separated by using stencil buffer generated from edge detection algorithm.
Skybox textures: http://www.humus.name/index.php?page=Textures&start=8
Most of basic vulkan features were implemented at this point:
- Devices: Collection of physical / logical device handle
- Swapchain: Manage images in swapchain (acquire / present)
- MemoryAllocator: Naive memory allocator that pre-allocate big chunk(s) of memory per memory type
- Textures: Load texture from a file (stb_image used)
- Mesh: Load model from a obj file (tinyobjloader used)