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

第21回「シンプルな格子オブジェクト」

ArchitectLandmarkSpotlightDesigner2021

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

今回はサイズと分割数が可変な格子のオブジェクトを作成します。直方体の棒を組み合わせたシンプルなつくりになっていますので、マリオネット初心者にぴったりの内容です。

例えばブロックを積み上げるように、Vetorworksでは柱状体を使って立方体や直方体を細かく組み合わせることである程度の形状は再現することができます。そこにサイズやテクスチャなどパラメータが付与されれば、もう立派なパラメトリックオブジェクトです。

今回は柱状体を組みわせて格子状のパラメトリックオブジェクトを作成する例をご紹介します。この格子のオブジェクトは、先日オンラインで開催したVectorworks Liveのマリオネットデモンストレーションでも紹介させていただきました。

デモンストレーションではプログラムの組み方については簡単にしかご紹介できませんでしたので、改めて解説したいと思います。

21-1. 格子のレシピ

まずは、格子のオブジェクトの仕様を考えます。今回は次に示すとおりシンプルな構成とします。

    • 棒を格子状に配置する
    • 棒は直方体で作成する
    • 棒に木目のテクスチャを適用する

マリオネットに落とし込むと、次の順番で作業すれば作成できそうです。

    1. 棒を1つ作成する
    2. 棒を複製する
    3. 棒を移動する
    4. テクスチャを適用する

作業の順番が決まったら、図面上に手順を書いておきましょう。

各手順に当てはめるようにノードを配置して、各手順のノードをワイヤーで繋ぎ合わせることでプログラムを作っていきます。

21-2. 縦方向の棒

21-2-1. 棒を1つ作成する

まずは棒を直方体で作ります。直方体を生成するノード「Box」を配置します。

棒の大きさの情報を「Dim」ノードで入力します。Dimノードは実数値を入力する「Real」ノードと似ていますが、Dimノードが書類の単位設定と連動している点で異なります。ですので、例えば寸法値を入力する場合は「Dim」ノードを使用しましょう。

Dimノードを使用してBoxノードに次のとおり入力します。

    • 幅(x) 50mm > nWidth ポート
    • 奥行き(y) 50mm > nDepthポート
    • 高さ(z) 2000mm> nHeightポート

p3Dポートには棒の位置座標を入力しますが、デフォルト値(0,0,0)で問題ないためここでは何も入力しません。

ここまでのプログラムを実行して結果を確認します。任意のノードを選択して、オブジェクト情報パレットから「実行」ボタンをクリックします。

Z方向に伸びる直方体が生成されます。入力したパラメータとサイズがあっていれば次に進みます。

21-2-2. 棒を複製する

先ほど作成した直方体を、配置したい縦の棒の数だけ複製します。図形を複製する「Duplicate Object」ノードを使用します。

ここでは元の直方体を入れて6本の縦の棒を配置するとして、複製の数”5″を「Duplicate Object」ノードに入力します。複製の元になる直方体と、整数値を入力する「int」ノードで”5″をワイヤーで繋ぎます。

ここまでの結果を確認します。一見変化がありませんが、グループを分解すると全部で6つの直方体が重なっていることが分かります。

21-2-3. 棒を移動する

図形を移動させる場合は「Move」ノードを使用します。

Moveノードには移動させたい図形のハンドルと、その移動量をx方向とy方向およびz方向それぞれ入力します。移動させる図形は先ほど複製した5つの直方体です。ここではx方向に真っ直ぐ移動しますのでyとzは無視して考えます。

移動量の計算は少し複雑です。まずは棒の間隔を算出しましょう。等間隔に配置するとして、配置間隔は次の式で求めます。

配置間隔 = 格子全体の幅 / 縦の棒の複製数

マリオネットの割り算には「div」ノードを使用します。全体の幅を2000mmとして、分割数5で割ります。

配置間隔が算出できました。

 

この配置間隔の値を使用して棒の移動量を計算します。重なっている位置(0,0,0)を基準に考えると移動量は5本それぞれ違います。

    • 1本目:間隔×1
    • 2本目:間隔×2
    • 3本目:間隔×3
    • 4本目:間隔×4
    • 5本目:間隔×5

この式のとおり、間隔の値は固定で、1〜5の数列と掛け合わせることで移動量を算出できそうです。

1〜5の数列を作成します。「Series」ノードに次のとおり入力します。

    • nStart:1
    • iCount:5

デバッグモードを使用して、1〜5の数列が生成されていることを確認します。

数列が作成できたら、配置間隔と掛け合わせます。マリオネットの掛け算には「mul」ノードを使用します。「div」の結果と「Series」の結果をmulノードに入力して移動量を計算します。

