4.7K Views
November 17, 24
スライド概要
VRコミュニケーションを支えるエンジニアをやっています
GLSLで パストレーシング を理解してみる とうとう @__tou__tou
自己紹介 とうとう @__tou__tou 仕事 VRの会社でエンジニアをやっています。Unity、リアルタ イムサーバーを触っています 趣味 •VRChat •シェーダー
パストレーシングとは 光線がオブジェクトや光源と何度も反射・屈折・散乱するプロセスをシミュレートし、 ピクセル毎の色を計算する手法 グローバルイルミネーション(GI)を実現することができる グローバルイルミネーションとは、間接照明を考慮して光をシミュレーションするこ と
シンプルなパストレーシング を理解します
以下の資料をベースにしています smallpt:Kevin Beason氏によってC++で書かれた99行のパストレーシングによる レンダラ http://www.kevinbeason.com/smallpt/ smallptのGLSL実装を試みたコード by Zavie https://www.shadertoy.com/view/4sfGDB 物理ベースレンダラ edupt解説 by hole(@h013) <- めちゃくちゃ分かりやすい https://kagamin.net/hole/edupt/index.htm 数式解説 https://qiita.com/pnlybubbles/items/5cb3cd3522e651cb536e
理論
パストレーシング
パストレーシング
レンダリング方程式
レンダリング方程式
再帰的なレンダリング方程式
このままだと計算できないので
モンテカルロ積分 数値的に計算できる!
モンテカルロ積分 平均 確率 pdf で Li をN回サンプリングして、サンプル数Nで割る
サンプリング方法
一様分布サンプリング すべての方向を等しい確率でサンプリングする方法 単位半球面の面積は2πなので、確率密度関数 pdfは1/2π
余弦インポータンスサンプリング 入射する光の寄与が大きい方向(表面の法線方向)を重点的にサンプリングする手法
計算 余弦インポータンスサンプリングの適用と計算できるところを計算すると….
計算 (BRDF)が分かれば計算できそう は入射する光に対してどの程度反射するかを表す比率的なもの
BRDF (Bidirectional Reflectance Distribution Function ) 双方向反射分布関数
BRDF(双方向反射分布関数) • BRDFは、ある方向から来る光が、別の方向にどのように反射されるかを記述する関 数 • 今回は、完全拡散面(Diffuse)と完全鏡面(Specular)のBRDFを紹介します。
完全拡散面 (Diffuse) • 入射方向に寄らず、全方向に等しく反射する面 • 反射点で乱反射して全方向に等しく反射しているように見える • 反射する量は物体毎に異なる
完全拡散面 (Diffuse) 完全拡散面の場合は、入射方向に寄らず全方向に等しく反射する面なので、 は定数 上の式を計算すると
完全鏡面(Specular) • 反射光の寄与は、反射角と等しい入射角をもつ入射光のみ
完全鏡面(Specular)
計算(完全拡散面の場合)
計算(完全鏡面の場合)
衝突判定
衝突判定 • 位置Xをどうやって求めるか
直線と球の衝突判定 直線の方程式 球の方程式
直線と球の衝突判定 直線の方程式 球の方程式
直線と球の衝突判定 2次方程式なので解の公式を使う
直線と球の衝突判定 解の公式 判別式
直線と球の衝突判定 衝突点X 判別式 det > 0 の時、直線と球は衝突する
実装に必要な情報まとめ
レンダリング方程式 完全拡散面 完全鏡面
直線と球の衝突判定 衝突点X 判別式 det > 0 の時、直線と球は衝突する
実装 https://twigl.app?ol=true&ss=-Nf_C-M1QFqvd8m8gpaZ
シーンの モデリング カメラレイの定 義 レンダリング方程式 の モンテカルロ積分
シーンのモデリング
シーンのモデリング r : 半径 p : 球の位置 e : 自己発光色 c : 反射率(アルベドカラー) refl : 面の種類
コーネルボックス 半径 球の 中心座標 自己 発光 アルベド カラー (反射率) 面の 種類
コーネルボックスの配置 真上から見た図 +x コーネルボックス +z
球と光源の配置 半径 球の 中心座標 自己 発光 アルベド カラー (反射率) 面の 種類
カメラの定義
カメラレイの定義
レンダリング方程式の モンテカルロ積分
モンテカルロ積分
レンダリング方程式の計算
衝突判定
完全拡散面の反射
完全拡散面の反射 パラメータ分離
完全鏡面の反射
やり残したこと
やり残したこと ● ガラス面 屈折 ● ロシアンルーレット 反射回数をいい感じにする ● NEE 光源に当たりやすい光の経路を重点的に選択