Skip to content
Go back

Phenomenological transparency

· Updated:

doi paper web

拙訳

マテリアル・パラメータ

  • partial coverage:α\alpha
  • 屈折率:η\eta
  • 直角入射での透過における波長可変な係数:T(λ)T(\lambda)
  • 視準collimationの因数:c[0,1]c \in [0, 1]
    • c=1c = 1は光学的に均質な材質を示す(=透明)
    • c=0c = 0は密で等方的な関与媒質を示す(=半透明)
  • 透過係数:t(λ)t(\lambda)
    • 実際の入射角で計算したT(λ)T(\lambda)を(1-BRDF)倍したもの
  • ttの波長における平均:tˉ\bar{t}

OITを実現するためのブレンディング方程式

  • L(Xn,λ)β(λ)L(X0,λ)+(1β(λ))U(λ)L(X_n, \lambda) \approx \beta(\lambda) L(X_0, \lambda) + (1 - \beta(\lambda)) U(\lambda)
    • X0X_0背面backgroundの不透明表面
    • λ\lambdaは波長
    • β(λ)=[1αi+αiti(λ)]\beta(\lambda) = \prod [1 - \alpha_i + \alpha_i t_i(\lambda)]
      • αi\alpha_iは表面iiのpartial coverage
      • tit_iは表面iiの透過率
    • U(λ)=Argb(λ)Aa=iwiαiLr(Xi,λ)iwiαi(1tˉi)U(\lambda) = \frac{A_{rgb}(\lambda)}{A_a} = \frac{\sum_i w_i \alpha_i L_r(X_i, \lambda)}{\sum_i w_i \alpha_i (1 - \bar{t}_i)}
      • LrL_rは反射+emitした放射輝度
      • tˉi\bar{t}_iは波長における透過率tit_iの平均
      • wi=min(max([10(10.99f)α(1tˉi)]3,0.01),30)w_i = \min(\max([10(1-0.99f)\alpha(1-\bar{t}_i)]^3, 0.01), 30)を使う
        • ffはNDCでのZ値
  • 詳細は以下の通り:
    • カメラに向かって奥から手前へnn個の半透明表面が並び、0番目に不透明表面があるとする
    • 表面の点XiX_iにおいて波長λ\lambdaに関してカメラに向かって出射する放射輝度は以下となる:
      • L(Xi,λ)=αi[Lr(Xi,λ)+ti(λ)L(Xi1,λ)]+(1αi)L(Xi1,λ)L(X_i, \lambda) = \alpha_i [L_r(X_i, \lambda) + t_i(\lambda) L(X_{i-1}, \lambda)] + (1 - \alpha_i) L(X_{i-1}, \lambda)
    • L(X0,λ)L(X_0, \lambda)をくくりだして係数をβ\betaとするように式変形する
      • UUは半透明表面からの放射輝度の重み付き総和になるが、事前には分からない
        • 表面からカメラまでの間が均質な関与媒質で満たされるとした場合、その重みはBeerの法則によりeqXie^{-q|X_i|}になる
          • 実際には、媒質は均質とはならないので、wiw_iは深度に対して単調かつ超線形的に減少する場面依存の関数となる
        • 表面からの透過率をすべて合計すると(1β)(1-\beta)になることが分かっているので、UUは重みの合計で正規化できる

ディフュージョン

  • 背面が無限遠にある場合:
    • 各ピクセルにおける拡散の標準偏差について、すべての表面からの合計で推定する:
      • D=W2tan(θ/2)ik0(1ci)αiziD = \frac{W}{2\tan{(\theta/2)}}\sum_i{\frac{k_0(1-c_i)\alpha_i}{|z_i|}}
        • θ\thetaは視野角
        • WWはスクリーンのピクセル幅
        • k0k_0は1メートル手前にあるc=0c = 0の表面によるガウシアンの標準偏差(メートル)
    • 詳細は以下の通り:
      • 一様な媒質での多重散乱はランダムウォークを発生させる
        • スクリーン空間では、表面から光が出入りする間に起こるピクセルのズレがガウス分布を取る
        • このガウス分布の標準偏差(=ピクセルにおける拡散具合)は、遠近法により、カメラからの距離zi|z_i|および視準cic_iに従って減少する
  • 背面が有限遠にある場合:
    • 複合凸レンズcompound, convex lensを仮定して、背面BBに対する拡散の標準偏差を近似する:
      • D=Wk02tan(θ/2)i[(1ci)αi[111+zX,izB,i/k1]zX,i]2D = \frac{W k_0}{2\tan{(\theta/2)}} \sqrt{\sum_i{\left[ \frac{(1-c_i)\alpha_i \left[ 1-\frac{1}{1+|z_{X,i} - z_{B,i}|/k_1} \right]}{|z_{X,i}|} \right]^2}}
        • zB,iz_{B,i}はカメラ空間での背面の深度値
        • zX,iz_{X,i}は表面XXの深度値
        • k1k_1は散乱する表面のimplied thickness(k1=0.5[m]k_1 = 0.5[m]を使う)
    • 詳細は以下の通り:
      • 散乱の繰り返しは凹レンズの集合体と同じもの
        • すべての散乱を表すガウス核の点像分布関数Gaussian kernel point spread functionは散乱する表面の個々の関数の畳み込みで求められる
        • その標準偏差は個々のガウシアンの標準偏差の総和で求められる
      • このシステムによるdefocus量は表面から背面までの距離で増加する
        • スクリーン空間でのガウスカーネルの標準偏差は表面をモデル化した層と背面との距離で増加する

