← Back to projects
C++20 • Vulkan 1.3 • GLSL

OrcaEngine

A 3D rendering engine and editor built from scratch in C++20 using Vulkan 1.3, featuring a custom ECS, offscreen editor viewport, real-time lighting and shadows, scene serialization, and rendering diagnostics.

OrcaEngine editor and Vulkan renderer

Overview

OrcaEngine is a 3D rendering engine and editor I built in C++20 to explore modern real-time rendering and engine architecture using Vulkan.

The renderer uses Vulkan 1.3 dynamic rendering and synchronization2, while the editor provides a dockable interface for inspecting entities, editing components, changing lighting and shadow settings, loading and saving scenes, and viewing rendering diagnostics in real time.

Technical Features

Vulkan Renderer

Built a Vulkan 1.3 renderer using dynamic rendering, synchronization2, command buffers, descriptor sets, depth buffering, and 8x MSAA.

Directional Shadows

Implemented directional shadow mapping with configurable hard and PCF filtering plus constant and slope-based shadow bias.

Custom ECS

Built an entity-component system for managing transforms, meshes, materials, lights, and the data extracted for rendering.

Editor

Built a dockable Dear ImGui editor with a scene hierarchy, component inspector, free-fly camera, debug controls, and an engine console.

Offscreen Viewport

Rendered the 3D scene to separate offscreen color and depth resources before displaying the resolved image inside the editor interface.

Scene Serialization

Implemented JSON scene serialization for saving and loading entities and their component data.

Rendering

Each frame is split into separate shadow, scene, and editor rendering passes. The shadow pass renders the scene from the directional light's perspective into a depth texture. The scene pass then renders the world into an offscreen multisampled viewport and resolves it to a texture that can be sampled by Dear ImGui.

The scene currently uses Phong lighting with directional lights and shadow mapping. Shadow filtering can be switched between hard shadows and percentage-closer filtering at runtime from the editor.

Architecture

The engine separates platform, Vulkan, rendering, scene, and editor responsibilities into dedicated systems rather than keeping rendering and application logic in one class.

Application
├── Window
├── VulkanContext
├── Swapchain
├── Renderer
├── Registry / ECS
├── EditorUI
└── Camera