wavelet noise and modified noise 1

by syoyo

ことしは、SIGGRAPH 2005 ではエイリアシングを低減する wavelet noise が、
Graphics Hardware 2005 では GPU での実装に適した modified noise for
evaluation on graphics hardware
が提案されました。

wavelet noise は低周波数を含まなく、
かつ完全に帯域制限(周波数があるレンジ内にある)されたノイズを生成することができます。
このノイズ関数を用いることで、エイリアシング問題が緩和されます。
Pixar の PhotoRealistic RenderMan では、これからはノイズ関数の実装には
この wavelet noise が用いられるとのことです。

Olano’s mofied noise は、2D テクスチャから 3D ノイズを生成でき、またハッシュのルックアップを
必要としないため、GPU での処理に適しています。
これからの GPU 上でのシェーダによるノイズの生成には、
このノイズ生成手法が用いられていくでしょう。

今年はノイズの当たり年といってもよいかもしれません。

ノイズは Perlin ノイズ使っとけばいいんじゃない?
と思っていましたが、今回これら二編の論文を通じて、
レンダラ書きとして、もっとノイズに関して学ぶ必要があると痛感しました。
Texturing and Modeling や、Lewis の solid noise の論文もこれから詳しく読んでいこうと思います。

Wavelet noise


左: 通常の Perlin ノイズ。右: ウェーブレットノイズ。
ウェーブレットノイズのほうは、遠方でもディテールがつぶれていないことに注目。

ウェーブレットノイズを簡単に説明すると、
元のノイズ画像を、一回縮小して拡大しなおして(つまり”ぼかす”)、
その結果を元のノイズから引くと、
低周波数成分を含まないノイズができる、ということです。

このような考えかたは、すでにいくつかの分野で用いられています。

フォトショップなどでの画像処理のテクニックで、
元画像を一度ぼかし(縮小フィルタリングと同じ)、
元画像からそのぼかした画像との差分を取ると、
よりディテールの向上した画像が生成できたりします。
デザイナの方はこの手法をよく知っているのではないでしょうか。

また、逆の操作となる考えかたで、テクスチャ圧縮への応用があります。

これは低ディテール(低周波成分)のテクスチャと、
変異成分(高周波数、だけどそれほど解像度は高くない)から、
もとのテクスチャを復元します。
低ディテールテクスチャなどは圧縮に適していますので、圧縮率が向上します。

本論文では、そのような処理が、ウェーブレット理論で説明できることを
示しています。
また、ダウンサンプリング -> アップサンプリング(つまり “ぼかす”)の操作において、
高周波成分を含まなくなるように、
ウェーブレット理論に従って最適なダウンサンプルフィルタカーネル(B-スプライン)の提案を行っています。
(つまり元のノイズ(高周波 + 低周波)から、
ダウンサンプリング -> アップサンプリングによるノイズ(低周波)を引くことで、
ウェーブレットノイズ(高周波)ができるように)

論文によれば、Perlin ノイズをフーリエ変換して解析してみると、
低周波と高周波の成分は含まず、周波数帯域は制限されています。


左: Perlin ノイズの画像  右: Perlin ノイズのフーリエ像

フーリエ像において、画像中心付近にプロット値があるのは低周波成分があることを示します。
画像外側にプロット値があるのは高周波成分があることを示します。

理論的には、この 0.5 より小さい部分、
つまり x^2 + y^2 < 1 の円内には周波数成分がない、
つまり黒色に なっているべきです。
(これは後述のノイズバンドに関連します)

さて、上図の Perlin ノイズは、帯域制限(band-limited)になっているとはいえども、
0.5 より小さい部分にも、
それなりに低周波成分が含まれてしまっています。

それに対して、ウェーブレットノイズでは、0.5 以下の部分の
低周波数成分はまったく含んでいません。


左: Wavelet ノイズの画像  右: Wavelet ノイズのフーリエ像

右のフーリエ像が四角く穴(銭形?)が開いているのは、
フィルタカーネルが非対称であるためとのことです。

Noise band

ノイズを使ってプロシージャルシェーディングを行うときには、ご存知の通り、
ノイズは 1 回だけ使われるのではなく、
しばしば複数の周期のことなるノイズに重みをつけて重ね合わせて用いられます。
たとえば turbulance や fBm などですね。つまり、

w0 * noise(x) + w1 * noise(2 * x) + w2 * noise(4 * x) + …

という感じです。右の項になるほど、ノイズの周波数は高くなります。
このときの各ノイズを、論文やコミュニティではバンド(band)と読んでいます。

ここで、やっとPerlin ノイズの問題が明確になってきます。

