Luminance-Contrast-Aware Foveated Rendering [Tursun 2019]
https://www.pdf.inf.usi.ch/projects/AdaptiveFoveation/
SIGGRAPH 2019 の論文。
フォービエイテッドレンダリングは、ユーザが注視している点でのレンダリングは精細に、逆に周辺視野では荒く行うことでレンダリングの高速化をする技術である。 近年、ディスプレイなどの表示側デバイスがどんどん高解像度化・高フレームレート化しているのに対し描画側のデバイスの性能向上が追いついていない問題への有効な対処法として、 VR 関連の文脈でも注目されることが多い。
既存の手法では、注視点からどれだけ離れているか (eccentricity: 偏心角) のみに応じて描画解像度を変化させていたが、 この論文では、描画される画像の知覚上でのコントラストと、知覚可能になるしきい値をモデル化し、それを元に描画解像度を決定することで より効率的でアダプティブなレンダリングができるとしている。
提案手法の概要
提案手法では、描画される画像の内容が視覚の弁別性能に及ぼす影響を考慮した上で解像度の最適化を行う。 このため、最終的なレンダリングをする前に低解像度での予備的なレンダリングを行う 2 パスでの描画が必要となる。 (ここで言う画像の内容に依存する、というのは『人間の顔の形をしたものは他の形状よりも発見しやすい』とかいった高度なドメインの話ではなく、『エッジ付近は解像度高めがよい』とかいった感じの話である)
具体的な流れは以下。
- 低解像度 (元の 1/16) でのレンダリングを行う
- 低解像度の画像をパッチに分け、各パッチにおいてギリギリ知覚可能でない最低解像度を予測
- パッチごとに、予測された解像度での最終的なレンダリングを行う
最低解像度の算出
(時間方向でのチラつきのない) 低解像度のレンダリングはガウシアンフィルタを掛けた高解像度のレンダリングと知覚上で同等である。 このため提案手法では、低解像度の画像は元の画像にガウシアンフィルタを掛けたものとして定式化し、 また、最低解像度を求める際は、知覚可能でない最大のガウシアン標準偏差を求める問題として立式する。
解像度がある値にまで低下した際にそれが知覚可能であるかどうかは、 その解像度において輝度のコントラストの変化が知覚可能であるかどうかで判別する。 そのため、人間の知覚上の輝度コントラストのモデル化が必要となる。
知覚上の輝度コントラストのモデル
元のピクセル情報からいくつかの変換を順に行っていき、知覚上の輝度コントラストのモデルを得る。
輝度コントラスト
各ピクセル を輝度 に変換したのち、ラプラシアンピラミッド分解を行う。 その結果、ある空間周波数における輝度の差 が得られ、 輝度コントラスト は、 を、近傍の平均輝度 で割った値として得られる。 は画像の空間的な周波数で、単位は cpd (cycles-per-visual-degree)。
は が小さい場合に値が発散するを防ぐための適当な小さい定数である。
ラプラシアンピラミッド分解では、 異なる周波数帯ごとの画像の特徴 を得るため、 以下の手順を行う。
- とし、元画像を とする
- にブラーを掛け とする
- - を行い、差分画像 を得る
- をサブサンプリングして縮小化し、 とする
- とし、手順 2. に戻る
画像そのまま引用してきた関係で、 は上の式で周波数を表している と関係がないので注意。
(画像引用: The Laplacian Pyramid)
以上で得られた から が得られる。 (はずだがやり方自分はよく理解してない。 に対応する部分の値を各 から読んで、周波数 についての値になるようにいい感じに補間的なことやると になる気はする)
コントラストの正規化
次に、得られたコントラスト に人間の知覚特性を表す関数である CSF (contrast sensitivity function) を掛けることで、 正規化したコントラスト を得る。 CSF は人間が知覚可能なコントラストの逆数として定義されるため、 の絶対値が 1 を超える場合、そのコントラストは人間が知覚可能ということになる。
はピクセル が注視点からどれだけ離れているか (偏心角) を表し、 は順応輝度を表す。(明るい所から暗い所に行くと目が慣れるまで暫くコントラストが判別できないやつっぽいが、あんまり理解してない)
CSF は、ベースとなる関数 に 周辺視野における感度の減衰と、順応輝度の効果を加えてモデル化されている。
は周辺視野における感度の減衰率を表すパラメータである。 は異なる 4 つの周波数 (4, 8, 16, 32 cpds) において取る値 をパラメータとし、それらを対数スケールでいい感じに補間した関数となっている。
上記のパラメータ群は後述するキャリブレーションにて値を求める。
ビジュアルマスキング
知覚上のコントラストのモデル化の最終段階として、 人間の知覚上の輝度へ影響を与えるビジュアルマスキングという現象を考慮したコントラスト値 を求める。
上の式で分子は、自己コントラストマスキングを補正する。 自己コントラストマスキングとは、コントラストの刺激と知覚上の強さが線形に対応していない事を指し、 要するにここではガンマ補正みたいな事をしている。
また分母は、空間コントラストマスキングをモデル化している。 これは、ある点の知覚上のコントラストはその近傍のコントラストに影響を受ける事を指す。 ざっくり言うと背景がごちゃごちゃしているとコントラストが弱く感じるのである。
式中の は自己コントラストマスキングと空間コントラストマスキングの強さを表すパラメータであり、 これらも後述するキャリブレーションで値を求める。
( が 1 の場合に が 1 にならず、正規化されてない気がするがこれで良いのかわからなかった。 ビジュアルマスキングの式の引用元論文では正規化用の係数が分母にあるっぽいが、この論文中ではそれが無い?)
最低解像度の推定
先述した通り、低解像度の画像は高解像度の画像にガウシアンフィルタを掛けたものとして考え、 ここではその知覚可能でない最大の標準偏差を推定する。
元の高解像度画像の知覚上コントラストを 、ガウシアンを掛けた低解像度画像のそれを とすると、 その解像度変化が知覚可能でないということは、そのコントラストの変位が知覚可能でないということを指し、
として定式化される。 ある周波数のある点についての最低解像度の推定は、この条件下での最大の標準偏差を求めればよい。
( は負の値も取りうるので、知覚可能でない条件には も含まれそうだが、 があるピクセルで負の値を取る場合には そのエッジの逆側のピクセルでの は絶対値が同じような正の値になっているはずなので、 実用上は正の値についてだけ見ればよいのだと思う)
上の条件のもと標準偏差の最大値を求める際、 そのままだとイテレーティブに解を求めるしかなく重いのだが、 簡単な過程を置いて式をガチャガチャやると閉じた式として解が得られるらしい。
ここでの最終的な出力は、提案手法の概要で述べたような画像パッチごとの標準偏差である。 詳細は省略するが、 パッチ内の各ピクセルの標準偏差について、 全周波数中における最小値を求め (どの周波数帯でも知覚可能でないようにする)、 その値をパッチ内の全ピクセルでいい感じにスムージングして、 そのパッチでの標準偏差を得る。
キャリブレーション
上述した知覚上の輝度コントラストモデルにて決めなければいけないパラメータがいくつかあったので、 実際に人間の主観評価実験を通してそれらを求める必要がある。
このために、行った実験の大まかな流れは以下。
- あるパッチを敷き詰めて並べ、画像を作成する。
- 画像の周囲をボカした状態にする。
- 被験者が画像の中心点を見ている状態で、ボカシのある画像とない画像が識別可能であるかどうかを調べる。
これを、画像のパッチの種類や、ボカシの強さのパラメータを変えつつ繰り返し、 得られた結果から提案モデルのパラメータを求める。
(画像を敷き詰める際に上下左右反転させながら並べるのは、パッチ間の切れ目を生じさせない、つまり変な高周波成分を紛れ込ませない為である)
結果
下記の画像は上から順に、 画像に対して適用した結果、 Unity 上での実装、NVIDIA Variable Rate Shading (VRS) API での実装。
ただし、ラスタライザで可変の解像度でレンダリングするのは難しいらしく、 Unity 上の実装は高解像度のレンダリング結果に対して、 推定される最低解像度を返す仕様になっており、高速化はされていない。
(注視点は画像中央とする)
ピンボケしている部分では解像度が低くなり、 逆にディティールがはっきりしている部分では高くなっていることがわかる。
速度に関しては、 提案手法ではレンダリングが 2 パスとなることにより、 標準のフォービエイテッドレンダリングと比較してむしろ遅くなる可能性もあるが、 基本的には提案手法の方が有利らしい。 ただし、シェーディング処理が軽く ジオメトリの複雑さがレンダリング時間に対して支配的な場合は、標準の手法の方が有利なときもあるようだ。