noise:ノイズ
- 動きなどにばらつきを与え自然な感じにしたい時に乱数では変化が激しすぎて不自然になることがしばしば有ります。それを補う目的で作られたのがパーリンノイズです。3Dソフトで大理石や木目など自然物のテクスチャパターン生成するのによく使われます。AfterFxのnoise( ) はそのパーリンノイズをベースにしているということです。
ちなみに Ken Perlinという人が作り出したノイズで、これでアカデミー賞を受賞しています。拍手!
noise( ) 引数はval又はArray 返却値はNumber
- このメソッドの引数に noise(2) と書いてもrandom( )のような時間軸での変化は有りません。
- 引数を時間で変化させることで返却値に変化がつきます。
- 下のグラフは横軸が時間で、1秒間隔の目盛りになっています。
- Y軸は±1の値を取っています。引数の大小による違いをみてください。
- (薄いグレーのグラフはnoise( )の引数と同じ周波数のサイン波です。)
ノイズの違い
noise( )の特徴
- 1,周期的である。
- グレーのグラフとサイクルが同じである。
- 2,値はほとんど[-1~1]の範囲。
- AfterFxのヘルプには「0 ~入力値の範囲の数値を返します。」とありますが実際は違います。。
- 3,引数が整数のときの値は必ず 0 になる。
具体的な使い方としては
- 小刻みな変化にしたいときは大きな値を入れる。
- 緩やかな変化には小さい値を引数にする。
- 振幅の大きさは返却値に適当な値を乗算する。
例:空間にノイズを適用
- 図は以下の式の結果をプロットしたものです。
x=noise(time*-30);
y=noise(time*30);
[x,y]*100
オレンジの枠が100*100Pix です。
- random( ) とは かなり結果が違うのがわかります。
- 中央に格子状の像が現れるのはパーリンノイズの特徴です。
例:サイン波にノイズを追加
Math.sin(time*Math.PI)*50+noise(time*10)*10
サイン波より周波数が高く、振幅の小さいノイズを加算しています。
例:モーションパスにノイズを追加
オレンジの点は5秒で正円を描くモーションがついています。それにノイズを加えました。
○オレンジの「位置」に以下の式を記述
nn=[noise(time*2)*30,noise(time*-2)*30];
add(position,nn)
○白い点の「位置」に以下の式を記述
nn=[noise(time*2)*40,noise(time*-2)*35];
add(thisComp.layer("orange").position.valueAtTime(time-0.2),nn)
- 変数nnが追加するノイズです。
- 「位置」はベクターのadd( )で加算してみました。
- 白点それぞれのパラメータを少しずらしてばらばらに追いかけるようにしてみました。