椿の日記

たぶんプログラムの話をします

Frequency Domain Normal Map Filteringを読了

Frequency Domain Normal Map Filteringを読みました。法線マップのフィルタリングに関する論文で、法線マップを単純にミップマップ化すると法線が平均化されて想定外の方向を向いてしまい、シェーディング結果が変わってしまう
問題に対してどのように対処するのか、ということを解説してるみたいです。

これは例えば「VVVVVVVVVVV」というような形状のギザギザだけどスペキュラの指数係数が大きな板を考えると分かりやすいです。このような凹凸を単に法線マップ化して線形フィルタを使うと、法線は平均化されて板に対して垂直に向いてしまいます。スペキュラ反射色は法線方向に依存してしまうので、スペキュラハイライトが全然違う結果になることが容易に想像できます。

で、この論文の手法は、まず法線マップを法線分布関数(NDF)と呼ばれるデルタ分布関数で表現し、このNDFを球面調和関数(SH)展開してその係数を保存します。法線はSH係数から復元することができます。そしてこの係数は単純に線形補間することができ、線形フィルタを利用しても上記のようなアーティファクトが出ないということであるようです。

ただ、SHはデルタ関数分布の近似としては余り嬉しい形状ではありません。このためこの手法ではNDFをSHとは別に放射基底関数(Radial Basis Function)で近似するようです。このNDFの近似の問題に限っては単純なSHよりも適していて、これを使うことでより効率的にNDFを保存できる、とのこと。

…というわけで一通り読んだのですが、結構使える範囲が限られる気はします…(鏡面反射するようなマテリアルで、法線方向が急激に変わるようなタイプの法線マップだといいのかな?)