超雑訳 Improved Alpha Testing Using Hashed Sampling

皆さん待ったかね~。こんにちわ、Pocolです。
今日は,以前に読んだHashed Alpha Testingの後発論文である…
[Wyman 2017] Chris Wyman, Morgan McGuire, “Improved Alpha Testing Using Hashed Sampling”, IEEE Transactions on Visualization and Computer Graphics, Vol.25, Issue 2, pp.1309-1320, 2017.
を読んでみようと思います。
いつもながら誤字・誤訳があるかと思いますので,ご指摘頂ける場合は正しい翻訳例と共に指摘して頂けるとありがたいです。
また,セクション1~5は”Hashed Alpha Testing”とほぼ内容が被りますので,和訳を省略してセクション6から始めることにします。

Abstract

Wyman and McGuire [1]によるハッシュド・アルファ・テストのアイデアについて説明し、分析します。通常、アルファテストは、適用されたアルファテクスチャを持つ単純なプロキシジオメトリを使用して、複雑なシルエットをマスクアウトするための単純なメカニズムを提供します。アルファテクスチャは広く使用されていますが、アルファテクスチャには、アルファマップされたポリゴンが距離とともに後退するため、ジオメトリが完全に消えてしまうという長年の問題があります。バーチャルリアリティのための中心窩レンダリングが普及するにつれて、周辺部縮小化とプリフィルタリングが近くのオブジェクトにこの問題を引き起こすため、この問題は悪化します。

最初に確率的アルファテストの概念を導入します。これは、固定されたアルファ閾値\(\alpha_{\tau} = 0.5\)をランダムに選ばれた\(\alpha_{\tau} = [0 \cdots 1)\)に置き換えるものです。これにより、アルファテストされたジオメトリが消えてしまう問題は完全に回避されますが、テンポラルノイズが発生します。

ハッシュ化アルファテストは、ハッシュ関数を使って\(\alpha_{\tau}\)を手続き的に選択します。優れたハッシュ関数と入力により、ハッシュ化アルファテストは、従来のアルファテストよりも時間的なちらつきを発生させることなく、遠くのジオメトリを維持します。また、ハッシュ化アルファがテンポラルアンチエイリアシングとどのように相互作用し、アルファトゥカバレッジと網戸透過に適用されるかを説明します。ハッシュ化アルファテストは、安定したサンプリングを導入することでアルファテストのエイリアシングに対処するため、サンプルの安定性を高めることが望ましい他の領域においても意味を持ちます。我々のハッシュ化サンプリングが他の確率的効果にどのように適用できるかを示します。

6 Anisotropic Hashed Alpha Testing

リスト1は安定したハッシュを提供しますが、オブジェクト空間微分の長さを使用することで、サーフェイスの向きに関係なく均一なノイズスケールを提供します。しかし残念ながら、サーフェイスを斜めに見た場合、投影されるノイズのスケールがスクリーン空間のx軸とy軸に沿って異なるため、これは異方性を生み出します(図6参照)。

※リストは,[Wyman 2017]より引用

※図は,[Wyman 2017]より引用

6.1 Difficulties Removing Anisotropy

我々は異方性を除去するための多くの方法をテストしましたが、離散的なオブジェクト空間グリッド上で変化する安定した均一なハッシュ値を求める我々の要望を考えると、不可能であることに気づきました。
 従来の異方性テクスチャアクセスは、テクスチャ空間ベクトルに沿って繰り返しサンプルをアクセスします。ハッシュ化アルファテストでは、これは複数のサブピクセルサンプル間に時間的な分散をもたらすことによって安定性を壊します。このアプローチは、ハッシュアルファの目的である、きれいにフィルタリングされた値を生成するのではなく、単一の擬似ランダムしきい値を生成することを満たしていません。
 ハッシュ入力を異方性の軸に沿った座標フレーム上で離散化することは、説得力のある代替案と思われます。しかし、この離散化は、ほとんどの種類の運動で異方性の軸が変化するため、時間的不安定性を再び引き起こします。
 オブジェクト空間で離散化を続けると、視空間とオブジェクト空間のサンプリンググリッドの不一致により、画像上にわずかではあるが変化する異方性が生じるため、異方性を完全に除去することはできません。

