森のモデル自動生成ツールの作成と紹介 -設計自動化ツール第3弾-

Grasshopper

今回は森林のモデリングを生成する方法について紹介します。

森林のモデリングをgrasshopper上でしたいけどどうしたらいいかわからないって言う人向けに森林自動作成ツールを作ってみました。

使い方とアルゴリズム、参照した本について載せていきます。

使い方

①まずはこの赤丸のコンポーネントをクリックして【点を選択】もしくは【面を選択】のどちらかに設定します。(面を選択した場合はパラメータで樹木の数を設定します。今回は説明の為に【面を選択】に設定した状態にします。)

②次に、Number Sliderコンポーネントである「点の数」のパラメータを必要な樹木の本数に設定し、「Toggle」コンポーネントをFalse → Trueにすると、Rhinoのコマンドプロンプトに「サーフェスを選択してください。」と表示されます。指示通り、森林を作成したいサーフェスをRhino上で選択します。

➂もう一つの「Toggle」コンポーネントをFalse → Trueにすると設定した点の数だけ樹木が生成されます。「広葉樹」以外に「針葉樹」も生成できるようにしようと思ってますが、現状はまだ実装できていないです。

④「low」・「middle」・「high」に変更することで樹木の枝ぶりを変更することが可能です。ただ、「high」は計算処理に時間がかかるため、どうしても必要ではない限りは選ばない方が良いかもしれません。

middleに設定した様子
highにした様子(エラーが出ていますが、随時修正していきたいと思います。)

アルゴリズム

①Rhino上で点を選択する、もしくはサーフェスを選択する指示を表示し、ジオメトリーをコンポーネント内に取り込む処理を行っています。

import rhinoscriptsyntax as rs
import Rhino as rh
import scriptcontext as sc

sc.doc = rh.RhinoDoc.ActiveDoc


if bool:
    if select == 1:
        points = rs.GetObjects("点を選択してください。", 1)


    if select == 2:
        surface = rs.GetObject("サーフェスを選択してください。", 8)
        surface = rs.coercegeometry(surface)

この場合に、

import Rhino as rh
import scriptcontext as sc
sc.doc = rh.RhinoDoc.ActiveDoc

を入れることでRhino上のモデルをGrasshopper上で扱うことができます。

これについては堀川淳一郎さんのqiitaの記事を参考にしています。

https://qiita.com/jhorikawa_err/items/827a83033083507bed91

Grasshopper / Pythonでライノオブジェクトをスクリプトでコントロールするための準備

②樹木生成についてのアルゴリズムは再帰アルゴリズムを用いています。枝の先から次の枝の先を決定する動作をループして枝が伸び続けるようなアルゴリズムになっています。これについても三井和男さん著書「Rhinoceros×Python コンピューテショナルデザイン入門」という本を参考に、Grasshopper上でモデル生成できるように少しだけ調整を行ったものです。

参考図書: 三井和男さん著書の「Rhinoceros×Python コンピューテショナルデザイン入門

おわりに

今回は森林自動作成ツールについての使い方とアルゴリズムについて紹介させていただきました。これから広葉樹だけでなく、針葉樹も生成できるようにすることと、枝ぶりを「high」にするとエラーが起こることがあるため、その修正を行っていきたいと思います。ツールのダウンロードはこちらから。

コメント

タイトルとURLをコピーしました