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.
Path Tracing in 5 minutesシングルファイルで拡張しやすいパストレーサーを作る@yumcyawiz2020/08/15OSK 夏休み LT 会 2020
View Slide
Intro「レイトレ」してみたいなあ「レイトレすごい!」「時代はレイトレーシング」最近こんな言葉をよく聞く気がします1
Introでも・・・「レイトレしてみたいけど難しそう」「C++ よくわからん」レイトレしたくても参入障壁は大きいようです2
Introそこで今回は見るだけで C++ でレイトレーサーを書いた気持ちになれる LT をします3
Goal後で拡張しやすいパストレーサーをシングルファイルで作るFigure 1: 今回のレンダラーで出た絵4
Project Setup
Project Setup今回使うのは• C++17• CMake• OpenMP5
CMakeFigure 2: CMakeLists.txt6
BuildFigure 3: Build の様子 7
Coding
Vec3Vec3 は 3 次元ベクトルを表すクラス8
RayRay は始点 (Vec3) と方向 (Vec3) を持つFigure 5: Ray Class9
RNGPCG32 を使って乱数生成Figure 6: PCG32 Random Number Generator10
Sampler乱数生成器のラッパーFigure 7: Sampler Class11
Filmカメラのフィルム (画像) を表すクラスFigure 8: Film Class12
FilmPPM 出力部分Figure 9: Film Class13
Cameraレイを生成するところピンホールカメラモデルFigure 10: Camera Class14
Material物体表面の反射特性を表すクラスレイを反射させる役割を持つFigure 11: Material Class15
Light光源を表現するクラスFigure 12: Light Class16
IntersectInfo交差計算の結果を表現する構造体Figure 13: IntersectInfo Struct17
Shape物体の形を表現する抽象クラスFigure 14: Shape Class18
Sphere球体を表現するクラスFigure 15: Sphere Class19
Plane平面を表現するクラスFigure 16: Plane Class20
Primitive物体を表現するクラスMaterial, Light, Shape を一緒に持つFigure 17: Primitive Class 21
Sky空の色を表現するクラスFigure 18: Sky Class22
Sceneシーンを表現するクラスカメラ, 物体集合, 空を一緒に持つFigure 19: Scene Class23
Integratorレイの持つ放射輝度を計算するパストレFigure 20: Integrator Class24
Rendererレンダリングを行う部分Figure 21: Renderer Class25
mainmain 関数Figure 22: main 関数26
Rendering
Test SceneFigure 23: Test Scene27
CornellBox SceneFigure 24: Cornell Box28