Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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!