Skip to content
Go back

Wavelet transparency

· Updated:

doi

拙訳

関連研究

  • そもそもパストレーシングならあらゆる問題が解決できる
    • 今世代のGPUはレイトレーシング機能を備えるが、半透明を扱うにはパフォーマンス的に厳しい
    • 今世代で使用される時空間デノイザーが深度ベースなので、半透明と相性が良くない
  • OIT
    • 事前に順序を揃えなくても半透明を描画できる手法
    • おおまかな分類:
      • Depth peeling:全部やる、厳密な方法
      • Stochastic:二値の可視性関数を使い、重点サンプリングで深度を選ぶ
      • Occupancy map:一様な深度でサンプリングする
      • kk-buffer:任意のkk個の深度でサンプリングして、それぞれの戦略でサンプルを選択したり統合したりする
      • Fourier opacity map:低次のフーリエ基底
      • Weighted, blended OIT (WBOIT):、指数関数的または多項式的な吸光係数
      • Moment:統計的なモーメント
    • レイトレーシングでも、半透明描画の高速化に使われている
      • Battlefield Vでは、パーティクルを描くのにAnyHitでWBOIT的な実装されている [Deligiannis and Schmid 2019Deligiannis, J. and Schmid, J. 2019. It Just Works: Ray-Traced Reflections in 'Battlefield V'. Game Developers Conference. https://www.gdcvault.com/play/1026282/It-Just-Works-Ray-Traced.]
        • ClosestHitは正しいが重い、一方、WBOITは不正確な場合もあるが軽い
  • 現象
    • 屈折はリアルタイム向けに近似方法がいくつかあるが、前述のOIT手法では取り入れられていない
    • 色収差chromatic aberrationはカメラレンズ由来のものがポストプロセスで表現されることが良くある
    • 特定の文脈での半透明を対象にしたソリューションが色々ある:
    • Phenomenological Transparency [McGuire and Mara 2017McGuire, M. and Mara, M. 2017. Phenomenological transparency. IEEE Transactions of Visualization and Computer Graphics 23, 5, 1465–1478. 10.1109/TVCG.2017.2656082. https://casual-effects.com/research/McGuire2017Transparency/index.html.]
      • WBOITとColored Stochastic Shadow Mapsを使って、屈折・拡散・AO・シャドウ・コースティクスを統一的に表現する
      • 物理的な正確でなくとも見た目に重要な現象を近似的に表現することで効率化している

可視性関数

  • 視線レイの距離に対する、その距離からレイの原点までの透過率の合計
    • 例えば、25%の半透明が1つあるシーンでは、その手前がv(x)=1v(x) = 1、その奥がv(x)=0.75v(x) = 0.75になる
  • 光源の周波数ごとに別個に計算することで、色別の透過率や吸光を表現できる
  • レイを曲げたりコーンに拡張したりすることで、スペキュラやディフューズの屈折を表現できる

本手法

  • Phenomenological Transparencyをベースに以下を提案する:
    • ウェーブレットを用いた可視性の表現
    • 色収差の現象論的な近似

アルゴリズム

  1. 半透明ジオメトリ(またはバウンディングボックス)をレンダリングして、ピクセルごとの厳密な深度範囲を計算する
  2. 半透明に対してウェーブレット係数バッファを作る
  3. 不透明の上に合成して、屈折や拡散などを適用する

ウェーブレット

  • 吸光率の関数をHaarウェーブレットの線形補間で近似する:
    • Aχ0,0ϕ0,0(z)+n,kXn,kψn,k(z)A \approx \chi_{0,0} \phi_{0,0}(z) + \sum_{n,k} X_{n,k} \psi_{n,k}(z)
      • ψn,k(z)=2n/2ψ(2nzk)\psi_{n,k}(z) = 2^{n/2} \psi(2^nz-k)
        • ψ(z)\psi(z)0z<0.50 \le z \lt 0.5110.5z<10.5 \le z \lt 11-1、それ以外で00になる
      • ϕn,k(z)=2n/2ϕ(2nzk)\phi_{n,k}(z) = 2^{n/2}\phi(2^nz-k)
        • ϕ(z)\phi(z)0z<10 \le z \lt 111、それ以外で00になる
        • ϕ0,0(z)=20ϕ(20z0)=ϕ(z)\phi_{0,0}(z) = 2^0 \phi(2^0z-0) = \phi(z)
      • χ0,0=αi(1xi)\chi_{0,0} = \sum \alpha_i (1-x_i)
      • Xn,k=αiΨn,k(xi)X_{n,k} = -\sum \alpha_i \Psi_{n,k}(x_i)
        • Ψn,k(x)=2n/2{2nxk02nxk<0.51+k2nx0.52nxk10Else\Psi_{n,k}(x) = 2^{-n/2} \begin{cases} 2^nx-k & 0 \le 2^nx-k \lt 0.5 \\ 1+k-2^nx & 0.5 \le 2^nx-k \le 1 \\ 0 & Else \end{cases}
  • ウェーブレットの階数rankNNの場合、2N+12^{N+1}個の係数を保存する
  • E5B9G9R9フォーマットの各チャンネルに格納する

色収差

  • シェーディング・ステップにて、屈折率が1より大きい場合に透過係数を三乗する
    • OIT手法で媒質内のextinction係数を大まかに近似するためのヒューリスティック
    • 屈折率の低い媒質に囲まれる半透明物体の後ろの表面を暗くなることで、光がその物体を通るさいの吸光を表現する
  • 合成ステップにて、屈折ベクトルに平行で、比例した大きさを持つ、短い線分に沿ったk=5k=5のバイリニアサンプリングを行う
    • 各タップで、色チャネルを重み付けする
    vec3 spectralWeight(int i) {
    	float t = 0.5 + float(2 * i) / float(k - 1);
    	vec3 w;
    	w.r = smoothstep(0.5, 1./3., t);
    	w.b = smoothstep(0.5, 2./3., t);
    	w.g = 1.0 - w.r - w.b;
    	return w;
    }

SUSPENDED