GLTF + PBR renderer

Vulkan C++ GLFW GLSL

— DATE

December 2025


— TOOLS

C++, Vulkan, Python, GLFW, GLSL


— LINKS

-> GitHub

Whisper Engine is a rendering engine for my own personal projects, where I wanted to apply lessons from my previous attempts.


Render-graphs, art imports and code reflection were the aspects I wanted to work on most. For any serious project, I need to make sure artists can import models and have them look as they expect, which is why I focused on supporting gltf and PBR materials.

CONTEXT

The decisions were made with a 3D open world game in a forest in mind. This means few light sources, solid ambient lighting, and performant techniques.

Adam Head, Unity Technologies (Sketchfab)

Lieutenant Head, Unity Technologies (Sketchfab)

3D model courtesy of Santiago Piedrahita Bello

Forward+

Due to the hypothetically low light source count, I went with forward+ over deferred rendering. "+" stands for a depth and normals prepass which we use for basic culling as well as a Screen Space Ambient Occlusion effect.


Having profiled my project with Tracy, I can say the prepass neither added nor removed to rendering time, while allowing screen space rendering techniques.

Environment-based lighting

Using HDRs for ambient lighting means better integration of assets in the scene, as well as improved reflections.


The environment is sent to the shader as a mipmap which gets rendered at different resolutions based on the objects distance and roughness.


This, plus the BRDF LUT lead to convincing reflections and shading at minimal cost.

Shadow map

Shadow map techniques are something I really want to improve on in the future. In a world of Ray Tracing and Global Illumination, it is still a highly convincing and performant technique which doesn’t drain VRam as much.


The current iteration simply checks for occlusion with an added noise and radius check to soften shadow edges as convincingly as possible.

FROST

Frost is my reflection program written in Python which parses my code looking for markers. It then generates header files with the necessary Meta information to create intelligent editors in C++.

Example of code being turned to editor by Frost

ACKNOWLEDGEMENTS

Alien creature 3D model courtesy of Santiago Piedrahita Bello (-> Artstation)