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

Path Tracing in 5 minutes

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.

yumcyawiz

August 15, 2020
Tweet

More Decks by yumcyawiz

Other Decks in Programming

Transcript

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

    View Slide

  2. Intro
    「レイトレ」してみたいなあ
    「レイトレすごい!

    「時代はレイトレーシング」
    最近こんな言葉をよく聞く気がします
    1

    View Slide

  3. Intro
    でも・


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

    View Slide

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

    View Slide

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

    View Slide

  6. Project Setup

    View Slide

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

    View Slide

  8. CMake
    Figure 2: CMakeLists.txt
    6

    View Slide

  9. Build
    Figure 3: Build の様子 7

    View Slide

  10. Coding

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  30. Rendering

    View Slide

  31. Test Scene
    Figure 23: Test Scene
    27

    View Slide

  32. CornellBox Scene
    Figure 24: Cornell Box
    28

    View Slide