Skip to content

PaperL/Toy_Ray_Tracer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PaperL's Toy Ray Tracer

简介

  • 作者:上海交通大学,2020级ACM班,PaperL

  • 版本:v0.5.4

  • 说明:2020-2021学年暑期小学期,PPCA课程项目。本项目题面原题面

  • 特别感谢:

    • 感谢助教 AIK2, 助教 XHRlyb 关于项目的耐心指导
    • 感谢 Marcythm 关于 Rust 语言的详尽教导
    • 感谢与 yichuan~ 关于光追原理的交流和讨论

当前版本渲染结果效果图

preview

《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 格式文件输入场景
    • 支持从 yamlJSON 文件读取场景并生成对应的静态 BVH 数据
    • 使用 criterion crate 实现基准测试 (Benchmark),用于比较不同版本代码的差异

Module Tree

  • 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

学习感想

  1. 原教程存在较多可以改进的地方以及代码中的公式错误
    • 变量命名规范及源文件结构
    • 浮点运算精度问题
    • RectangleHit 函数会产生 Nan, pdf_value 函数在无碰撞时产生错误的返回值 0
  2. 很好地学习了 Rust 语言基础
    • mut, Trait
    • 生命周期
    • 泛型
  3. 对于基础的光追系统有了较为深入的认识
  4. 提高了关于 GitHub 的熟悉程度
    • GitAction 及 tag 的使用
    • 及时 Commit 稳定代码来帮助快速定位 Bug 或回滚

About

PPCA 2021 Project 2

Resources

License

Stars

Watchers

Forks

Packages

No packages published