Path Tracer
Ray Tracer · CPU 离线路径追踪器
一个基于经典教程路线完成的 C++17 CPU 路径追踪器,实现随机采样、递归反弹、Lambertian、金属(metal)与介质(dielectric)材质、景深、运动模糊、纹理、AABB 与 BVH。
- 语言
- C++17
- 渲染方式
- CPU 离线路径追踪
- 输出
- PPM 图像
Overview
项目简介
这个项目跟随《Ray Tracing in One Weekend》与《Ray Tracing: The Next Week》的路线,围绕光线与场景求交、材质散射、随机采样和递归反弹搭建一个小型 CPU 路径追踪器。
页面展示的是项目实际生成的离线图像。10 spp 与 100 spp 使用同类随机球场景,用来直观看采样数增加后的噪声变化;这里不将教程中的方法描述为原创算法。
Results
真实结果展示
10 spp / 100 spp 采样对比
拖动滑杆改变分界线,观察相同分辨率下采样数增加后的噪声收敛。
棋盘格纹理
用程序化棋盘格纹理验证纹理坐标与材质采样流程。
Implementation
实现亮点
随机采样与递归反弹
对像素进行多次随机采样,并递归追踪散射光线,以有限反弹深度累积颜色。
材质与相机效果
实现 Lambertian、metal、dielectric 三类材质,并加入景深与带时间采样的运动模糊。
包围盒与 BVH
使用 AABB 表示层次包围范围,再用 BVH 组织场景物体以减少不必要的求交测试。
Current Scope
当前范围
- 当前以球体场景和教程中的基础材质为主,不是通用生产级渲染器。
- 渲染结果离线写入 PPM 文本图像,不提供实时预览或交互式场景编辑。
- 构建配置虽然能够发现并链接 OpenMP,但源码没有并行循环,页面不将其宣传为加速成果。
- 项目没有记录统一硬件与参数下的 benchmark,因此页面不展示性能数据。
Sources & Notes
参考与相关文章
参考资料
- Ray Tracing in One Weekend
基础路径追踪、材质、相机与景深实现的主要参考。
- Ray Tracing: The Next Week
运动模糊、纹理、AABB 与 BVH 等扩展内容的主要参考。
相关文章
这个项目目前还没有单独整理成博客文章,先保留项目页与上面的官方参考资料。