一次線(primary rays)の屈折

  • スネルの法則により、表面の点XXから射影の中心へ向かう光線が屈折してきた方向を求める:
    • ω^i=ηω^o(ηn^ω^o+k)n^\hat{\omega}_i = -\eta \hat{\omega}_o - (\eta - \hat{n} \cdot \hat{\omega}_o + \sqrt{k}) \hat{n}
      • ω^o\hat{\omega}_oはレイの向き
      • n^\hat{n}は法線
      • k=1η2[1(n^ω^o)2]k = 1 - \eta^2 [1 - (\hat{n} \cdot \hat{\omega}_o)^2]が非負の場合に有効
        • そうでなければ、透過は起こらない
  • 固定の奥行きΔz\Delta zだけXXの先にある背面上の点は以下で求められる:
    • B=X+Δzω^iω^iz^B = X + \Delta z \frac{\hat{\omega}_i}{\hat{\omega}_i \cdot \hat{z}}
  • スクリーン空間でのBBとピクセル位置との差分からオフセット値(δX,δY)(\delta_X, \delta_Y)を求める
    • カバレージと不透明度で重み付けして、すべてのレイヤーの平均を計算する
  • 詳細は以下の通り:
    • 固定の奥行きにある背面まで広がる均質な透過的媒質として、シーンを単純化したモデルを用いてスネルの法則を適用する
      • スクリーン空間でのレイトレーシングによって、より正確な屈折を計算することもできる
      • いずれにしても、フレームバッファに用意された背面オブジェクトを歪ませるためのピクセル座標でのオフセット値(δX,δY)(\delta_X, \delta_Y)を作る
    • 折り重なる表面で屈折するベクトルの組み合わせ方にはそれらしいものがないので、単純に混ぜ合わせる方法を取った
      • 表面1つの場合と同じになるので、表面が複数ある場合には正しくないが、位置がズレる屈折の現象はきちんと現れる

コースティクスおよび半透明影

  • Colored stochastic shadow map[McGuire and Enderton 2011McGuire, M. and Enderton, E. 2011. Colored stochastic shadow maps. Symposium on interactive 3D graphics and games 89–96. 10.1145/1944745.1944760. https://casual-effects.com/research/McGuire2011CSSM/index.html.]で半透明影の密度変化を近似する
    • partial coverageと(1-透過率)に比例する確率ρ(λ)\rho(\lambda)で波長λ\lambdaのシャドウマップを作る
  • コースティクスを模倣するため、入射角や屈折率に応じて変化するようにρ(λ)\rho(\lambda)を改める
    • ρ(λ)=min(1,(1+gs0.2)α(1t(λ)))\rho(\lambda) = \min(1, (1 + gs^{0.2}) \alpha (1-t(\lambda)))
      • s=min(max((1/η1)/2,0),1)s = \min(\max((1/\eta - 1) / 2, 0), 1)
      • g=2min(max(1n^ω^i128s2,0),1)1g = 2\min(\max(1 - |\hat{n} \cdot \hat{\omega}_i|^{128s^2}, 0), 1) - 1
  • シャドウマップのフィルタリングにはVariance Shadow Maps[Donnelly and Lauritzen 2006Donnelly, W. and Lauritzen, A. 2006. Variance shadow maps. Proceedings of the 2006 symposium on interactive 3D graphics and games 161–165. 10.1145/1111411.1111440. https://pierremezieres.github.io/site-co-master/references/vsm_paper.pdf.]を使う
    • 15x15の三角関数のカーネルtent kernelで行い、1/4にダウンサンプリングする
    • VSMのライトリークを回避するため、不透明のシャドウマップは別に作る
  • 詳細は以下の通り:
    • 屈折によって影領域内の光が再分散することで、濃くなったり薄くなったりする領域が生まれる
    • 入射角が直角に近いat normal incidenceと明るくなり、平行に近いat a glancing angleと暗くなる

解決

  • アップサンプリング
    • テント関数の7x7カーネルでjoint bilateral filteringを行う
  • 屈折
    • 背面の色をオフセット値δxy\delta_{xy}だけずらしてサンプリングする
  • 拡散
    • 標準偏差DDを持つガウシアン点像分布関数に従って背面をサンプリングする
    • 物体による遮蔽をモデル化するため、カーネルの一部をゼロでマスクアウトする
      • min(D[x,y],D[x+i,y+j])(i,j)\min(D[x,y], D[x+i,y+j]) \le ||(i,j)||となるところだけを集める
      • このフィルタは分離可能ではなく、DDが大きいときに計算負荷が高い
  • 変調
    • 重なる部分での見た目のおかしさを緩和するため、self-modulationを加える
      • U=ArgbAa[12+β2max(maxλ(β),ε)]U' = \frac{A_{rgb}}{A_a} \left[ \frac{1}{2} + \frac{\beta}{2 \max(\max_{\lambda}(\beta), \varepsilon)} \right]
      • 透過表面がAAに対してmodulateしないために発生する
  • AO
    • 透過を起こさないテクスチャでは、アルファを二値のまま使いたいので、MIPを使わないようにフラグ立てを行う
      • 透明オブジェクトは深度バッファに書き込まれないので、AOの影響を受けも与えもしない
      • アルファ抜きしたオブジェクトでは、アルファ値のフィルタリングによって、その輪郭が透明になることがある
      • すると、AOの影響を受けない可視部分は周りに比べて明るくなりすぎてしまう
    • そうでない場合、隣接ピクセルからAO値を推測する
      • ピクセルシェーダにて、スクリーン空間でのアルファの勾配を取る:
        • 勾配が無視できない程度なら、勾配のレイに沿ってAOのcross-bilateral filteringを行う
          • カメラ空間のz値における双曲線形の重みを用いて、深度が違いすぎる表面からのAO寄与を小さくする
        • 勾配が無視できる程度なら、スクリーン空間のボックスでフィルタリングする