« C4D C.O.F.F.E.E. ランダム値の取得の為のRandomクラスに似たNoiseクラスを使ってみる。 | トップページ | C4D C.O.F.F.E.E. SendModelingCommand()/CallCommand()実行前にクラスチェック? »

C4D C.O.F.F.E.E. Noiseクラスを使ってみる。

さて、Noiseクラスを使ってみよう。
Fbm等は、少し学習してからになりますが、NoiseやTurbulenceなら何とか使えそうです。

今回は、Noise()メンバ関数を使ってみます。
Turbulanceはオクターブがありますが、大差ありません。

では、Noiseを…

今回は、COFFEEエクスプレッションで試して見ます。

/*
Noise::Noise(time)
NoiseクラスのNoiseメンバ関数の引数aに時間を渡す。
オブジェクトがY軸方向に0.0~100.0の範囲で不規則に振動する。
2009.6.22
*/


main(doc , op)
{
  var niz = new(Noise);
  var sec = doc->GetTime()->GetSecond();
  var speed = 1.0;
  var height = 100.0;
  var pos = vector(0.0 , niz->Noise(sec * speed) * height , 0.0);

  op->SetPosition(pos);
}

このCOFFEEエクスプレッションは、オブジェクトをローカル座標のY軸に0.0~100.0で不規則に振動させます。
振動は、秒を基準にしているのでfpsが変更されても、振動の速さは変わりません。
振動の速さを変えるには、speed変数の値を大きくしてください。
振動幅を変えるには、height変数の値を変えてください。

Noise_08

ま、振動させるならNoiseより、SNoiseを使った方が良いだろう。

ただ振動させるだけならば、振動エクスプレッションタグで十分でしょう。

「noisetime.ZIP」

このスクリプトは、時間(秒)を使いましたが、次は位置(x)を使って見ます。
もう想像は付きますね。

/*
Noise::SNoise(x)
NoiseクラスのSNoiseメンバ関数の引数aに座標xを渡す。
オブジェクトがx軸方向へ移動するとY軸方向に±100.0の範囲で不規則に振動する。
2009.6.22
*/


main(doc , op)
{
  var niz = new(Noise);
  var pos = op->GetPosition();

  pos.y = niz->SNoise(pos.x / 100.0) * 100.0;

  op->SetPosition(pos);
}

単純に時間とx座標を置き換えただけなので、それほど新しい発見はありません。

Noise_07

「snoisex.ZIP」

この2つのスクリプトは1次元でした。
では、3次元のノイズを試してみましょう。
3次元と言っても、(2次元 + 時間)です。

平面オブジェクトで、向きは(+Y)を使います。この平面オブジェクトを編集可能にしてポリゴンオブジェクトにしてください。
2次元は平面オブジェクトのx , z座標、時間はタイムラインです。

/*
Noise::SNoise(x , z , time)
NoiseクラスのSNoiseメンバ関数の引数aに座標xを、bに座標zを、cに時間を渡す。
アニメーションを再生するとオブジェクトの表面が±100.0の範囲で不規則に波打ちます。
2009.6.22
*/


main(doc,op)
{
  var niz = new(Noise);
  var pts = op->GetPoints();
  var ptc = op->GetPointCount();
  var sec = doc->GetTime()->GetSecond();
  var i;

  //ポイントの座標の変更
  for(i = 0 ; i < ptc ; i++){
    pts[i].y = niz->SNoise(pts[i].x / 100.0 , pts[i].z / 100.0 , sec) * 100.0;
  }

  //オブジェクトの更新
  op->SetPoints(pts);
  op->Message(MSG_UPDATE);
}

オブジェクトの表面が波打っているアニメーションになりました。

Noise_06

「snoisexztime.ZIP」

これだけの事ならば、マテリアルの変位マップでノイズテクスチャを使ったアニメーションの方が、ノイズの種類も沢山ありますし、わざわざコードを書かなくてもね…

|

« C4D C.O.F.F.E.E. ランダム値の取得の為のRandomクラスに似たNoiseクラスを使ってみる。 | トップページ | C4D C.O.F.F.E.E. SendModelingCommand()/CallCommand()実行前にクラスチェック? »