Home > uncategorized > fBm( 追々々記しました )

fBm( 追々々記しました )

noiseとfBmの違いがよく分からん。


ここで言うnoiseとはken perlin氏のperlin noise。
いわゆるnoise。

僕の解釈だとperlin noiseは乱数を補完して波形(?)を作る。
それを複数回重ねて、完成。
1/f(noise)ってやつかな?あれ、自信ない。

で、noise = fBmだと思っていました。
でももしかしたら僕が思っていたnoiseというのはturbulenceで、
波形を作る処理自体がnoiseで、fbmというのはturbulenceを利用して作るもの、ということなのかも。

fbmというのはfractal brownian motionの略で、
山岳地帯などの断面がbrownian motionどうのこうので、
それとフラクタルをあわせてどうのこうの、というものだそうです。
これをディスプレイスメントマップに適応すると簡単にそれなりの山が作れるらしい、です。

嘘ついてたらごめんなさい。一応僕のリサーチの結果ではそうなってます。

そもそもなんでそんなものに興味を?という話なのですが、
RSLにfBmという関数があるのです。

で、それをMayaでも使いたい、と思って、今調べてる真っ最中。
そもそもMayaのnoiseとfractalの計算の違いとかよく分かってないよオレ。
うーん、もっと勉強せにゃ。

この辺もうちょい詳しく読んだらわかるかな。

ところでこの画像大好きです。
Advanced Rendermanに載ってる画像。
なんて綺麗なディスプレイス&擬似コースティクス(deep shadow使用)&ナイスプロシージャル!
これぞRenderman!
デモ画像のくせにすげーな。と思った一枚。

—————————————————追記
ここに詳しく載ってる。というか絵で見れる。Google先生のキャッシュですが。

noiseは乱数を補完した結果そのものにすぎないらしい。
で、僕がnoiseだと思っていたものはturbulenceと呼ぶのが正しいらしい。

でも別のページを見ると、turbulenceがNOISEって名前の関数になってる。

うーん、、この辺をなんと呼ぶのかは人の勝手というもんですか。もしや。
ややこしいなぁ、、、

—————————————————追々記
AdvancedRendermanによれば、
1/f( noise )なのがfBm、1/f( |noise| )なのがturbulenceであるとのこと。
つまりnoiseの取る値をそのまま使うのがfBmで、絶対値を取るのがturbulence。
とするとMayaのnoiseは既にfBmであると言って良いのか、、、

えーーーもうよくわかんない。

とりあえずAdvancedRendermanに載ってるfBmの図はMayaのnoiseと非常に良く似ている気がします。

うーん。

—————————————————追々々記
Mayaのnoiseノード触ってたらピーンと来たのでテスト。

noise_depth1.jpg
これはdepthを1にしたnoiseでディスプレイスメントしたもの。
おそらくこれがRSLで言うnoiseにもっとも近い状態だと思われる。

以下がdepthを6に設定して、ratioの値をそれぞれ変えてディスプレイスメントしたもの。

これでなんとなくわかった。
ratio=0.5の時が、RSLのfBm関数の結果に一番近いはず。

僕がかつてnoiseだと勘違いしていたものは、一般的にfBmと呼ばれるもの、と思って良いのかも。
fBmは周波数の異なった波を異なった重み付けで加算する。
depthはその処理を何回施すか。つまり1ならただのnoiseになる。
ratioはそれぞれの周波数の波に対する重み付け。

初回をn=0とした、ratio^nの重み付けを毎回施していると考えられる。
たとえばratio=0.5として、
初回はn=0でratioの0乗、1が求められる。
2回目はn=1でratioの1乗、つまり0.5。
3回目はn=2でratioの2乗、0.25。
という感じで重み付けをした結果を足していく。

んんんん、、、、文章で書くとすごくわかりづらい。
つーかまとめづらい。

このページがわかりやすい。(丸投げ)

まとめると、周波数がfreqencyRatio^n倍の波に
ratio^nの重み付けをして足す作業をdepth回繰り返したものがfBm。
その波を求めるために使うのがnoise。
noiseの値を絶対値にしてfBmと同じことを行うのがturbulence。

んで、Mayaでnoiseテクスチャ使って手っ取り早く山とか作りたいなら、
とりあえずratio=0.5、frequencyRatio = 2にしとけばOKってことです。
デフォルトの0.7だと1で値がクロップされてるようで、ジャギジャギしすぎちゃう。
0.3だとなんか弱い。まぁとりあえず0.5ぐらいから調整始めとけと。

僕のリサーチではその様に出ました。

で、これで間違ってたらヘコむ。
まぁその時はまた調べます。

間違いあったらどなたかご指摘お願いします、、

あーつかれた。

Comments:2

通りすがり 2007/08/07

fBm は fractional Brownian motion で、決して fractal brownian motion ではありません。

AdvancedRenderman をお持ちなら noise, fBm, turbulence のところを再度確認してみると関係がわかると思いますよ。

fBm はノイズをオクターブごとに合計したものです。

fBm と turbulence は加算する snoise() の絶対値を取るか、とらないかの違い。

snoise() は 2.0 * noise() – 1.0 で、平均 0.0 [-1.0, 1.0] の値をしめるノイズ関数。noise() をより使いやすくしたものです。

加算するノイズを gain = 1 / lacunarity ものが「1/fノイズ」です。この関係でないものは「1/fノイズ」ではありません。
fBm も turbulence も gain = 1 / lacunarity 以外を設定することは可能です。

ここまでの用語は RenderMan のものなのですが、使用するシステムによっては用語が違ったり、制御できるパラメータに制限が付いていても同じ用語を使ったりすることはあります。

tai 2007/08/07

>通りすがりさん
コメントありがとうございます!
かなり詳しい解説、助かります。

>fBm は fractional Brownian motion で、決して fractal brownian motion ではありません。
げ。fractionalと書いていたつもりでした、、
自戒の意を込めてこのままにしておきます。

なるほど、1/fノイズのこととか、かなり曖昧に理解していたので理解が深まりました。
つまり僕がfBmだと思っていたものは1/fノイズで、
fBmは1/lacunarityになっていなくてもOK、ということでしょうか。
turbulenceとfBmの違いに関してはAdvancedRendermanを読んでなんとなく理解してたつもりだったのですが、そんなに間違ってなかったようなのでほっと一安心です。

僕がfBmとnoiseの違いが分からないと思った事の発端は、Mayaのnoiseにあります。
depthを1にしないとRendermanで言うnoiseと等価なものにはならないと気づいた時になんとなくいろんな謎が紐とけて来ました。

おかげさまでより理解が深まりました。
というより正しく理解する事が出来ました。

ありがとうございます。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://blog.taikomatsu.com/2007/07/16/fbm-%e8%bf%bd%e3%80%85%e3%80%85%e8%a8%98%e3%81%97%e3%81%be%e3%81%97%e3%81%9f/trackback/
Listed below are links to weblogs that reference
fBm( 追々々記しました ) from memlog

Home > uncategorized > fBm( 追々々記しました )

Return to page top