本文会介绍使用Vulkan来实现实时光线追踪的过程。
Vulkan是一个低开销、跨平台的二维、三维图形与计算的API,比起OpenGL更加底层,更加底层意味着可以优化性能表现的地方更多,可以提供较高的性能表现。
光线追踪(英语:ray tracing)是三维计算机图形学中的特殊渲染算法,追踪光线从来源开始照射到物体上,再由物体反射的光线“路径”,由于完整运算所有路径十分消耗运算资源,因此现有光线追踪技术仅运算“目所能及”的光线路径。
实时光线追踪(Real-Time Ray Tracing)原理上与光线追踪没有区别,而是使用了硬件加速、减少采样量、步进长度来减少计算量,最后可以达到实时水平(每秒可以绘制多帧画面)。细节可以参考高质量实时渲染:实时光线追踪
图1是实时光追在 Wolfenstein: Youngblood 中的应用对比。
图1 (左侧没有开启反射 右侧开启光线追踪的反射) |
---|
技术路线
1 学习vulkan
过程: 通过学习https://vulkan-tutorial.com/ 和https://vkguide.dev/ 来初步掌握Vulkan的基本概念
https://github.com/yufeiran/LearnVulkan
2 搭建一个可以渲染多个物体的小框架
https://github.com/yufeiran/miniVulkanRender
Vulkan:用dynamic uniform绘制多个物体
3 开始学习Ray Tracing
准备学习一些tutorial:NVIDIA Vulkan Ray Tracing Tutorials,然后自己实现一个小的光线追踪框架
同时学习gltf格式:https://github.khronos.org/glTF-Tutorials/gltfTutorial/
硬件加速光线追踪原理解析
我对显卡如何实现硬件加速光追的细节比较感兴趣,查了一些资料,整理成ppt:
CSIG竞赛相关材料
DemoVideo
文档
渲染器实现
在完成竞赛后,我也自行实现了一个自己的渲染器 https://github.com/yufeiran/miniVulkanRenderer2
参考链接
原理
tutorial
RayTracingInVulkan
NVIDIA Vulkan Ray Tracing Tutorials