一个从零开始的 Rust Ray Tracing / Path Tracing 学习项目。Learning with Codex.
第 23 步:Two-Sample MIS 和 Firefly Clamp。
已经实现:
Vec3向量类型Ray射线类型Camera相机抽象- 可配置
look_from/look_at/view_up/ FOV - 景深光圈采样
- Rayon 并行像素渲染
- 可配置图像宽度、宽高比、采样数、递归深度、输出路径
HittabletraitHitRecord命中记录HittableList场景物体列表Aabb轴对齐包围盒BvhNode层次包围盒加速结构Sphere球体几何Material材质接口Lambertian漫反射材质Metal镜面材质Dielectric玻璃材质DiffuseLight自发光材质- 随机多材质球体场景
- 随机太阳角度和相机视角
- 随机小球半径、贴地高度和分布密度
- 放置随机小球时避免球体互相重合
- 随机地面小型自发光球体
- 球形光源直接采样
- 漫反射表面 shadow ray 可见性测试
- Lambertian cosine-weighted BSDF sampling
- light sampling / BSDF sampling 的 power heuristic MIS 权重
- 可开关玻璃反射/折射 path splitting
- 可配置玻璃路径最大分裂深度
- 无限远太阳盘光源
- 程序化天空背景和太阳 glow
- 太阳直接光 shadow ray 采样
PdftraitCosinePdf/SunPdf/MixturePdf- 用混合 PDF 统一采样太阳方向和 Lambertian BSDF 方向
- 漫反射表面 Two-Sample MIS:每次同时采样一次太阳方向和一次 BSDF 方向
- 用 power heuristic 合并 light sampling / BSDF sampling 的贡献
- 可选单样本亮度 clamp,用于抑制极端 firefly 样本
- 每像素自适应采样
- 基于亮度方差的在线收敛判断
- 输出平均 spp
minifb渐进式预览窗口- 渲染过程中刷新累积 framebuffer
- HDR 浮点颜色经 exposure + ACES filmic tone mapping 输出到窗口和 PNG
- 每像素多采样抗锯齿
- gamma correction
- 背景渐变
- 递归散射着色
- 输出 PNG 图片
cargo run运行后会在项目根目录生成:
output.png
默认会打开一个预览窗口展示渲染逐步收敛的过程。按 Esc 或关闭窗口只会关闭预览,
渲染仍会继续并写出最终 PNG。
建议按这个顺序推进:
- 添加材质纹理。
- 添加运动模糊。
- 添加三角形网格。
- 添加 HDR 环境贴图。
- 更完整的 specular / caustics 处理。
- 添加可选 GPU 加速后端。
- 添加 GPU 实时渐进预览。