x方向の移動量が計算できましたので、やっと「Move」ノードに情報を渡します。Moveノードには移動量をxyzの座標値で入力する必要がありますので、「Point 3D」ノードを使用して座標値に整形してからワイヤーを繋ぎます。

ここではy=0、z=0としますので「Point 3D」ノードyとzには何も入力しません(デフォルト値の0を使用します)。

結果を確認します。複製した5本の直方体がx方向に等間隔で配置されました。

21-2-4. テクスチャを適用する

直方体にテクスチャを適用します。「Texture」ノードに複製元の図形を含む6つの直方体のハンドルを入力します。

マリオネットではひとつのポートに複数のワイヤーを接続することができます。別々のワイヤーを流れるデータに対して共通の処理を行う場合に有効です。

Textureパラメータで適用するテクスチャの種類を自由に選択します。ここでは「木材(Arroway Wood 014)ヨーロピアンチェリー1RT」を選択しています。

結果を確認します。木目調のテクスチャが適用されました。

21-3. 横方向の棒

21-3-1. 既存のプログラムの再利用

ここまで縦の棒を作成しました。続いて格子の横方向の棒を作成していきます。縦と横、細かい違いはありますが手順は同じです。横の棒のプログラムは縦の棒のプログラムをベースにして作成します。

まずはベースとなるプログラムを複製します。ネットワークを任意の場所で右クリックしてコンテキストメニューを開きます。

「マリオネットネットワークを選択」をクリックします。

ネットワーク全体が選択状態になります。

この状態で、コピー&ペーストを実行します。

    1. 編集>コピー
    2. 編集>ペースト

ノード間のワイヤーの接続が保たれたまま、マリオネットネットワークが複製されます。

21-3-2. 棒を横方向に伸ばす

縦の棒と横の棒の違いは、棒が伸びる方向と、複製した棒を移動する方向です。まずは直方体のサイズを調整して横に伸びるように修正します。「Box」ノードに入力しているサイズの値を次のように変更します。

    • 幅(x) 2050mm > nWidth ポート
    • 奥行き(y) 50mm > nDepthポート
    • 高さ(z) 50mm> nHeightポート

結果を確認します。この段階では縦の棒のプログラムと混ざっている状態ですので、結果も中途半端な表示となります。棒が横に伸びていることだけ確認できたら次に進みます。

21-3-3. 棒を縦方向に移動する

次は直方体を高さ方向に移動するように修正します。z方向に移動するので「Point 3D」ノードのnXポートに接続していたワイヤーをnZポートに切り替えます。

結果を確認します。狙い通り横向きの棒が高さ方向に複製されました。

21-3-4. 複数のマリオネットネットワークの接続

それでは縦と横のプログラムを合体して格子の形状を作っていきます。

マリオネットネットワークは、1箇所でもワイヤーで繋がっていればプログラム全体をまとめて実行することができます。今回のようにお互いに影響しない並列的なプログラムでは、最終的な出力に当たるネットワークの右端部分を「Pass」ノードで結ぶのが簡単な方法です。

これでプログラムが完成しましたので実行して結果を確認します。格子状のオブジェクトが生成されました。

21-4. パラメトリックオブジェクト

マリオネットで作成したオブジェクトはパラメトリックにデザインを変更することができます。

分割数や直方体の寸法値を変更して再度プログラムを実行すると違う結果を得ることができます。

また、作成したプログラムをマリオネットオブジェクトに変換することで、より効率的にパラメトリックデザインを行うことができます。

あらかじめパラメーターとしてオブジェクト情報パレットに表示したいノードに名前を設定します。ここでは縦と横の分割数にあたる「int」ノードに名前を設定します。

ネットワークを右クリックしてコンテキストメニューを開きます。

「マリオネットネットワークをラップする」を選択します。

ラッパーノードの名前を入力してOKすると、ラッパーノードが作成されます。

ラッパーノードを右クリックしてもう一度コンテキストメニューを開きます。

「オブジェクトノードに変換」を選択します。

ラッパーノードがマリオネットオブジェクトに変換されます。

名前を設定したパラメーターがオブジェクト情報パレットに表示されます。

分割数のパラメーターを変更すると、すぐにオブジェクトの見た目に反映されます。

他にも、パラメータの入力をスライダーに変更したり、共通のパラメーターをまとめたり、もっと効率的にスタディする方法はたくさんありますので、自由にカスタマイズして自分だけのオブジェクトを作成してみてください。


今年のDesign Blogは、本記事を持って終了となります。本年も大変お世話になりました。Vectorworks Design Blogでは2022年も役立つ情報を発信して参ります。お楽しみにお待ちください。

それではどうぞ良いお年をお迎えください。

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

Architect

Vectorworks Architect

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

Landmark

Vectorworks Landmark

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

Spotlight

Vectorworks Spotlight

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

Designer

Vectorworks Design Suite

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