Solo C++20 · Vulkan 1.3 · no editor host

Hybrid renderer I own end to end — path tracer + deferred on one scene graph.

Not a Unity plugin. Not a toy Cornell box. ~52K lines C++, ~14K GLSL, 121 shaders — KHR RT, ReSTIR GI, DLSS Ray Reconstruction, and a multi-pipeline inverse lab with published ΔPSNR plates.

Shaoxuan (Frank) Yin github.com/Qervas/ohao_engine Graphics / GPU systems
~67 fps
RT path-traced helmet orbit
DLSS-RR · outdoor HDRI
+24.5 dB
Diff-IR quality plate ΔPSNR
outdoor dense roughness
2 pipes
Deferred + KHR PT share
scene · materials · TLAS
Live · path-traced orbit

01 — Architecture

One scene. Two rendering contracts.

Built to learn how a modern hybrid renderer is wired — not wrapped in an engine SDK. Path tracer is ground truth and indirect light. Deferred is interactive iteration. Hybrid adds RT shadows + 1-bounce RT GI on the deferred G-buffer.

Path tracer

Vulkan KHR RT

Raygen / closest-hit / miss / any-hit. MIS with Owen-scrambled Sobol. Offline + realtime rgen variants. NEE, env CDF, progressive accumulation.

Deferred

Real-time product path

G-buffer, bindless materials, PBR (Cook-Torrance GGX). Shared TLAS with the RT stack. Fast iteration without reloading the world.

Systems

Not only pixels

Physics (GJK/EPA + BVH), audio, animation, scene ECS. Same C++20 modular layout — render / gpu / physics / scene crates.

MetalRoughSpheres BRDF calibration
MetalRoughSpheres · rough↔smooth · metal↔dielectric calibration grid

02 — Real-time path tracing

Interactive 1-spp that still looks intentional.

NVIDIA DLSS 4 Ray Reconstruction (raw NGX Vulkan on Linux) + vendor-neutral SVGF. ReSTIR GI on outdoor HDRI. Offline path: Intel OIDN + NRD compose.

ReSTIR GI · outdoor

ReSTIR off
ReSTIR on
ReSTIR off ReSTIR on Drag

OIDN · 16 spp helmet

16 spp raw
OIDN denoised
16 spp raw OIDN Drag
DLSS-RRNGX Vulkan · Linux
SVGFvendor-neutral denoise
ReSTIRGI reservoirs · outdoor
OIDN / NRDoffline + compose

03 — Inverse lab

Recover materials from pixels — on the same Vulkan host.

Multi-pipeline IR: path-tracer oracle (capture-gated LABTEST) + Diff-IR Deferred sibling where free dense maps are the beauty source of truth. Fit is train-only. Published dB always name the metric domain.

Diff-IR quality plate matrix
Diff-IR quality plate · 1080p SHOW · spheres · helmet · outdoor — wrong init → recovered → GT
Preset Init → train PSNR ΔPSNR Rough map MSE Domain
spheres 38.3 → 58.1 +19.8 dB 0.362 → 0.179 Deferred dense ORM · 1080p
helmet 35.8 → 57.6 +21.8 dB 0.362 → 0.081 same
outdoor 32.4 → 56.9 +24.5 dB 0.362 → 0.194 same
Analytic albedo path: GRADCHECK vs finite differences, ~19.7× wall-clock vs full 3-pass coord FD. Not reverse-mode autodiff theater — linear solve + residual + sparse polish

04 — Interview mode

They ask X. You point here.

Keyboard 1–5 jumps beats. Send this URL before the call. No textbook chapters — proof first.

They ask You show
“What is OHAO?” Hero — hybrid Vulkan RT, orbit video, ~67 fps claim
“Path tracer or raster?” Stack — both, shared scene / materials / TLAS
“How do you make 1-spp usable?” Realtime — drag ReSTIR + OIDN compares
“Any research-y results?” Inverse — Diff-IR plates, +19.8…+24.5 dB, capture-gated PT
“Is inverse just a slide demo?” No — live inverse_fit + RESULTS.md tables; museum / dense maps ship in docs/media
“Code?” github.com/Qervas/ohao_engine

OHAO Engine — solo Vulkan 1.3 hybrid renderer (path tracer + deferred + inverse lab). Demo: https://qervas.github.io/ohao-engine/