Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Path Tracing in 5 minutes

A7a5efde86e0137d32a93d8609b7a022?s=47 yumcyawiz
August 15, 2020

Path Tracing in 5 minutes

Slide for OSK Summer 2020 Lightning Talk.
Code is available at https://github.com/yumcyaWiz/pathtracing_in_5minutes
Choose summer_lt_2020 tag to make codes consistent with this slide.

A7a5efde86e0137d32a93d8609b7a022?s=128

yumcyawiz

August 15, 2020
Tweet

Transcript

  1. Path Tracing in 5 minutes シングルファイルで拡張しやすいパストレーサーを作る @yumcyawiz 2020/08/15 OSK 夏休み

    LT 会 2020
  2. Intro 「レイトレ」してみたいなあ 「レイトレすごい! 」 「時代はレイトレーシング」 最近こんな言葉をよく聞く気がします 1

  3. Intro でも・ ・ ・ 「レイトレしてみたいけど難しそう」 「C++ よくわからん」 レイトレしたくても参入障壁は大きいようです 2

  4. Intro そこで今回は見るだけで C++ でレイトレーサーを書いた気持ちにな れる LT をします 3

  5. Goal 後で拡張しやすいパストレーサーをシングルファイルで作る Figure 1: 今回のレンダラーで出た絵 4

  6. Project Setup

  7. Project Setup 今回使うのは • C++17 • CMake • OpenMP 5

  8. CMake Figure 2: CMakeLists.txt 6

  9. Build Figure 3: Build の様子 7

  10. Coding

  11. Vec3 Vec3 は 3 次元ベクトルを表すクラス 8

  12. Ray Ray は始点 (Vec3) と方向 (Vec3) を持つ Figure 5: Ray

    Class 9
  13. RNG PCG32 を使って乱数生成 Figure 6: PCG32 Random Number Generator 10

  14. Sampler 乱数生成器のラッパー Figure 7: Sampler Class 11

  15. Film カメラのフィルム (画像) を表すクラス Figure 8: Film Class 12

  16. Film PPM 出力部分 Figure 9: Film Class 13

  17. Camera レイを生成するところ ピンホールカメラモデル Figure 10: Camera Class 14

  18. Material 物体表面の反射特性を表すクラス レイを反射させる役割を持つ Figure 11: Material Class 15

  19. Light 光源を表現するクラス Figure 12: Light Class 16

  20. IntersectInfo 交差計算の結果を表現する構造体 Figure 13: IntersectInfo Struct 17

  21. Shape 物体の形を表現する抽象クラス Figure 14: Shape Class 18

  22. Sphere 球体を表現するクラス Figure 15: Sphere Class 19

  23. Plane 平面を表現するクラス Figure 16: Plane Class 20

  24. Primitive 物体を表現するクラス Material, Light, Shape を一緒に持つ Figure 17: Primitive Class

    21
  25. Sky 空の色を表現するクラス Figure 18: Sky Class 22

  26. Scene シーンを表現するクラス カメラ, 物体集合, 空を一緒に持つ Figure 19: Scene Class 23

  27. Integrator レイの持つ放射輝度を計算する パストレ Figure 20: Integrator Class 24

  28. Renderer レンダリングを行う部分 Figure 21: Renderer Class 25

  29. main main 関数 Figure 22: main 関数 26

  30. Rendering

  31. Test Scene Figure 23: Test Scene 27

  32. CornellBox Scene Figure 24: Cornell Box 28