Skip to content

Salamander

A Vulkan-based 3D rendering engine built with C++20

Project Overview

Salamander is a 3D rendering engine built with Vulkan using C++20. Developed as a university project for the Graphics Programming 2 course at Howest University, it demonstrates the capabilities of the Vulkan framework while adhering to modern design practices.

Modern Rendering

Deferred rendering pipeline with HDR and tone mapping for realistic lighting.

Advanced Lighting

Directional and omni lights with shadow mapping and Image-Based Lighting (IBL).

Optimization

Double buffering, depth prepass, and mipmap generation for improved performance.

Rendering Pipeline

Depth Prepass
Albedo Map
Normal Map
Roughness Map
Lighting Pass (HDR)
Post-processing
Depth Prepass

Automatic Camera Exposure

The engine features automatic exposure adjustment that dynamically adapts to scene brightness, simulating how a real camera or the human eye responds to changing light conditions.

The Salamander Journey

Development of Salamander started in February 2025 as a part of university course called Graphics Programming 2. It thought me a lot about how modern graphics APIs work and what it takes to render simple triangle on the GPU, as well as graphics techniques commonly used in rendering nowadays, such as HDR/tone mapping, IBL, shadow mapping. Later on I started expanding project myself. Proper refactoring, new graphics features as automatic camera exposure and etc.

Technical Challenges Overcome

  • Vulkan's explicit memory management required careful handling of resources and layouts
  • Debugging complex synchronization issues between rendering passes
  • Implementing physically-based rendering with accurate material properties
  • Optimizing shadow mapping techniques for directional lights
  • Fixing bugs related to memory layouts, normals, and sampling methods

Despite these challenges, Salamander became not only a lesson to me, but a modern rendering platform, that will be expanded and maybe released one day.

Technical Highlights

Synchronization 2

Efficient resource management

🔄

Dynamic Rendering

Flexible pipeline creation

📐

Vertex Pulling

GPU addresses for efficient geometry

💡

Deferred Rendering

Complex lighting scenarios

✂️

Alpha Cutout

Complex material support

🖼️

Mipmap Generation

Improved texture quality

📷

Auto Exposure

Realistic light adaptation

Designed and built by Ivans Minajevs.