-
作者:上海交通大学,2020级ACM班,PaperL
-
版本:
v0.5.4
-
特别感谢:
《NO CODE NO LIFE》
高清图见 Release
编译运行指令
make run-release
-
实现 Ray Tracing in One Weekend 系列教程 Book1~3
-
渲染最终作品
-
提高代码质量
- 整理源文件结构
- 规范变量命名
- 规范浮点数计算,处理精度问题
-
改进算法
- 合并三个方向的
Rectangle
类 - 实现单向透光的
OneWayRectangle
类 - 实现
Transform
类的 PDF 功能 - 修正教程中 PDF 相关公式错误,实现更合理的混合多种 PDF 的方式
- 使用泛型避免不定长的
dyn
类型相对于定长类型的额外开销 - 实现
Triangle
类 - 扩展
Instance
类 - 使用过程宏生成静态 BVH 数据,提高渲染效率
- 合并三个方向的
-
扩展功能
- 使用 GitHub Action,实现自动根据 tag 将稳定版本代码编译运行,并将生成结果上传至 Release
- 提供友好的控制台 UI 界面
- 实现多线程并行计算
- 以自定义质量因子的
JPEG
格式输出渲染结果,平衡图像大小与质量 - 支持从
obj
格式文件输入场景 - 支持从
yaml
或JSON
文件读取场景并生成对应的静态 BVH 数据 - 使用
criterion crate
实现基准测试 (Benchmark),用于比较不同版本代码的差异
- create
scene
- basic
vec3
,ray
,camera
,onb
- hittable
obj_model
- instance
translate
,rotate
,motion_translate
,motion_rotate
,zoom
,constant_medium
- object
sphere
,rectangle
,cube
,triangle
,ring
- bvh
aabb
,bvh_node
- material
lambertian
,metal
,dielectric
,diffuse_light
,isotropic
- pdf
cos_pdf
,hittable_pdf
- texture
solid_color
,image_texture
,checker
,gradient
自动代码格式化指令
cargo fmt
代码检查指令
cargo clippy
- 原教程存在较多可以改进的地方以及代码中的公式错误
- 变量命名规范及源文件结构
- 浮点运算精度问题
Rectangle
的Hit
函数会产生Nan
,pdf_value
函数在无碰撞时产生错误的返回值0
- 很好地学习了 Rust 语言基础
- mut, Trait
- 生命周期
- 泛型
- 对于基础的光追系统有了较为深入的认识
- 提高了关于 GitHub 的熟悉程度
- GitAction 及 tag 的使用
- 及时 Commit 稳定代码来帮助快速定位 Bug 或回滚