6.2 Mitigating Anisotropy

異方性を完全に回避することができないため、見かけ上の異方性を大幅に低減しつつ、リスト1と同様のアプローチを維持するシンプルなアルゴリズムを設計しました。
 非等方性は、一定のハッシュのボクセルが、異なるx-とy-extentでスクリーン空間に投影されるときに生じます(図6参照)。一様な離散化では、1つの軸に沿ってのみピクセルスケールのノイズを発生させることができます。もう一方の軸に沿ったノイズは、サブピクセルか大きすぎるかのどちらかになり、時間的フリッカーが再び発生するか、ハッシュが一定の細長い領域が生成されます(図7参照)。

※図は,[Wyman 2017]より引用

 この問題を軽減するために、最大射影微分に基づいて単一のスケールを選択するのではなく、3つのオブジェクト空間軸のそれぞれに長い個別の離散化スケールを選択します。これらのスケールを独立に変更することで、異方性が大幅に減少します:

しかし、軸に沿って別々のスケールを使うことで、暗黙のボクセルの平均サイズが変わってしまいます。長さlength(dFdx(objCoord))はdFdx(objCoord)の個々の成分よりも長いので、異方性ノイズは与えられたハッシュスケールに対して小さく見えます。一貫したスケールノイズを維持するために、長さを\(\sqrt{2}\)でスケーリングする必要があった。

そして、それぞれの軸について独立に対数離散化スケールを計算します:

そして、この異方性ボックスの対向する角で2つのハッシュ値を計算します:

各異方性ボクセルの8つのコーナーでハッシュ値を計算し、適切なCDFを用いたトライリニア補間を用いて補間分布を補正してみました。しかし、これはハッシュサンプルの安定性を向上させることなく、大幅な計算コストを追加することになります。その代わりに、対数空間でピクセルの小数事前離散化位置を表す以下の係数を使用して、2つのハッシュ値間を線形補間します:

この補間係数が与えられても、ハッシュ化されたアルファコードの残りの部分は変わらず、2つの一様なハッシュ化サンプル間の補間のCDFを補正して、最終的な一様な閾値を与えます。このコードをリスト2に示します。

※リストは,[Wyman 2017]より引用

7 Implementation Considerations

既存のレンダラーにハッシュドアルファテストのような単純な修正を加える場合、開発者の目標は、レンダリングのワークフローを変えずに品質を向上させることです。そのためには、新たなアーティファクトを導入することなく、他の一般的なアルゴリズムとうまく連携する必要があります。このセクションでは、既存のエンジンでハッシュ化されたアルファテストを使用するための実装上の注意点について見ていきます。

7.1 Fading in Noise with Distance

ハッシュ化アルファテストは確率的サンプリングに基づいているため、アルファテストされたジオメトリが使用されるあらゆる場所で(安定した)ノイズが発生します。開発者は、既存のアルファテストがかなりうまく機能しているビューアの近くで、見かけ上のランダム性を導入することを避け、遠くのビジュアルクオリティを向上させることに集中したいと思うかもしれません。
 幸いなことに、ハッシュ化されたノイズを距離とともにフェードインさせることができます。アルファ閾値の次の定式化を考えてみましょう:

\begin{eqnarray}
\alpha_{\tau} = 0.5 + \delta, \tag{3}
\end{eqnarray}

ここで、伝統的なアルファテストでは\(\delta=0\)、ハッシュドテストとストキャスティックバリアントでは\(\delta \in [-0.5 \cdots 0.5)\)である。我々はこれを次のように修正することを提案します:

