4K Views
October 14, 24
スライド概要
2024/10/11 - 13 に初島で開催されたレイトレ合宿 10 で発表したセミナー資料です。
リー代数による回転公式を利用して、GGX の計算に現れるヤコビアンを計算しよう、というのが主な内容です。
リー代数の数学的側面にはほとんど触れていません(タイトル詐欺)
Q: リー代数を使わなくても計算できるのでは?
A: せっかくなので使ってみたかったのと、リー代数の回転公式を紹介したかったので…
X: Twitter: https://x.com/_Pheema_
レイトレ合宿 10: https://sites.google.com/view/rtcamp10
レイトレ合宿 10 セミナー リー代数で 3 次元回転!🌪️ Pheema, レイトレ合宿 10 in 初島 (2024/10)
今日これだけは覚えて帰ってください 2 / 23
今日覚えて帰ってもらいたいこと ⊤ ^ = [n ^x n ^y n ^ z ] を軸とした θ [rad] の 3 次元の回転行列 R は以下の式で表せる! 単位ベクトル n 0 R = exp θ n ^z −n ^y −n ^z 0 n ^x n ^y −n ^x 0 exp の指数に反対称行列 (X ⊤ = −X ) が乗る形で表される exp なので θ で簡単に微分ができる!😊 3 / 23
4 / 23
前置き 今回はリー群・リー代数の詳細な説明はしません 回転の微分や微小回転を扱いたい、というときに思い出してくれると良いな…という内容です 5 / 23
いろいろな回転の表現方法 6 / 23
3 次元回転 (軸ごとの回転) cos θz Rz (θz ) = sin θz 0 − sin θz cos θz 0 0 1 0 , Rx (θx ) = 0 1 0 0 cos θx sin θx 0 cos θy − sin θx , Ry (θy ) = 0 cos θx − sin θy 0 1 0 sin θy 0 cos θy R = Rz (θz ) Rx (θx ) Ry (θy ) 7 / 23
ロドリゲスの回転公式 ベクトル r を単位ベクトル n ^ まわりに θ [rad] 回転させるとき、回転後のベクトル r ′ は以下の式で表せる! r ′ = r cos θ + n ^ × r sin θ + n ^ (n ^ ⋅ r ) (1 − cos θ) 8 / 23
クオータニオンによる方法 ベクトル a = ax i + ay j + az k を単位ベクトル n ^ まわりに θ [rad] 回転させるとき、回転後のベクトル a′ は以下の式で表 せる! a′ = qaq † ただし q = cos θ θ ^xi + n ^y j + n ^ z k) + sin (n 2 2 ※ 上式はロドリゲスの回転公式と同じ式に変形できる 9 / 23
リー代数による方法 ⊤ ^ = [n ^x n ^y n ^ z ] を軸とした θ [rad] の 3 次元の回転行列 R は以下の式で表せる 単位ベクトル n R = exp (θA) ただし 0 ^z A= n −n ^y −n ^z 0 n ^x n ^y −n ^x 0 である 10 / 23
GGX に現れるヤコビアン 反射が絡む計算ではよく以下のヤコビアンが登場することがある ∂ωh 1 = ∂ωo 4 (v ^o ⋅ v ^h) だいたい右のような図で説明されることが多い もしくは単位球面上の賢い変数変換を使って導出される 反射の式から計算で導出することはできないか…🤔 [Walter07] の図 6 に基づいたヤコビアンの導出 11 / 23
反射の式から計算してみる ハーフベクトルが e ^z となるような座標系を考える ^z と入射方向ベクトル v ^ i が与えられたと ハーフベクトル e き、反射ベクトル v ^ o は以下の式で表せる ^ o = 2 (e ^z ⋅ v ^i) e ^z − v ^i v 計算方針 ^z を x 軸, y 軸周りにそれぞれ微小回転さ ハーフベクトル e せ、ハーフベクトルが動く単位球面上領域の面積 (= 立体 角) を Δωh とする ^ o が動く 上記のハーフベクトルの変化に応じて反射ベクトル v ハーフベクトルの微小変化に伴う反射方向の微小変化 単位球面上領域の面積 (= 立体角) を Δωo とする 12 / 23
ハーフベクトルを x 軸周りに Δθ だけ微小回転 x 軸周りに θ 回転させる行列 Rx (θ) は以下のように表せる 0 Jx = 0 0 Rx (θ) = exp (θJx ) 0 0 1 0 −1 0 ^z を Rx で回転したときの反射の式は e ^z → exp(θJx )e ^z として ハーフベクトル e ^ o = 2 [exp(θJx )e ^z ⋅ v ^ i ] exp(θJx )e ^z − v ^i v ∂v ^o = 2 [Jx exp(θJx )e ^z ⋅ v ^ i ] exp(θJx )e ^z + 2 [exp(θJx )e ^z ⋅ v ^ i ] Jx exp(θJx )e ^z ⇒ ∂θ すなわち、 θ = 0 付近で Δθ だけ回転させたときの反射ベクトルの変化 Δv ^ o,Δθ は以下のように表せる Δv ^ o,Δθ = [2 (Jx e ^z ⋅ v ^i) e ^z + 2 (e ^z ⋅ v ^ i ) Jx e ^z ] Δθ (∵ exp O = E ) ^y ⋅ v ^i) e ^z + 2 (e ^z ⋅ v ^ i ) (−e ^y )] Δθ = [2 ( − e 13 / 23
ハーフベクトルを y 軸周りに Δϕ だけ微小回転 y 軸周りに ϕ だけ回転させる行列 Ry (ϕ) は以下のように表せる 0 Jy = 0 −1 Ry (ϕ) = exp(ϕJy ) 0 0 0 1 0 0 ^z を Ry で回転したときの反射の式は e ^z → exp(θJy )e ^z として よって、ハーフベクトル e ^ o = 2 [exp(ϕJy )e ^z ⋅ v ^ i ] exp(ϕJy )e ^z − v ^i v ∂v ^o = 2 [Jy exp(ϕJy )e ^z ⋅ v ^ i ] exp(ϕJy )e ^z + 2 [exp(ϕJy )e ^z ⋅ v ^ i ] Jy exp(ϕJy )e ^z ⇒ ∂ϕ すなわち、 ϕ = 0 付近で Δϕ だけ回転させたときの反射ベクトルの変化 Δv ^ o,Δϕ は以下のように表せる Δv ^ o,Δϕ = [2 (Jy e ^z ⋅ v ^i) e ^z + 2 (e ^z ⋅ v ^ i ) Jy e ^z ] Δϕ = [2 (e ^x ⋅ v ^i) e ^z + 2 (e ^z ⋅ v ^i) e ^x ] Δϕ (∵ exp O = E ) 14 / 23
立体角の比を求める ∣Δωo ∣ = ∣Δv ^ o,Δθ × Δv ^ o,Δθ ∣ = ∣[2 (−e ^y ⋅ v ^i) e ^z + 2 (e ^z ⋅ v ^ i ) (−e ^y )] Δθ × [2 (e ^x ⋅ v ^i) e ^z + 2 (e ^z ⋅ v ^i) e ^x ] Δϕ∣ 2 = −4v^i,y v^i,z e ^y − 4v^i,z v^i,x e ^z + 4v^i,z e ^z ∣ΔθΔϕ∣ = 4v^i,z −v^i,x −v^i,y v^i,z ∣ΔθΔϕ∣ = 4v^i,z ∣ΔθΔϕ∣ = 4 (v ^i ⋅ e ^z ) ∣ΔθΔϕ∣ = 4 (v ^i ⋅ e ^z ) ∣Δωh ∣ ∴ ∂ωh 1 = ∂ωo 4 (v ^i ⋅ e ^z ) 計算できた!嬉しい!😊 15 / 23
リー代数による回転の応用先 回転の微分や微小回転が必要なとき 例: 勾配法による最適化問題(点群のマッチング等) 手計算 16 / 23
最後に 17 / 23
僕のことは忘れても 18 / 23
これだけは覚えて帰ってください ⊤ ^ = [n ^x n ^y n ^ z ] を軸とした θ [rad] の 3 次元の回転行列 R は以下の式で表せる! 単位ベクトル n 0 R = exp θ n ^z −n ^y −n ^z 0 n ^x n ^y −n ^x 0 19 / 23
参考資料 3次元回転 パラメータ計算とリー代数による最適化 CV・CG・ロボティクスのためのリー群・リー代数入門 [Walter07] Bruce Walter, Stephen R. Marschner, Hongsong Li, and Kenneth E. Torrance. 2007. Microfacet Models for Refraction Through Rough Surfaces. In EGSR ’07. 195–206. https://doi.org/10.2312/EGWR/EGSR07/195-206 20 / 23
レイトレ合宿 10 セミナー リー代数で 3 次元回転!🌪️ Pheema, レイトレ合宿 10 in 初島 (2024/10) 21 / 23
補足 22 / 23
行列の指数関数 exp(A) = E + A + 1 2 1 A + A3 + ⋯ 2! 3! 行列 A が A = P −1 XP (X = diag(λ1 , λ2 , …))と対角化できるとき、行列の指数関数は以下のように表せる 1 −1 2 1 P X P + P −1 X 3 P + ⋯ 2! 3! 1 1 = P −1 (E + X + X 2 + X 3 + ⋯ ) P 2! 3! = P −1 diag (exp λ1 , exp λ2 , …) P exp(A) = E + P −1 XP + 23 / 23