マリオネット・スクリプト解説講座

第23回「アルゴリズムデザインのすすめ:DLAノード」

ArchitectLandmarkSpotlightDesigner2022

この記事は【2022年2月22日】に公開されたもので、2年以上経過しています。
記事の内容が古くなっていたり、新機能の追加・機能の改善が図られていることがあります。

誰もがマリオネットでアルゴリズムデザインを気軽に始めることができるように、A&Aノードライブラリにアルゴリズムデザインに特化したノードを追加しました。第1弾は、ブラウン運動を利用した粒子の凝縮体を作成できるDLAノードです。

マリオネットツールではVectorworksの設計にプログラミングを取り入れることができるようになります。コンピューターのパワーを使って、手作業では実現が難しかった複雑なデザインを生み出すことも可能です。

コンピューターのパワーを用いたデザイン手法のひとつに「アルゴリズムデザイン(アルゴリズミックデザイン)」があります。アルゴリズムデザインでは、ある目的を達成するために設定したデータやルール(アルゴリズム)を用いて形状を複雑にコントロールします。

自作のルールを適用して自分だけの面白い形状を生み出すのもいいですが、アルゴリズムデザインと相性のいい代表的なアルゴリズムがいくつかありますので、まずはそこから始めるのがいいでしょう。とは言え、いきなりマリオネットでアルゴリズムを組むと言うのは敷居が高い作業です。

マリオネット解説講座では代表的なアルゴリズムを記述したオリジナルノードを順次作成・配布していきます。A&Aノードライブラリをダウンロードしてマリオネットを用いた設計にご活用ください。

A&Aノードライブラリ2022 ダウンロード

23-1. Diffusion Limited Aggregation

DLA(Diffusion Limited Aggregation)は日本語では拡散律速凝集と言い、ブラウン運動する粒子が核となる粒子と結合することで核のクラスタが成長していく過程のことをいいます。

なんだか難しい言葉ばかりですが、アルゴリズムはシンプルです。

    1. 核となる粒子を配置してクラスタとする
    2. 新たに粒子を配置する
    3. 粒子の座標をランダムに微小変化(ブラウン運動)する
    4. 核となる粒子と衝突するまで座標の微小変化繰り返す
    5. クラスタと粒子が結合して新しいクラスタとなる

粒子がランダムにくっついて徐々に大きくなっていくと言う仕組みです。DLAで作成したクラスタは、枝分かれした木のような美しい模様になります。

23-2. DLAノード

A&AノードライブラリにDLAノードを追加しました。DLAノードは指定した図形内にDLAクラスタを生成して全ての粒子の中心座標のリストを出力します。

入力パラメータ

    • hFrame:DLAクラスタを発生させる枠となる図形のハンドルを指定します。枠の図形は多角形または曲線を指定します。
    • pCenter:核となる粒子の位置を指定します。指定しない場合は枠の図形の中心となります。
    • nRadTouch:粒子が衝突したかどうかを判定する半径です。枠の図形に対して大きすぎず小さすぎないサイズ設定してください。
    • iCount:配置する粒子の最大数を指定します。このカウントの数だけ粒子を配置しますが、一定回数内(10000回)のブラウン運動で収束しない粒子は淘汰します。

出力データ

    • pParticle:核を含めたDLAクラスタの全ての粒子の中心座標のリストを出力します。クラスタに結合されない粒子は出力されません。
    • pBranch:粒子がDLAクラスタに結合するときに衝突した相手の粒子の中心座標のリストを出力します。核の粒子には相手がいませんのでリストには含まれません。

23-3. DLAノードの使い方

DLAノードの使い方の解説をします。練習として円の内側に生成したDLAクラスタの座標リストを図面上にプロットします。

「Circle」ノードを使用して、半径500mmの円を作成します。

「Convert to Polyline」ノードを使用して、円を曲線に変換します。

「DLA」ノードを配置します。hFrameに変換した曲線のハンドル、nRadTouchに衝突半径の20mmiCountには200個を入力します。ここではクラスタの核を円の中心とするため、pCenterには何も入力しません。