\begin{eqnarray}
\alpha_{\tau} = 0.5 + \delta \cdot b({\rm lod}), \tag{4}
\end{eqnarray}

つまり、\(b(0)=0\)と\(b(n)=1\)は、開発者がハッシュ化アルファテストに完全に依存するのに十分なほど粗い\({\rm lod}=n\)の場合です。\(n\)の値は、希望するテクスチャサイズとノイズ耐性に依存します。我々の実験では、\(n=6\)がうまく機能することがわかりました。
 私たちは、\(b\)をリニアにランプしても、目に見えるノイズがカメラに近すぎることを発見しました。おそらく、見かけのノイズは立体角に依存し、立体角は距離の2乗で変化するためでしょう。伝統的なアルファテストとハッシュドアルファテストの切り替えには、以下の関数を使用しました:

\begin{eqnarray}
b(x) = \begin{cases} 0 &: x \leq 0 \\
(x/n)^2 &: 0 \lt x \lt n \\
1 &: x \geq n
\end{cases} \tag{5}
\end{eqnarray}

7.1.1 Fading in Noise With Anisotropic Texture Sampling

式5は、アルファテストされたサーフェイスをグレージング角度で見た場合、失敗します。これは、異方性フィルタリングがより細かいミップレベルに繰り返しアクセスするため、比較的低いミップレベルでもアルファジオメトリが消えてしまうために起こります。つまり、ハッシュ化アルファテストへの移行は、等方的にサンプリングされた領域よりも低いミップレベルで起こる必要があります。\(b(x)\)を計算する前に、異方性に基づいて\(x\)をスケーリングすることで、これが修正されます:

異方性が高いほど\(x\)が大きくなり、式4で\(\alpha_{\tau}\)をより変化させ、アルファマップがグレージング角度で消えてしまうのを避けることができます。

7.2 Hashed Alpha Testing With Temporal Antialiasing

ゲーム[5]でテンポラル・アンチエイリアシング(TAA)が広く使用されていることから、ハッシュド化テストはテンポラル・アキュムレーション技術とシームレスに動作する必要があります。ハッシュテストはス確率的サンプリングに由来するため、TAAと些細なことで動作すると思われるかもしれません。しかし、安定性を誘導するためにハッシュ入力を明示的に変更すると、ピクセルサイズのノイズが発生します。TAAを素朴に適用すると、確率的カバレッジを時間的に蓄積するのではなく、滑らかに縁取られたピクセルサイズのブロックが得られます。
 TAAをハッシュ化されたアルファテストと統合するための3つの簡単なアプローチがあります:グローバルノイズスケールを1ピクセル以下にする、時間的に独立したハッシュサンプルを使用する、ハッシュサンプルを時間的に層別化する、の3つです。
 これらの技法はすべてノイズを減少させますが、確率的透過[11]と同様に、TAAが通常使用する8つのジッターサンプルでは収束した結果を得るには不十分です。このため、テンポラルフリッカーが発生する可能性があります。我々は、ハッシュサンプルを時間的に階層化することで、最も安定した結果が得られることを発見しました(セクション7.2.3参照)。

7.2.1 Temporal Antialiasing by Reducing Noise Scale

グローバルノイズスケールg_HashScaleを1.0以下の値に下げると、サブピクセルノイズが発生します。TAAのテンポラルカメラジッターは、このサブピクセル・ノイズを複数フレームにわたって平均化します。\(n\)個の時間サンプルの場合、\(\sqrt{1/n}\)のg_HashScaleを使用すると、理想的な\(n\)個のユニークなサブピクセルハッシュ値が得られます。
 残念なことに、ノイズスケールを1.0以下にすると、ハッシュサンプルの安定動作が低下します。収束した解を得るために十分なサンプリングが行われるまでは、この方法は空間的安定性と時間的安定性を効果的にトレードオフすることになる。現在一般的に使用されている8個のTAAサンプルでは、このアプローチは特に説得力のある解を提供しません。

