Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GLSLでパストレーシングしてコーネルボックスを出す
Search
yumcyawiz
November 28, 2020
Programming
0
430
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
260
ReSTIRの数理と実装 (rtcamp10)
yumcyawiz
1
750
fredholm(rtcamp9)
yumcyawiz
0
100
フォトンマッピングをパス空間から考える
yumcyawiz
0
360
fredholm
yumcyawiz
0
250
Introduction to volume rendering
yumcyawiz
0
1.9k
OSK#p-ray2020年度講義: 古典的レイトレーサーの実装
yumcyawiz
0
250
Ray Tracing: Overview
yumcyawiz
7
1.2k
Pybind11でC++とPythonのいいとこ取りをする
yumcyawiz
0
880
Other Decks in Programming
See All in Programming
As an Engineers, let's build the CRM system via LINE Official Account 2.0
clonn
1
620
as(型アサーション)を書く前にできること
marokanatani
10
3k
Jakarta EE meets AI
ivargrimstad
0
980
The rollercoaster of releasing an Android, iOS, and macOS app with Kotlin Multiplatform | droidcon Italy
prof18
0
120
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
420
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
270
デザインパターンで理解するLLMエージェントの作り方 / How to develop an LLM agent using agentic design patterns
rkaga
11
2.3k
Vue.js_好きに捧ぐ Nuxt Hub で簡単に始めるCloudflare
xiombatsg
1
110
Flutterを言い訳にしない!アプリの使い心地改善テクニック5選🔥
kno3a87
3
360
Djangoの開発環境で工夫したこと - pre-commit / DevContainer
hiroki_yod
1
580
14 Years of iOS: Lessons and Key Points
seyfoyun
0
390
Micro Frontends Unmasked Opportunities, Challenges, Alternatives
manfredsteyer
PRO
0
200
Featured
See All Featured
Happy Clients
brianwarren
98
6.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Unsuck your backbone
ammeep
669
57k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
How GitHub (no longer) Works
holman
310
140k
Building an army of robots
kneath
302
43k
Bash Introduction
62gerente
608
210k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
RailsConf 2023
tenderlove
29
920
The Cult of Friendly URLs
andyhume
78
6.1k
The Language of Interfaces
destraynor
154
24k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
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!