各バンドの周波数成分は、解像度が半分になればおおよそ周波数成分も半分になります。
これはつまり、一段低い解像度(1/2 倍)の Perlin ノイズは、
そのフーリエ像も大体 1/2 に縮小することになります。
(必ずしもこれは成り立たないのかもしれません。
Wavelet ノイズでは、なるべくこのようになるようにフィルタカーネルを設定しているようです)

つまり、ノイズ関数のフーリエ像では、 0.5 以下の部分には周波数がないことが望まれます。
その一段下の解像度のノイズの周波数が、0.0 – 0.5 の部分の部分に埋め込まれるようにできるからです。

下の論文に掲載の図は、3 つのバンド(1/4, 1/2, 1 の解像度)
の合成で出来た関数のフーリエ像です。


左: Perlin ノイズのフーリエ像  右: wavelet ノイズのフーリエ像
3 つのノイズバンドに個別に色付けしてあります。
黄(低周波ノイズバンド)、紫(中)、青(高)です。

黄、紫、青の順で円環が大きくなり、またお互い重なりがないのが理想です。
(つまりおのおののノイズバンドが真に帯域制限されており、直交している)
wavelet ノイズはほぼこの要求を満たしていますが、
Perlin ノイズは、もともとの各バンドでのフーリエ像に 0.5 以下の部分にも
周波数が存在するため、複数のバンドを合成すると、
周波数が重なりあってしまって白くなってしまっているのがわかります。

Wavelet ノイズは、そのフーリエ像において、
青で色付けされたバンドは円の中に四角形の形をし、
そのひとつ下の解像度である紫のバンドは四角形の中に円、
そしてそのまたひとつ下の解像度である黄色のバンドは円の中に四角形、
というかたちとなっています。
一段ダウンサンプルすると形が変わるのは、
これはダウンサンプルに用いる B スプライン関数のフィルタによるもののようです。

ディテールの消失(loss-of-detail)とエイリアシング(aliasing)

論文では、通常の Perlin ノイズを用いた場合、
上記のバンド間での周波数の重なりの問題により、
シェーディング時にディテールの消失とエイリアシングのトレードオフ問題が生じることを指摘しています。

Perlin ノイズの各バンドは、それなりに周波数の帯域が広いため、
あるサンプリングレートで十分に表現可能な低周波成分と、
エイリアシングを引き起こしてしまうような高周波成分の両方が含まれていることになります。

これはつまり、あるノイズバンドが含んでいる周波数帯が、
シェーディングのサンプリングレートの基準からみてナイキスト周波数付近にあるとき、
(論文では 1 ピクセル幅を基準にしているようです)
このノイズバンドを切り捨ててしまうと、
ディテールが消失(サンプリングレートで十分に表現可能な低周波領域がなくなるため)してしまい、
逆にこのバンドを含ませるようにすると、
エイリアシングが生じてしまう(サンプリングレートで表現不可能な高周波領域が入り込む)、
というトレードオフの問題が生じるのです。

3D -> 2Dノイズの問題

さらにひどく、Perlin ノイズ、ウェーブレットノイズともに解決できない本質的な問題として、
3D ノイズを 2D 面に用いるときの問題を論文では提示しています。

たとえば、3D ノイズを使って、2D のサーフェスにシェーディングを施すことは
プロシージャルシェーディングではよく用いられます。この場合、
サーフェスの法線と垂直方向の平面で 3D ノイズを切り取り、
その平面(2D)のノイズを利用することになります。

このとき、3D ノイズが完全に帯域制限されていたとしても、
一般的にはそれを 2D 面に貼り付けたとき、
結果は帯域制限されません
(つまり任意の周波数成分が含まれてしまう)


3D Perlin ノイズから 2D 面を切り出したノイズ
フーリエ像では帯域制限性を示さず、低周波成分も含まれてしまっている


3D ウェーブレットノイズから 2D 面を切り出したノイズ
フーリエ像では Perlin ノイズと同様に帯域制限性を示さず、低周波成分が含まれてしまっている。
(わずかに銭形を示してはいるが)

この理由は、フーリエスライス理論により説明できます。
(フーリエスライスは、今年の SIGGRAPH 2005 の論文でも、
私が知る限りほかに 2 つの論文でも取り上げられています。
Fourier Slice Photography, A Frequency Analysis of Light
Transport)

射影ウェーブレットノイズ

本論文では、さらにこのような 3D -> 2D ノイズの問題を解決する、
射影ウェーブレットノイズ(Projected wavelet noise)の提案も行っています。

射影ウェーブレットノイズを使うことにより、帯域制限の性質を保ちつつ、
3D -> 2D ノイズを作成することができます。

To be continued…

Advertisements