7.2.2 Temporal Antialiasing by Independent Hashing

サブピクセルノイズを導入し、TAAのジッターを信頼して結果を蓄積する代わりに、別のアプローチでは、ピクセルスケールのハッシュグリッドは維持するが、\(n\)サンプルのTAAで\(n\)フレームにわたって\(n\)個の異なるハッシュ値を選択します。
 ナイーブな解決策は、複数の異なるハッシュ関数を使用し、フレーム\(i\)に対して\(\alpha_{\tau} = {\rm hash}[i]({\rm hashInput.xyz})\)を使用し、\(n\)フレームごとに繰り返す。しかし、8サンプルのTAAでは、8つの優れたハッシュ関数を設計し、フレームごとに実行するハッシュ関数を動的に選択する必要がある。
 理論的には、ハッシュ空間の別々の領域も独立している。これは hash(input) と hash(input + offset) が独立したランダムしきい値を与えることを意味し、フレーム\(i\)に対して\(\alpha_{\tau} = {\rm hash}({\rm hashInput.xyz + offset}[i])\)を選択することができます。この場合、個別のハッシュ関数を設計するのではなく、\(n\)個の一意なベクトルオフセットのリストを提供するだけでよい。
 このアプローチでは、\(n\)個のフレームに対して\(n\)個のハッシュしきい値\(\alpha_{\tau}\)の安定したセットが得られますが、時間的に不安定な結果が得られます。TAAは指数関数的に加重された移動平均によって効果的に平均化されるので、最も高い加重閾値\(\alpha_{\tau}\)は\(n\)フレーム周期を持ちます。これらの\(n\)個のサンプルが独立している場合、時間的なちらつきが生じます。

7.2.3 Temporal Antialiasing by Temporal Stratification

独立したハッシュサンプルを使用するのではなく、\(n\)個の依存するアルファ閾値を選択し、\([0 \cdots 1)\)を一様にサンプリングするように層別化し、指数加重移動平均によってもたらされるフリッカーを減らすために時間的に分散させることができます。リスト1または2のコードによって計算されたハッシュサンプル\(\chi\)が与えられた場合、\(n\)フレームのTAAシーケンスに対してアルファ閾値\(\alpha_{\tau}\)を定義します:

\begin{eqnarray}
\alpha_{\tau} = {\rm fract}\left(\chi + \frac{i}{n} \right), \forall i \in [0 \cdots n-1] \tag{6}
\end{eqnarray}

セクション7.2.2の独立したハッシュサンプルと同様に、これは空間的な安定性を与えますが、TAAが低閾値と高閾値の間で重く重み付けするサイクルを繰り返すため、時間的にちらつきます。
 指数移動平均は、\(n\)個の層別サンプルのうちの1つを他のサンプルよりも高く重み付けしますが、最も高く重み付けされた2つのサンプルの良好な分布を確保するために、順序を変更することができます。層化標本セットでは、標本の半分は \(\alpha_{\tau} \lt \frac{1}{2}\) で、半分は \(\alpha_{\tau} \geq \frac{1}{2}\) であることがわかります。他のすべてのサンプルが\(\frac{1}{2}\)以下になるように、交互に並べ替える必要があります:

\begin{eqnarray}
j &=& \lfloor \frac{j}{2} \rfloor + (i \, {\rm mod} \, 2) \ast \frac{n}{2} \\
\alpha_{\tau} &=& {\rm fract} \left( \chi + \frac{j}{n} \right)
\end{eqnarray}

これは、8つの時間的サンプルにわたって十分な安定性を提供したが、さらに優れた、不一致の少ないサンプル分布を得るためには、バイナリー・ファン・デル・コルパットシーケンスのようなラディカル・インバースシーケンスを用いて\(j\)を定義することができます。

7.3 Using Premultiplied Alpha

