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

第31回「一括パラメータースタディ」

ArchitectLandmarkSpotlightDesigner2022

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

マリオネットオブジェクトやプラグインオブジェクトなどのパラメトリックオブジェクトを対象に、複数パターンのパラメータの組み合わせを一括で計算するパラメータスタディの方法を紹介します。

マリオネットの特徴とも言える一つの使い方はパラメトリックデザインでしょう。マリオネットツールに搭載されているSliderノードは、オブジェクト情報パレットにスライダーコントロールを追加して、オブジェクトの形状やデータをコントロールします。

例えばオブジェクトの寸法値に対応したスライダーの値を変更すると、オブジェクトに直ちに反映されますので、オブジェクトの形状の変化を確認しながら、最適なパラメータの組み合わせを探すことができます。

スライダーはマリオネットならではの強力な手法ですが、他にもマリオネットでパラメータスタディを効率化する方法があります。

今回は、スライダーではないパラメータスタディのアプローチとして、複数のパラメータ組み合わせパターンを一括で計算する方法を紹介します。

イメージとしては、パラメータの組み合わせの異なるオブジェクトを一覧表のようにグリッド状に並べて、別のパターンの結果と比較しながら目的に合う形状を見つける。というものです。

パラメータの組み合わせはランダムにするもよし、値を線形に変化させるのもいいでしょう。

注意点になりますが、プラグインオブジェクトとマリオネットオブジェクトではパラメータの設定方法が異なります。今回はプラグインオブジェクトを対象にパラメータの一括設定の方法を解説します。

31-1. オブジェクトのパラメータを設定する

Set Record Field ノードはレコードの値を設定することができます。プラグインオブジェクトのパラメータは内部的にはレコードとして管理されており、このSet Record Fieldからパラメータの値にアクセスすることが可能になっています。レコードの名前にプラグインオブジェクトの名前を、フィールド名にパラメータのフィールド名を指定して使用します。

プログラムを作る前に、まずはパラメータスタディしたいオブジェクトを選定しましょう。今回はVectorworks標準の本棚のプラグインオブジェクトを例に手順を解説します。パラメータ変更の様子が分かりやすいので本棚を選定しましたが、ドアや窓など他のオブジェクトでも手順は同様ですので置き換えても問題ありません。もちろん、VectorScriptやPythonで作成した自作のプラグインオブジェクトも可能です。

図面上に本棚を配置します。

Set Record Fieldノードを使用するために必要なパラメータの名称を調べましょう。ここで、マリオネット解説講座第15回「オブジェクトの情報を表示する」で紹介したパラメータの一覧を取得するメニューコマンドを使用します。

第15回「オブジェクトの情報を表示する」

本棚を選択して「パラメータ一覧表示」コマンドを実行します。

図面上にパラメータの一覧が表示されます。

※ マリオネット含めプログラムでパラメータにアクセスする場合は、英語名でパラメータを指定する必要があります。少し面倒ですが、日本語などマルチバイトの文字列によって引き起こされる問題を防ぐ側面もあります。

この一覧表示のコマンドを使用しない場合は、次の方法でもパラメータ名称を確認できます。

プラグインマネージャ

スクリプト取り出し

本棚の幅と奥行きの寸法値のパラメータ名称を確認できたので、それぞれ次の値に設定します。

    • オブジェクト名:Shelving Unit
    • 高さ(Height):800mm
    • 幅(Width):1500mm
    • 奥行き(Depth):400mm

設定したいパラメーターの数だけSet Record Fieldノードを用意して、値を入力します。

ここでは、本棚オブジェクトに名前を設定してNameノードで本棚のハンドルを取得します。

ここで一つ注意です。Set Record Fieldでパラメータの値を変更した場合、オブジェクトにすぐに反映されない場合があります。functionノードを使用して、オブジェクトを更新する「vs.ResetObject(x)」の処理を追加しましょう。

プログラムを実行します。設定した値が反映され、オブジェクトが変化しました。

31-2. 複数のオブジェクトに適用する

パラメータの組み合わせを適用する複数のオブジェクトを用意します。

マリオネットで複数のオブジェクトを生成してグリッド状に並べることも可能ですが、今回は手作業(配列複製)で配置する方が効率的でしょう。

本棚を配列複製してグリッド状に並べました。

Objs by Critノードで全ての本棚のハンドルを取得しましょう。Criteria configuration…ボタンから検索条件の入力画面を開きます。

図面上のすべての本棚を取得するように次の条件を入力します。

タイプが > 右項のもの > 本棚

Criteriaフィールドに「((PON=’Shelving Unit’))」が入力されたことを確認します。

Objs by Critの結果をデバッグモードで確認すると、図面上の本棚の数だけハンドルを取得できています(0〜24の25個)。

31-1.で作成したプログラムから、Nameノードを削除して、Objs by CritをSet Record FieldのhObjポートに繋ぎます。

プログラムを実行すると、先ほど設定したパラメータ(高さ/幅/奥行き)がすべての本棚に適用されます。

31-3. パラメータをランダムに設定する

それではパラメータスタディの一つの方法として、マリオネットでオブジェクトのパラメータをランダムに設定する方法を解説します。

ランダム値はRandomノードを使用して生成します。まずは設定したいデータの数だけランダム値を用意します。25個のオブジェクトの3種類のパラメータであれば、ランダム値は75個必要です。

ここではRandomノードを3つ配置してプログラムを作っていきます。3つ配置したRandomノードはそれぞれ、高さ、幅、奥行きのパラメータに対応します。それぞれ寸法の下限値と上限値を決めてnHighとnLowポートに入力する準備をします。ここではまだポートに繋ぎません。

マリオネットのノードは入力されたデータの数だけ処理を繰り返す仕組みがあります。これを利用して、図面上のオブジェクトの数だけランダム値を生成します。

31-2で作成したObjs by Critノードの出力結果をGet List Lengthノードに入力してデータの数(オブジェクトの数)を取得します。

Randomノードには、下限値と上限値のデータをオブジェクトの数だけ複製して入力します。データの複製にはRepeatノードを使用します。

入力されたオブジェクトの数だけRandomノードが処理を繰り返して、一つのRandomノードにつき25のランダム値を生成します。これで高さ、幅、奥行きの3種類で合計75個のランダム値を生成できました。

31-2で使用したプログラムから、高さ、幅、奥行きのパラメータを設定する部分を、ランダム値に置き換えます。

プログラムを実行します。パラメータがランダムに設定され形状が異なる複数パターンの本棚が表示されます。

実行するたびに結果が変わりますので、繰り返し実行してパラメータのベストな組み合わせを探してください。

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

Architect

Vectorworks Architect

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

Landmark

Vectorworks Landmark

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

Spotlight

Vectorworks Spotlight

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

Designer

Vectorworks Design Suite

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