pParticleには生成したDLAクラスタの粒子の座標のリストが出力されます。

この座標に円をプロットしてDLAクラスタを可視化します。pParticleの出力を「Circle」ノードに接続します。円の半径は衝突判定に用いた20mmを使用します。

プログラムを実行します。DLAクラスタがプロットされました。

23-4. ラインを描画する

pBranchは衝突した相手の粒子の座標リストです。pParticlepBranchの結果を比較することで粒子同士がどのようにくっついたのかを確認することができます。簡単なのは粒子を線で繋ぐ方法です。

「Line」ノードを使って、pParticlepBranchのリストを線の始点と終点に設定しますが、ひとつ注意があります。核の粒子には衝突する相手はいませんので、リストの長さが違います。pParticleのリストの先頭(核の粒子)を削除してから「Line」ノードにつなぎます。

プログラムを実行します。枝分かれしたツリー構造のようなデザインが浮かび上がります。

ラインを板状のパス図形に変換すれば、アクセサリーのディスプレイとして活躍しそうな綺麗なオブジェクトの出来上がりです。

23-5. カラーリング

これはおまけですが、アルゴリズムデザインでは図形が複雑になりがちです。図形やデータの情報を活用してカラーリングすることで、デザインの結果を効果的に可視化することができます。

図形の情報を活用したカラーリングとしては、例えば次のようなものがあります。

    • 図形に紐付けた物性値によって色を変える
    • 図形の面積によって色を変える
    • 中心からの距離によって色を変える

今回は、使用した粒子の座標データのリスト内での番号によって色を変えてみます。こちらのDLAクラスタをベースにカラーリングします。

このDLAクラスタは下図に示すパラメータで生成したものです。この設定値で5分程度の計算時間になります。

このクラスタには約900個の粒子があります。リスト内の番号に応じて次のルールで面の色を設定します。

    • 0〜199番目:赤
    • 200〜399番目:オレンジ
    • 400〜599番目:黄
    • 600〜799番目:緑
    • 800〜番目:青

少し面倒ですが「Series」ノードを使用して0〜199200〜399など番号の数列を5パターン作成します。粒子の円図形のリストと番号の数列を「GetItem」ノードに入力して5つに分割します。

分割した円図形のリストに対して、それぞれにルールのとおりに面の塗りを設定します。Attributesノードにカラーの属性を設定して図形のリストを通過させます。

プログラムを実行します。DLAクラスタに5色のカラーリングが適用されました。

核から距離が離れることで色が変化しているようにも見えますが、一部核から近いところに黄色や青の粒子があります。これは他の枝に衝突することなく、隙間を通り抜けながら中心付近までブラウン運動を続けた粒子ということになります。このように図形としては表示されない粒子の運動の軌跡なんかも見えてきて面白いですね。

A&Aノードライブラリ2022 ダウンロード

この機能を利用できる製品

Architect

Vectorworks Architect

建築設計や内装、ディスプレイデザインに対応した先進的なBIM・インテリア設計支援機能、拡張機能、さらには豊富な建築向けのデータライブラリを搭載した建築/内装業界向け製品
詳細情報 購入ページ

Landmark

Vectorworks Landmark

地形モデルや多彩な植栽、灌水設備計画等に対応するランドスケープデザイン機能、さらには豊富な造園向けのデータライブラリを搭載した都市計画/造園業界向け製品
詳細情報 購入ページ

Spotlight

Vectorworks Spotlight

ステージプランニングやライティング計画に対応した先進的な舞台照明計画支援機能、さらには各種メーカー製のトラスや照明機材、音響機器等の豊富なデータライブラリを搭載したエンタテインメント業界向け製品
詳細情報 購入ページ

Designer

Vectorworks Design Suite

専門分野別(建築設計/ディスプレイデザイン、ランドスケープデザイン、ステージデザイン&スポットライトプランニング)の設計支援機能、拡張機能、さらには豊富なデータライブラリを搭載した最上位の製品
詳細情報 購入ページ