ハッシュ化アルファテストは、標準的なアルファテストよりもやや大きな領域からディフューズテクスチャサンプルにアクセスするため、特に大きなテクスチャ領域からフィルタリングする場合、高いミップレベルでは、アーティストが透明領域に追加したペイントされたディフューズカラーをサンプリングしないように注意する必要があります。
 事前乗算済みアルファを使用することで、正しいミップマッピングが可能になり、この問題を回避することができます(例えば、さらなる議論についてはGlassner [19]を参照)。しかし、事前乗算済みアルファテクスチャは\((\alpha R, \alpha G, \alpha B)\)を保存するため、サンプル数が増えても真実への収束を維持するために、アルファテストされた色\((R, G, B)\)を返す前にアルファで割る必要があります。
 ハッシュ化アルファテストは、非前乗算ディフューズテクスチャで機能しますが、ハッシュが\(\alpha_{\tau} \lt 0.5\)を返すと、透明なテクセルから色が滲み、アルファ境界で任意の色のハローが発生することが頻繁に見つかりました。

8 Applications to alpha-to-coverage

セクション3で述べたように、アルファトゥカバレッジはフラグメントアルファを離散化し、\(n\)サンプルバッファ上でディザリングされた\(\lfloor n \alpha \rfloor\)カバレッジビットを出力します。\(\lfloor n \alpha \rfloor\) 個のカバレッジビットを生成することは、アルファの閾値をスーパーサンプリングすること、すなわち、閾値を用いた\(n\)回のアルファテストを実行することと等価です:

\begin{eqnarray}
\alpha_{\tau} = \frac{0.5}{n}, \frac{1.5}{n}, \cdots, \frac{n-0.5}{n}. \tag{7}
\end{eqnarray}

この観察から、従来のアルファテストは\(n=1\)の特殊なケースであることがわかります。
 アルファトゥカバレッジにハッシュ化または確率的アルファテストを適用することは、閾値のジッターサンプリングに等しいです:

\begin{eqnarray}
\alpha_{\tau} = \frac{\chi_1}{n}, \frac{1+\chi_2}{n}, \cdots, \frac{n-1+\chi_n}{n}, \tag{8}
\end{eqnarray}

ハッシュ化されたサンプル\(\chi_i \in [0 \cdots 1)\)について。\(\chi_i\)は、サンプルごとに独立して選択することも、フラグメントごとに1回選択することもできます(すなわち、\(\chi_i=\chi_j\))。
 従来のアルファトゥカバレッジでは、同じアルファを持つすべてのフラグメントに対して固定のディザパターンを使用していました。このため、重なり合う透明なフラグメント間に相関関係が生じ、集合的なジオメトリの不透明度が失われます(図1参照)。
 これを避けるために、フラグメントごとのオフセット\(\alpha_0\)を計算し、\(\alpha_{+}\)をインクリメントし、サンプルごとのアルファ閾値を適用します:

\begin{eqnarray}
\alpha_{\tau} = \frac{\chi_n + ((\alpha_o + i \alpha_{+}) {\rm mod}\, n) }{n}, \forall i \in [0 \cdots n-1] \tag{9}
\end{eqnarray}

ハッシュ化された\(\xi_1\)、\(\xi_2\)が与えられ、\(n\)を2の累乗に制限した場合、\(\alpha_o\)は\(0\)から\(n-1\)までの整数であり、\(\alpha_{+} = 2 \lfloor 0.5 n \xi_2 \rfloor + 1\)は\(1\)から\(n-1\)までの奇数整数です。これにより、\(\xi_1\)や\(\xi_2\)がカメラからの距離によって変化する場合、ジッターされた閾値が非相関化されます。

8.1 Applications to Screen Door Transparency

網戸透過は、複数のサブピクセルサンプルではなく、複数のピクセルにわたってカバレッジビットをディザリングするだけです。そのため、インターリーブされた\(\alpha_{\tau}\)閾値のランダム化とレイヤー間の非相関は、ピクセル内ではなくピクセル間で発生する可能性があります。

