5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-11-04

フラクタルブラウン運動の記事(ランダム地形生成 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

5
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?