Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Project Setup

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

CMake Figure 2: CMakeLists.txt 6

Slide 9

Slide 9 text

Build Figure 3: Build の様子 7

Slide 10

Slide 10 text

Coding

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

main main 関数 Figure 22: main 関数 26

Slide 30

Slide 30 text

Rendering

Slide 31

Slide 31 text

Test Scene Figure 23: Test Scene 27

Slide 32

Slide 32 text

CornellBox Scene Figure 24: Cornell Box 28