9 Other Applications of Hashed Sampling

ここまでは、安定したハッシュ化されたサンプルが、アルファテストされたジオメトリの消失にどのように適用されるかに焦点を当てて説明しました。しかし、インタラクティブなアプリケーションは様々な領域で時間的安定性を追求しており、安定したハッシュはサンプルを直接生成したり、再投影キャッシュの品質を向上させるために有用であることが証明されるかもしれない[20]。
 例えば、光輸送アルゴリズムは、レンダリング方程式を近似するためにモンテカルロ・サンプリングを使用することが多いです[21]。リアルタイムの制約は、テンポラルノイズを避けるために必要な光線数の増加を妨げる可能性があります。
 一般的なアプローチでは、ピクセルごとに固定の擬似乱数シードを定義しますが、これはジオメトリがスクリーンに対して相対的に動くと見える網戸効果を引き起こします。その代わりに、安定したピクセルサイズのグリッドでサンプルを生成します。これにより、動きがあってもジオメトリに固定された、ほぼ安定したノイズが生成されます。ピクセルあたり1レイのアンビエントオクルージョンでこれを実証します(図8参照)。これは、ハッシュサンプルを視覚的に理解するのに十分シンプルでありながら、より複雑な光輸送を代表しています。

※図は,[Wyman 2017]より引用

 この単純なテストでは、リスト2で\(\alpha_{\tau}\)を計算するのではなく、同じコードで2つのハッシュサンプル\(\chi_1\)、\(\chi_2\)を生成しますが、\(\chi_1\)と\(\chi_2\)には2つの異なるhash3D()関数を使います:

セクション7.2.2で説明したように、独立したサンプルは、異なるオフセット、例えば :

これらのハッシュ値を標準的な方法でコサインサンプリングされた半球に変換します:

各フレームで多くの安定したサンプルを必要とする、より一般的な光伝送アルゴリズムに拡張するには、単に追加の\({\rm offsets}[i]\)値を使用する必要があります。あるいは、整数を返すハッシュは、より伝統的な擬似乱数ジェネレーターのシードとして使用することもできます。

10 Stochastic Transparency Comparison

確率アルファテストは、基本的に、確率的透明性を1ピクセルあたり1サンプルに単純化する。したがって、ピクセルあたりにより多くのテストを使用するとき、確率的アルファテストは、確率的透明性がそうであるように、グラウンドトゥルースに収束します。
 このように考えると、式7の閾値に基づくと、アルファトゥカバレッジは、ランダムなサンプルではなく、規則的なサンプルによる確率的透明性となります。式8のようにランダムな閾値を用いると、層化された確率的透明度に相当します。
 しかし、重要な違いは、アルファテストは1ピクセルあたり1サンプルで動作するように設計され、頻繁に期待されていることです。時間的、空間的なノイズを避けることが採用の鍵であり、それゆえ我々の安定したハッシュ化アルファテストは、従来のアルファテストに代わる魅力的な選択肢を提供すると信じています。

11 Results

Falcorプロトタイピング・ライブラリ[22]を使用して、OpenGLベースのレンダラーでハッシュ化および確率的アルファテストをプロトタイプ化しました。最適な性能よりも安定したノイズを求めたため、特に確率的アルファテストでは性能の最適化は行わいませんでした。タイミングには、ハッシュ、フェードイン関数、およびその他の正規化要素のバリエーションを探索するためのロジックが含まれています。
 表1は、1920 x 1080でレンダリングされ、透明と不透明のすべてのサーフェスに1つのシェーダーを使用した従来のアルファテストと比較したパフォーマンスを示しています。ハッシュ化されたアルファテストのために追加されたオーバーヘッドは、追加のテクスチャやグローバルメモリアクセスなしで、すべての計算です。異方性ハッシュアルファテストは、おそらく等方性バリアントよりも10-20%コストが高くなりますが、制限されたタイミング精度とテストの小さなオーバーヘッドがなければ、タイミングの実行は両方のバリアントで同じでした。確率的アルファテストプロトタイプはランダムなシードテクスチャを使用しており、シードの再利用による相関を回避するために同期が必要です。これにより、速度が大幅に低下します。

