Slide 1

Slide 1 text

GLSLでパストレーシングしてコーネルボックスを 出す OSK11月LT会 @yumcyawiz

Slide 2

Slide 2 text

GLSLとは?

Slide 3

Slide 3 text

GLSLとは? • OpenGLで使用されるシェーダー • ユーザー定義のグラフィクス処理を記述できる • 計算はGPUで行われる • 文法はCと似ている

Slide 4

Slide 4 text

シェーダーの種類 • Vertex Shader • Fragment Shader • Geometry Shader • Tessellation Shader • Compute Shader

Slide 5

Slide 5 text

シェーダーで処理する流れ Vertex Shader ポリゴン データ Fragment Shader 出力 頂点座標 テクスチャ座標など 頂点座標をスクリー ン上の座標に変換 各画素の色を計算

Slide 6

Slide 6 text

Vertex Shaderの例 vPosに頂点情報が入っている gl_Positionに座標変換した頂点情報が格納される

Slide 7

Slide 7 text

GLSLでパストレ?

Slide 8

Slide 8 text

GLSLでパストレ? • Vertex Shader -> Fragment Shaderの流れで自然にパストレを 組み込むのは不可能

Slide 9

Slide 9 text

GLSLでパストレ • Vertex Shader -> Fragment Shaderの流れで自然にパストレを 組み込むのは不可能 画面一杯に四角形を表示して, Fragment Shaderでパストレする (レイマーチングと同じ方法)

Slide 10

Slide 10 text

四角形 + Fragment Shader Vertex Shader 画面を覆う四角形 Fragment Shader 各画素の色をパストレ で計算 3次元空間上に置かれた 四角形

Slide 11

Slide 11 text

GPUレイトレ • 現在はOptiX, DirectX RayTracing, Vulkan RayTracingがあるの でGLSL縛りでレイトレする必要性はない 今回の主題: GLSLだけでどこまで実装できるのか?

Slide 12

Slide 12 text

パストレの実装 in GLSL

Slide 13

Slide 13 text

レイの表現 • vec3は最初から用意されている • classはないがCライクな構造体が利用できる

Slide 14

Slide 14 text

カメラ • normalizeなどvec3の組み込み関数が使える • C++の場合と全く同じように実装できる

Slide 15

Slide 15 text

物体 • 物体情報を全部Structに押し込む • type=0(球), type=1(平面)

Slide 16

Slide 16 text

物体とのintersect • typeに応じてintersectの演算を切り替える

Slide 17

Slide 17 text

シーンの表現 • Primitiveの配列をハードコーディング(本当はCPU側から渡し たほうが良い)

Slide 18

Slide 18 text

シーンとのintersect • 線形探索(頑張ればBVHも組み込めるみたい)

Slide 19

Slide 19 text

乱数 • xorshift32を利用

Slide 20

Slide 20 text

シード • 画素の位置, 現在のサンプル数をhash関数に通したものをシー ドに設定(アドホックだが見た目は悪くない)

Slide 21

Slide 21 text

パストレ • これもCPUの場合と同様に実装できる • BRDFはDiffuse only

Slide 22

Slide 22 text

サンプルの蓄積 • Framebufferを用意し, サンプル蓄積用のテクスチャにレンダリ ングする

Slide 23

Slide 23 text

結果の表示 • サンプル蓄積用のテクスチャをサンプル数で割ったものを画面 に表示

Slide 24

Slide 24 text

結果 実際に動いているところをお見せします

Slide 25

Slide 25 text

Future Works • コードをもっと綺麗に書きたい • GUIを付ける • インタラクティブな操作を可能にする • BVHを組み込んでsponzaとかレンダリングしてみたい • Disney BRDF • NEE, MIS, BDPTなども実装してみる

Slide 26

Slide 26 text

Thank you for listening!