CUDA Ray Tracer
纯 CUDA/C++ 光线追踪器,支持 Blinn-Phong 着色、蒙特卡洛路径追踪、BVH 加速,以及仅用于 Phong + 单采样 的主光线排序路径。
核心特性
| 特性 | 说明 |
|---|---|
| Blinn-Phong 着色 | 环境光 + 漫反射 + 镜面反射,支持多光源 |
| 蒙特卡洛路径追踪 | 俄罗斯轮盘赌终止的全局光照 |
| BVH 加速结构 | 加速球体求交;平面仍走单独求交路径 |
| 光线排序 | 按命中物体 ID 排序主光线,降低单采样 Phong 模式下的 warp 分歧 |
| 材质系统 | 漫反射、塑料、金属、镜面预设 |
| 色调映射 | 运行时输出使用 Reinhard;代码/测试中保留 ACES helper |
| 多场景 | Demo、Cornell Box、随机球体 |
快速开始
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
# 默认 Phong
build/bin/ray_tracer
# 1080p + 多采样
build/bin/ray_tracer -w 1920 -h 1080 -s 16
# 路径追踪 Cornell Box
build/bin/ray_tracer --scene cornell -p -s 100
# 光线排序仅支持 Phong + 单采样
build/bin/ray_tracer --scene demo --sort -s 1
命令行参数
| 参数 | 说明 | 默认值 |
|---|---|---|
-w |
图像宽度 | 800 |
-h |
图像高度 | 600 |
-s |
每像素采样数 | 1 |
-d |
最大光线深度,必须 > 0 | 5 |
-p |
启用路径追踪 | 关闭 |
-o |
输出文件名 | output.ppm |
--scene |
场景名称 (demo / cornell / random) |
demo |
--sort |
启用光线排序(仅 Phong + 单采样) |
关闭 |
测试
cd build
ctest --output-on-failure
测试二进制位于 build/bin/。
GitHub 托管 runner 不提供 CUDA 设备,因此仓库 CI 目前只验证配置、编译和格式;GPU 测试需要在本地或自托管 CUDA 环境中执行。
技术说明
- 普通材质不会再在路径追踪中被错误地当作自发光体。
- 场景工厂函数每次都会重置
SceneBuilder与输出球体数组,可安全复用。 Renderer会把纯渲染时间与排序分析时间分开统计。
项目结构
ray-tracer/
├── include/ # 头文件(vec3, ray, camera, geometry, material, BVH, ...)
├── src/ # 主程序入口和预设场景
├── tests/ # unit / property tests
├── .github/workflows/
├── CMakeLists.txt
└── README.md