Path Tracer

Ray Tracer · CPU 离线路径追踪器

一个基于经典教程路线完成的 C++17 CPU 路径追踪器,实现随机采样、递归反弹、Lambertian、金属(metal)与介质(dielectric)材质、景深、运动模糊、纹理、AABB 与 BVH。

  • C++17
  • Path Tracing
  • Monte Carlo
  • BVH
语言
C++17
渲染方式
CPU 离线路径追踪
输出
PPM 图像
Ray Tracer 以 100 spp 输出的随机球场景

Overview

项目简介

这个项目跟随《Ray Tracing in One Weekend》与《Ray Tracing: The Next Week》的路线,围绕光线与场景求交、材质散射、随机采样和递归反弹搭建一个小型 CPU 路径追踪器。

页面展示的是项目实际生成的离线图像。10 spp 与 100 spp 使用同类随机球场景,用来直观看采样数增加后的噪声变化;这里不将教程中的方法描述为原创算法。

Results

真实结果展示

10 spp 随机球路径追踪结果 100 spp 10 spp

10 spp / 100 spp 采样对比

拖动滑杆改变分界线,观察相同分辨率下采样数增加后的噪声收敛。

100 spp 显示范围 50%

Implementation

实现亮点

随机采样与递归反弹

对像素进行多次随机采样,并递归追踪散射光线,以有限反弹深度累积颜色。

材质与相机效果

实现 Lambertian、metal、dielectric 三类材质,并加入景深与带时间采样的运动模糊。

包围盒与 BVH

使用 AABB 表示层次包围范围,再用 BVH 组织场景物体以减少不必要的求交测试。

Current Scope

当前范围

  • 当前以球体场景和教程中的基础材质为主,不是通用生产级渲染器。
  • 渲染结果离线写入 PPM 文本图像,不提供实时预览或交互式场景编辑。
  • 构建配置虽然能够发现并链接 OpenMP,但源码没有并行循环,页面不将其宣传为加速成果。
  • 项目没有记录统一硬件与参数下的 benchmark,因此页面不展示性能数据。

Sources & Notes