Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GLSLでパストレーシングしてコーネルボックスを出す
Search
yumcyawiz
November 28, 2020
Programming
0
520
GLSLでパストレーシングしてコーネルボックスを出す
OSK11月LT会のスライド
Github:
https://github.com/yumcyaWiz/glsl-cornellbox
yumcyawiz
November 28, 2020
Tweet
Share
More Decks by yumcyawiz
See All by yumcyawiz
rtcamp 10 (vk-illuminati)
yumcyawiz
1
350
ReSTIRの数理と実装 (rtcamp10)
yumcyawiz
1
990
fredholm(rtcamp9)
yumcyawiz
0
120
フォトンマッピングをパス空間から考える
yumcyawiz
0
430
fredholm
yumcyawiz
0
280
Introduction to volume rendering
yumcyawiz
0
2.2k
OSK#p-ray2020年度講義: 古典的レイトレーサーの実装
yumcyawiz
0
270
Ray Tracing: Overview
yumcyawiz
7
1.2k
Pybind11でC++とPythonのいいとこ取りをする
yumcyawiz
0
970
Other Decks in Programming
See All in Programming
AIコーディングの本質は“コード“ではなく“構造“だった / The essence of AI coding is not “code” but "structure
seike460
PRO
2
540
Embracing Ruby magic
vinistock
2
280
状態と共に暮らす:ステートフルへの挑戦
ypresto
3
1.3k
カウシェで Four Keys の改善を試みた理由
ike002jp
1
140
データベースの技術選定を突き詰める ~複数事例から考える最適なデータベースの選び方~
nnaka2992
3
2.6k
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
160
파급효과: From AI to Android Development
l2hyunwoo
0
170
ビカム・ア・コパイロット
ymd65536
1
160
fieldalignmentから見るGoの構造体
kuro_kurorrr
0
140
Boast Code Party / RubyKaigi 2025 After Event
lemonade_37
0
120
20250426 GDGoC 合同新歓 - GDGoC のススメ
getty708
0
120
KANNA Android の技術的課題と取り組み
watabee
1
580
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
Adopting Sorbet at Scale
ufuk
76
9.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Optimising Largest Contentful Paint
csswizardry
37
3.2k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
A Tale of Four Properties
chriscoyier
159
23k
The Invisible Side of Design
smashingmag
299
50k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
179
53k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
Optimizing for Happiness
mojombo
378
70k
We Have a Design System, Now What?
morganepeng
52
7.6k
Transcript
GLSLでパストレーシングしてコーネルボックスを 出す OSK11月LT会 @yumcyawiz
GLSLとは?
GLSLとは? • OpenGLで使用されるシェーダー • ユーザー定義のグラフィクス処理を記述できる • 計算はGPUで行われる • 文法はCと似ている
シェーダーの種類 • Vertex Shader • Fragment Shader • Geometry Shader
• Tessellation Shader • Compute Shader
シェーダーで処理する流れ Vertex Shader ポリゴン データ Fragment Shader 出力 頂点座標 テクスチャ座標など
頂点座標をスクリー ン上の座標に変換 各画素の色を計算
Vertex Shaderの例 vPosに頂点情報が入っている gl_Positionに座標変換した頂点情報が格納される
GLSLでパストレ?
GLSLでパストレ? • Vertex Shader -> Fragment Shaderの流れで自然にパストレを 組み込むのは不可能
GLSLでパストレ • Vertex Shader -> Fragment Shaderの流れで自然にパストレを 組み込むのは不可能 画面一杯に四角形を表示して, Fragment
Shaderでパストレする (レイマーチングと同じ方法)
四角形 + Fragment Shader Vertex Shader 画面を覆う四角形 Fragment Shader 各画素の色をパストレ
で計算 3次元空間上に置かれた 四角形
GPUレイトレ • 現在はOptiX, DirectX RayTracing, Vulkan RayTracingがあるの でGLSL縛りでレイトレする必要性はない 今回の主題: GLSLだけでどこまで実装できるのか?
パストレの実装 in GLSL
レイの表現 • vec3は最初から用意されている • classはないがCライクな構造体が利用できる
カメラ • normalizeなどvec3の組み込み関数が使える • C++の場合と全く同じように実装できる
物体 • 物体情報を全部Structに押し込む • type=0(球), type=1(平面)
物体とのintersect • typeに応じてintersectの演算を切り替える
シーンの表現 • Primitiveの配列をハードコーディング(本当はCPU側から渡し たほうが良い)
シーンとのintersect • 線形探索(頑張ればBVHも組み込めるみたい)
乱数 • xorshift32を利用
シード • 画素の位置, 現在のサンプル数をhash関数に通したものをシー ドに設定(アドホックだが見た目は悪くない)
パストレ • これもCPUの場合と同様に実装できる • BRDFはDiffuse only
サンプルの蓄積 • Framebufferを用意し, サンプル蓄積用のテクスチャにレンダリ ングする
結果の表示 • サンプル蓄積用のテクスチャをサンプル数で割ったものを画面 に表示
結果 実際に動いているところをお見せします
Future Works • コードをもっと綺麗に書きたい • GUIを付ける • インタラクティブな操作を可能にする • BVHを組み込んでsponzaとかレンダリングしてみたい
• Disney BRDF • NEE, MIS, BDPTなども実装してみる
Thank you for listening!