モデリングウォークスルー検討ツールの作成と紹介! – 設計自動化ツール第4弾 –

Grasshopper

こんにちは。今回は作成した3Dモデルをアイレベル(目線の高さ)で歩いて見た様子をアニメーションとして出力できるツールを紹介していきたいと思います。

一言で書いてもよくわからないと思うので、使い方とアルゴリズム、参照したプログラムについて紹介していきます。
(今回は見やすくするためにClusterとしてまとめてますが、実際のデータはまとまっていません)

使い方

①アイレベルで歩きたい経路をRhinoceros上でポリラインを使って描きます。

②「Curve」コンポーネントに先程作成したポリラインをセットします。(やり方は「Curve」コンポーネントをクリックし、緑色にした状態で右クリックで「Set one curve」を選択し、Rhinoceros上でポリラインを選択します。)

③目線の高さについてパラメータで設定します。各パラメータの説明は以下の通りです。

  • 子ども:作成したポリラインから1000mm高い位置からの視点。
  • 大人:作成したポリラインから1500mm高い位置からの視点。
  • 鳥瞰:作成したポリラインから10000mm高い位置からの視点。
  • 自分で設定:すぐ下のnumber sliderで目線の高さを設定できる。

④「レンズ長」をnumber sliderで設定します。視界を広げたい場合は数値を小さくしてください。

⑤「flie」コンポーネントをクリックし、緑色にした状態で右クリックで「Select a directory」を選択し、作成したファイルを保存したいフォルダを選択します。

⑥「Toggle」コンポーネントをクリックしてFalse → Trueにするとアニメーションがbmpデータとして保存されます。
(以下の設定を変更できますが、特に必要無ければデフォルトのままで問題ありません)

  • FrameName: 保存されるbmpデータの名称(「(設定した名称)_0」~「(設定した名称)_100」になる)
  • frame width: 保存されるbmpデータの横幅
  • frame height: 保存されるbmpデータの高さ

⑦作成するgifデータをループさせたい場合は、この「Toggle」コンポーネントをFalse → Trueにしてください。

⑧最後にこの「Toggle」コンポーネントをFalse → Trueにするとgifデータが作成されます。

作成したgifデータは以下のような感じです。(背景はモデリングされていないので真っ暗です)

アルゴリズムの説明

アルゴリズムについて説明しますが、今回のツールはネット上に公開されていたデータを組み合わせただけでなく、完全にそのまま使用している部分もあるので、その部分については説明を割愛します。

①まず、目線の高さについては、「Value List」コンポーネントを使用して、選択されたリストに対応する数値が出力されるようにしています。

②経路については、コマ送りに使用される「0~100」の「number slider」を100で割り、経路として取り込んだ線を「Evaluate Curve」で「0.00~1.00」のパラメータに換算しています。

➂入力されたパラメータの位置から見た視界を表示するために「GhPython」コンポーネントに記述します。以下コードを載せておきます。
必要な変数としては、目線の先となる「ターゲットの座標」と自身の位置となる「カメラの座標」です。ターゲットの座標はカメラの正面から10m先に設定されています。

import rhinoscriptsyntax as rs
import scriptcontext as sc

tar = cameratarget;
loc = cameralocation;

if enabled:
    vp = sc.doc.Views.ActiveView.ActiveViewport
    vp.Camera35mmLensLength = lens
    vp.SetCameraLocations(tar, loc);
    rs.Redraw()

④この「C#Script」コンポーネントはinput端子の「run」にTrueが入力されると、number sliderを自動的に動かす役割があるようです。
(この後にも出てきますが、他のサイトからダウンロードしてほとんど書き換えてないのでコードはここには載せません)

⑤この「Cluster」コンポーネントにはコマ送りのbmpデータを保存するためのコードが書かれた「GhPython」コンポーネントが入っています。
(元々のサイトのデータはpngデータで保存されるように書かれていました。下のコードの.bmpの部分が.pngになっているかの違いです)

import System
import Rhino
import scriptcontext as sc

def SampleViewCaptureToFile(folder,name,frameNum,width,height,trans):
    view = sc.doc.Views.ActiveView;
    if view:
        view_capture = Rhino.Display.ViewCapture()
        view_capture.Width = width
        view_capture.Height = height
        view_capture.ScaleScreenItems = False
        view_capture.DrawAxes = False
        view_capture.DrawGrid = False
        view_capture.DrawGridAxes = False
        view_capture.TransparentBackground = trans
        bitmap = view_capture.CaptureToBitmap(view)
        if bitmap:

            filename = System.IO.Path.Combine(folder, name + "_"+ str(frameNum) + ".bmp");
            bitmap.Save(filename, System.Drawing.Imaging.ImageFormat.Png);

if __name__ == "__main__":
    if t is not None:
        SampleViewCaptureToFile(pathToFolder, fileName, t, fwidth, fheight,transBack)
        A = folder, name + "_" + 1;

⑥最後は保存されたbmpデータの最初の画像を決めて「gif」データを作成するための「C#Script」コンポーネントです。
(このコンポーネントも他サイトからダウンロードしてそのまま使用しています。かなり長いです。)

おわりに

今回はモデリングのウォークスルーのスタディをするための検討ツールを作成しました。

幾つかのサイトに書いてあることを組み合わせて、できるだけ自動化に近づけられるようにしました。

本来はコマ送りのbmpデータの作成はnumber sliderを右クリック → Animateで可能です。

参考にしたサイトについて簡単にまとめていきます。

・目線の高さを設定して経路に沿って視点が移動するアルゴリズムについて

・コマ送りbmpデータの作成について

・bmpデータからgifデータを作成するコンポーネントについて

自分の力だけではコードの解読が出来ていない部分も多くあり、勉強不足であると感じました。
さらに自在に便利ツールの開発が出来るように精進します。

今回作成したツールはこちらからダウンロード可能です。

ここまで読んでいただきありがとうございます。では。

コメント

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