※表は,[Wyman 2017]より引用

 コストは、アルファマップされたサーフェスの数、深度の複雑さ、スクリーンのカバー範囲によって異なります。\(1920 \times 1080\)でフラグメントごとに1回のテストを行う場合、アルファマップされたフラグメントの数が一般的なシーンでは、ハッシュ化アルファテストにフレームあたり0.1~0.3msの追加コストがかかります。確率的アルファテストの場合、同期コストは奥行きが複雑なシーンで大幅に増加します。
 図1は、アルファマップされたヘアビルボードを持つゲーム品質の頭部モデルです。距離が離れると、髪の毛は消えます。これは、あごに髭が描かれていないディフューズテクスチャの下にあるため、あご髭で最もよくわかります。このモデルとのダイナミックな比較については、補足ビデオを参照してください。

※図は,[Wyman 2017]より引用

 図9は、XFrogがサンプルとして提供した、多くのアーティストが作成した樹木モデルでの同様の比較を示しています。これらの木のアルファマップには50~70%の透明ピクセルが含まれているため、遠景や低解像度でレンダリングすると葉がすぐに消えてしまいます。ハードウェアアクセラレーションによるアルファトゥカバレッジは、レイヤー間の相関性が高いため、葉が単一レイヤーとして表示され、過度に透明になってしまいます。ハッシュ化テストとハッシュ化アルファトゥカバレッジは、これらの問題を修正し、低解像度でレンダリングしたにもかかわらず、よりグラウンドトゥルースに近い形で表示されます。

※図は,[Wyman 2017]より引用

 図10と図11では、ハッシュ化アルファを、広く使用されているアプローチの閾値と比較し、これを前処理としてテクスチャにベイクしています。このアプローチでは、遠くのジオメトリが見えるように拡張されるため、図10の細い葉に過度に密な外観を与えます。

※図は,[Wyman 2017]より引用

 図11は、ハッシュ化アルファテスト、ハッシュ化アルファトゥカバレッジを使用した\(8 \times \)MSAA、およびテンポラル・アンチエイリアシングを使用した両方のハッシュ化技術を比較したものです。興味深いことに、TAAを使用したハッシュ化アルファテスティングでは、アルファトゥカバレッジとほぼ同様の結果が得られ、テンポラルアンチエイリアスをかけたアルファトゥカバレッジは、グランドトゥルースとほとんど区別がつきません。

※図は,[Wyman 2017]より引用

 図12は、より複雑な例を示しています。この例では、ハッシュ化ノイズが近傍で望ましくない可能性があり、セクション7.1のフェードインによって、視聴者の近くで鮮明なエッジが維持されます。

※図は,[Wyman 2017]より引用

 図13は、従来のアルファテスト、ハッシュテスト、確率的アルファテストの時間的安定性を、わずかなサブピクセルの動きのもとで比較したものである。同じサブピクセル動きの下では、ハッシュ化アルファテストは従来のアルファテストとほぼ同等の時間安定性を示すことに注意してください。確率的アルファテストと、ノイズを固定したりピクセル単位に離散化したりしない方法は、著しく不安定性を示します。

