Skip to content

I-Info/RT-101

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RT 101

一个从零开始的 Rust Ray Tracing / Path Tracing 学习项目。Learning with Codex.

Demo Img

当前阶段

第 23 步:Two-Sample MIS 和 Firefly Clamp。

已经实现:

  • Vec3 向量类型
  • Ray 射线类型
  • Camera 相机抽象
  • 可配置 look_from / look_at / view_up / FOV
  • 景深光圈采样
  • Rayon 并行像素渲染
  • 可配置图像宽度、宽高比、采样数、递归深度、输出路径
  • Hittable trait
  • HitRecord 命中记录
  • 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 采样
  • Pdf trait
  • CosinePdf / 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。

下一步

建议按这个顺序推进:

  1. 添加材质纹理。
  2. 添加运动模糊。
  3. 添加三角形网格。
  4. 添加 HDR 环境贴图。
  5. 更完整的 specular / caustics 处理。
  6. 添加可选 GPU 加速后端。
  7. 添加 GPU 实时渐进预览。

About

Learn Ray Tracing with Codex.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages