Минималистичный path tracer на Vulkan RT (KHR extension). Рендерит Cornell Box с прямым освещением, тенями и диффузными отскоками, накапливая сэмплы через temporal accumulation
- BLAS + TLAS через
VK_KHR_acceleration_structure - Ray tracing pipeline: raygen -> closest hit -> 2x miss (primary + shadow)
- Raygen: до 5 bounces, cosine-weighted hemisphere sampling, Russian roulette
- Прямое освещение: shadow ray к дисковому источнику, attenuation по расстоянию
- Накопление: running average по кадрам (
accumImage), tone mapping (Reinhard) + gamma 2.2 - SBT собирается вручную с учётом
shaderGroupHandleAlignment/shaderGroupBaseAlignment
- Vulkan SDK ≥ 1.3 (с
glslangValidatorв PATH) - GLFW 3
- GLM
- GPU с поддержкой
VK_KHR_ray_tracing_pipeline
cmake -B build
cmake --build build -j$(nproc)
./build/vulkan-rtШейдеры компилируются автоматически при сборке через glslangValidator.
src/
main.cpp - точка входа
App.h / App.cpp - окно, swapchain, главный цикл
VkContext.h/.cpp - instance, device, буферы, команды
AccelStructure.h/.cpp - BLAS / TLAS builder
RTPipeline.h/.cpp - дескрипторы, pipeline, SBT
Scene.h - Vertex, SceneUBO, Camera, геометрия Cornell Box
shaders/
raygen.rgen - основной path tracing loop
closesthit.rchit - интерполяция атрибутов по barycentric
miss.rmiss - primary miss (нет попадания → выход из цикла)
shadow.rmiss - shadow miss (путь не заблокирован)
Работает на Linux (X11 и Wayland - GLFW абстрагирует оба) и на Windows. На винде только нужно поправить флаги компилятора в CMakeLists.txt (-Wall -Wextra -> /W4 для MSVC) и подтянуть пакеты через find_package. Требуется дискретная GPU с RT-поддержкой