※図は,[Wyman 2017]より引用

 図14は、半分が不透明、半分が透明のテクセルからなる平面チェッカーボードテクスチャの合成例を示します。この場合、アルファテストは距離によって消えるのではなく、エイリアスになります。ハッシュ化アルファテストは、このエイリアシングをノイズに置き換え、MSAAベースのアルファトゥカバレッジを使用して、距離において望ましい均一なグレーに収束します。

 遠くのジオメトリや低解像度のアルファマップされたジオメトリに使用する以外にも、ハッシュ化アルファテストの用途は存在します。バーチャルリアリティ用のヘッドマウントディスプレイでは、特にディスプレイの解像度が上がるにつれて、ユーザーの周辺をフル解像度でレンダリングするのは無駄が多い。その代わりに、foveatedレンダリング[23]では、ユーザーの視線から離れた低い解像度でレンダリングを行います。Patneyら[23]は、すべてのレンダリング項をプレフィルタリングすることを提案していますが、結果をプレフィルタリングできないため、アルファテストをサポートできなかった。フォーベーテッドレンダリングでナイーブなアルファテストを行うと、周辺部では近くの葉まで消えてしまう(図15参照)。テンポラル・アンチエイリアシングを使用することで、ハッシュ化されたアルファテストは、フォーベーテッド・レンダラーでアルファマップされたジオメトリの使用を可能にします。

※図は,[Wyman 2017]より引用

 図16は、より複雑な環境でのハッシュ化アルファテストを示しています。粗いミップマップにアクセスするピクセルを最小化するためにシーンのスケールが十分に小さいので、結果はより微妙です。

※図は,[Wyman 2017]より引用

12 Conclusions

我々は、アルファマップされたジオメトリが距離とともに消えてしまうという問題に対処するため、確率的またはハッシュ化アルファテストというアイデアを導入しました。確率的アルファテストは、0.5という固定の閾値ではなく、ランダムな\(\alpha_{\tau}\)を使用します。確率論がもたらすテンポラルノイズに対処するため、安定したノイズのない閾値を提供する手続き的ハッシュを提案しました。
 2つのスケールで離散化された物体空間座標をハッシュ化することで、安定したピクセルスケールのノイズを得ました。補間されたハッシュ値が一様な分布を保つようにする方法、異方性の存在下でサンプルの品質を維持する方法、ハッシュ化アルファテストがテンポラルアンチエイリアシングとどのように連動するかを示しました。図13と付属のビデオで時間的安定性を示します。そして、この安定したサンプリング方式が、他の確率的な光輸送効果にどのように拡張できるかを提案しました。我々のハッシュドテストを再現するインラインコードを提供しました。
 \(\alpha_{\tau}\)を変化させながらアルファトゥカバレッジと網戸透過化について考えることで、これらすべてが透明化のための異なる離散サンプリング戦略であることを示す洞察が得られます:アルファテストとアルファトゥカバレッジは通常のサンプリングを行い、網戸透過化はサンプルをインターリーブし、確率的アルファテストはランダムにサンプリングし、ハッシュ化アルファテストは一様なハッシュ関数による準ランダムサンプリングを使用します。
 我々のハッシュ化テストは、シーンに依存しないパラメータで空間的・時間的に安定したノイズを提供するが、2Dと3Dのハッシュ関数の空間を探索し、フレーム間のフリッカーを最小化するのはどれかを調べることはしませんでした。さらに、オブジェクト空間座標よりも洗練されたハッシュ入力を使用することで、より多様な高度にインスタンス化されたシーンで一般化できるかもしれません。どちらの分野も、今後の研究にとって有益であると思われます。

Acknowledgements

我々の研究はより大規模な研究プロジェクトから発展したため、多くの研究者が直接的・間接的に貢献しました。式2のcdfを導出してハッシュの統一性を保ったPete Shirley、研究する価値のある単純化されたドメインとしてアルファマップを提案したCryril Crassin、安定したノイズについて議論したAnton Kaplanyan、foveated VRでハッシュアルファを試したAnjul Patney、追加の議論をしたDave Luebke、Aaron Lefohn、Marco Salviに感謝します。また、洞察力に富んだI3DとTVCGのレビュアーと、Twitter上のゲーム開発者コミュニティからの数多くの有益なコメントのおかげです。

References