Slide 1

Slide 1 text

vk-illuminati @yumcyawiz

Slide 2

Slide 2 text

vk-illuminati ● Vulkanリアルタイムレンダラー (新規) ● ラスタライズ + RTによるHybrid rendering ○ Inline ray tracing (VK_KHR_ray_query)を使用 ● ReSTIR DI + ReSTIR GI + 自作デノイザー (by DALL-E)

Slide 3

Slide 3 text

rtcamp 10 ● Full HD 60fps 10秒 ○ (4Kは画像出力がボトルネックになり断念) ● 各フレームは 1spp ● レンダリング : 80ms, 画像出力: 68ms ○ 合計で90秒 (今回の制約時間は256秒) ○ 設定を変えれば30-60fpsで動作 (RTX 3080) ● 依存ライブラリ ○ Vulkan-hpp, glm, tinyobjloader, stb, fpng ● シーン ○ Sponza (McGuire Computer Graphics Archive)

Slide 4

Slide 4 text

vk-illuminati (GUI)

Slide 5

Slide 5 text

Pipeline overview Visibility Buffer (Graphics) ReSTIR DI (Compute) ReSTIR GI (Compute) Denoiser (Compute) Post Process (Compute) ● Visibility (primitive ID, barycentrics) ● Motion vector ● Direct Illumination ● Global Illumination ● Denoised Image ● Final Image Debug view (Compute) Post Process (Graphics) Present (開発時)

Slide 6

Slide 6 text

ReSTIR DI/GI ● Temporal resampling + Spatial resampling ○ Spatial resampling後の結果をTemporal resamplingにフィードバック ● Confidence capping (M-capping) ● Confidence weight ○ Biasの増大を防ぐ ● Jacobian rejection heuristic (自作) ○ GIの壁際でのartifactを抑える ● Visibility reuse ○ 影のノイズを減らす (Biasとのトレードオフ) ● Boiling filter ○ 提出時には使わなかった

Slide 7

Slide 7 text

Denoiser ● Temporal denoising ○ 前フレームのNxN領域を探索して類似度が高くなるようなピクセルを選択 ○ 指数移動平均 ■ 類似度に応じて有効サンプル数を変化させる ● Spatial denoising ○ Bilateral filter ○ Edge stopping function ■ luminance, depth, normal, albedo

Slide 8

Slide 8 text

Result (ReSTIR DI) Off On

Slide 9

Slide 9 text

Result (ReSTIR GI) Off On

Slide 10

Slide 10 text

Result (Denoiser) Off On

Slide 11

Slide 11 text

Result (All) 1spp PT vk-illuminati

Slide 12

Slide 12 text

開発過程 DDD (Deadline Driven Development) を採用 提出 10/09 23:00 Vulkan tutorialを始める 09/30 三角形が出る 10/02 10/05 Sponzaが出る レイが飛ぶ 10/06 †気合† Total: 335 commits

Slide 13

Slide 13 text

References ● レンダリング ○ The Visibility Buffer: A Cache-Friendly Approach to Deferred Shading, https://jcgt.org/published/0002/02/04/ ○ Spatiotemporal reservoir resampling for real-time ray tracing with dynamic direct lighting, https://research.nvidia.com/publication/2020-07_spatiotemporal-reservoir-resampling-real-time-ray-tracing-dynamic-direct ○ ReSTIR GI: Path Resampling for Real-Time Path Tracing, https://research.nvidia.com/publication/2021-06_restir-gi-path-resampling-real-time-path-tracing ○ Generalized Resampled Importance Sampling: Foundations of ReSTIR, https://research.nvidia.com/publication/2022-07_generalized-resampled-importance-sampling-foundations-restir ○ A Gentle Introduction to ReSTIR: Path Reuse in Real-time, https://intro-to-restir.cwyman.org/ ○ Efficient Spatial Resampling Using the PDF Similarity, https://yusuketokuyoshi.com/ ○ RTXDI, https://github.com/NVIDIAGameWorks/RTXDI ○ rtxdi-runtime, https://github.com/NVIDIAGameWorks/rtxdi-runtime ○ Spatiotemporal Variance-Guided Filtering: Real-Time Reconstruction for Path-Traced Global Illumination, https://research.nvidia.com/publication/2017-07_spatiotemporal-variance-guided-filtering-real-time-reconstruction-path-traced ● Vulkan ○ Vulkan Tutorial, https://vulkan-tutorial.com/Introduction ○ ゼロからVulkan Ray Tracing, https://zenn.dev/nishiki/books/f468197dca2dd8 ○ Vulkan + GLFWでDear ImGuiを使う, https://zenn.dev/kinankomoti/articles/156fd17b74dcda ○ Vulkan-Samples, https://github.com/KhronosGroup/Vulkan-Samples ○ Vulkan Documentation, https://docs.vulkan.org/spec/latest/index.html ○ NVIDIA Vulkan Ray Tracing Tutorial, https://nvpro-samples.github.io/vk_raytracing_tutorial_KHR/