FabricEngine

FabricEngineでフラクタルブラウン運動を試してみる

More than 1 year has passed since last update.

フラクタルブラウン運動の記事(ランダム地形生成 Part2~フラクタルブラウン運動)で紹介されているノイズをFabricEngineで試してみました。

こんなかんじです。
fabric.gif

パッチでもできそうかと思ったのですが、
今ひとつfor文にあたるパッチが見当たらず、結局kl言語で実装しています。
以下がそのパッチです

dfgEntry {
  outpositions.resize(inpositions.size());

  SInt32 N = 10;
  Float32 kPersistence = persistance;

  for(SInt32 i = 0 ; i < inpositions.size() ; ++i) {
    Vec3 p = inpositions[i];

    Float32 noise = 0.0f;
    Float32 sum_amp = 0.0f;
    for(SInt32 j = 0 ; j < N ; ++j) {
      Float32 freq = 0.5 * pow(2.0, Float32(j));
      Float32 amp = pow(kPersistence, Float32(j));
      Float32 value = perlinNoise(p.x * freq, 0.0, (p.z + offsetz) * freq) * amp;
      noise += value;
      sum_amp += amp;
    }
    noise /= sum_amp;
    p.y = noise;

    outpositions[i] = p;
  }
}

perlinNoiseが標準で存在するので実装はとてもシンプルです。
(ただこれ、1次元2次元4次元の実装が見当たらない・・・?)

インプットとアウトプットの設定は以下になります。

Fabric_Engine_-__Users_Ushio_Documents_Fabric_FractalBrownian_FractalBrownian_canvas 2.png

パッチの構造は以下のようになっています

Fabric_Engine_-__Users_Ushio_Documents_Fabric_FractalBrownian_FractalBrownian_canvas.png

処理の流れを追ってみると、

1.GetPlaneで元のメッシュを作る
2.GetAllPointPositions頂点を全部取り出す
3.フラクタルブラウン運動でy座標を変更
4.SetAllPointPositionsでメッシュに再設定
5.法線がくずれるので、RecomputeNormalsで修正
6.DrawPolygonMeshで描画

ちなみに動いているのは時間を使っているからです。
どうやらFloat32でtimelineをexposeすると自動で入れてくれるようです。

という感じですね、このあたりはパッチで組めるのは楽でいいですね。
まだ全体的にパッチが少ない感じがして、ちょっと不自由な印象です。

C++から処理を呼び出したりもできるらしいので、そのうちちょっと試してみたいなと思ってます。

一応canvasファイルをgithubにあげておきました。
https://github.com/Ushio/FractalBrownian