top of page

Vulkan Project

Vulkan Project

Vulkan Project

Watch Now

Spinner model by Josh Van Zuylen

Description

Currently pending a final name, my Vulkan Project is my endeavour to learn Khronos Group's low-level, low-overhead Graphics and Compute API, Vulkan. I also plan to use this renderer for my future projects.

Goal

My goal is to create a renderer using Vulkan similar to that of my OpenGL Graphics Project, aimed at rendering fast realtime graphics with minimal CPU overhead and CPU-GPU device syncronizations. I plan to add more features into this renderer than what I did in the OpenGL project, including Shadow Mapping, Dynamic Reflections, Advanced Post Processing, Animation, Spot Lights etc. Much like the OpenGL project, this renderer will make use of Deferred Rendering technology to allow for a large limit on dynamic light count. Once this project is complete, I plan to use it for rendering my future C++ projects.

Resource Sharing

The renderer makes intelligent re-usage of resources including sharing of graphics pipelines and draw calls to eliminate as much overhead as possible between drawing objects.

Materials

The renderer draws objects based off of a material system, materials are constructed from combinations of shaders, textures, and material properties. Materials are a key component in the construction of graphics pipelines, used in drawing Render Objects.

Render Objects

Render objects are constructed from a combination of meshes, materials and vertex input formats. Render objects also define what graphics pipeline will be used to render the object, if the materials and vertex formats match between two objects, they can share the same pipeline for rendering.

Render Pass

All rendering is handled within a single Vulkan render pass, using a subpass and secondary command buffer for each pass in rendering, including the G-Buffer Pass, and the Deferred Lighting Pass. This allows differrent sections of the render pass to be modified in a modular fashion. If one subpass is modified the others do not need to be, avoiding CPU usage in recording command buffers wherever possible.

Current Features: 

  • Rendering meshes with any combination of textures and materials.

  • Automatic creation or re-usage of graphics pipelines for each new render object created.

  • Lighting pass using Deferred Shading.

  • Directional and Point lighting.

  • Instancing of dynamic objects.

  • Support for Physically Based Rendering

Libraries & APIs

  • Vulkan Runtime Libraries

  • Vulkan SDK

  • GLFW 3

  • TinyObjLoader

  • STB (stb_image.h)

  • FBX SDK (Upcoming)

A special thanks to Josh Van Zuylen for his Spinner model displayed above.

GitHub Repository

bottom of page