フラクタルブラウン運動の記事(ランダム地形生成 Part2~フラクタルブラウン運動)で紹介されているノイズをFabricEngineで試してみました。
パッチでもできそうかと思ったのですが、
今ひとつ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次元の実装が見当たらない・・・?)
インプットとアウトプットの設定は以下になります。
パッチの構造は以下のようになっています
処理の流れを追ってみると、
1.GetPlaneで元のメッシュを作る
2.GetAllPointPositions頂点を全部取り出す
3.フラクタルブラウン運動でy座標を変更
4.SetAllPointPositionsでメッシュに再設定
5.法線がくずれるので、RecomputeNormalsで修正
6.DrawPolygonMeshで描画
ちなみに動いているのは時間を使っているからです。
どうやらFloat32でtimelineをexposeすると自動で入れてくれるようです。
という感じですね、このあたりはパッチで組めるのは楽でいいですね。
まだ全体的にパッチが少ない感じがして、ちょっと不自由な印象です。
C++から処理を呼び出したりもできるらしいので、そのうちちょっと試してみたいなと思ってます。
一応canvasファイルをgithubにあげておきました。
https://github.com/Ushio/FractalBrownian


