Created on | Updated on

MultiparmsをHDAで使用する

今回はこちらのフォーラムをみて、同じようなHDAを作成してみます。

https://www.sidefx.com/forum/topic/73696/?page=1#post-311558

Multiparmsとは?

Multiparmsは、ユーザーがアイテムリストを動的に作成できるようにするHoudiniのダイナミックパラメータです。プロシージャルモデリングを行うとき、ユーザーが構造体にドアを追加できるようにしたい場合、multiparmsを設定することで、ユーザーがドアを追加したり、位置等をカスタマイズしたりすることができます。

今回は、デジタルアセットに簡単なMultiparmsコントロールを設定する方法を紹介します。これはシンプルなデジタルアセットで、入力したBOXのスケールXを変更します。

ノード構造

mceclip0.png

まず、空のジオメトリノードを作成し、画像のようなネットワークを設定しました。


For-Each Connected Pieceを作成します。
mceclip2.png

Block Beginで、Create Meta Import NodeをクリックしループにMeta Importノードを追加します。

mceclip2.png

mceclip1.png

Transformを追加し、Block end接続します。

mceclip2.png

Block End ノードは "Merge every iteration "に設定されています。

mceclip3.png

デジタルアセットを作成

connectivity からforeach_endまでを選択し、Subnetにまとめます。mceclip3.png

mceclip6.png

Subnetを右クリックし、Digital Assetに変換します。

mceclip7.png

mceclip4.png

Edit Operator Type Propertiesウィンドウが開きます。
Parametersタブにて、Folderを追加し、その下にFloatを追加します。

mceclip5.png

"Folder"を下記のように設定します。

Folder TypeをMultiparm Block(list)に設定することを忘れないでください

mceclip6.png

floatの設定も変更します。

mceclip9.png

パラメータには好きなようにラベルを付けますが、パラメータ名の最後には必ず "#" を付けてください。今回の例では、パラメータはscale#とNameに設定されています。

Apply をクリックしてデジタルアセットのパラメータを見ると、おなじみのMultiparmレイアウトが表示されます。リストを作成、編集、削除することができます。

mceclip10.png

 

番号付きパラメータへのアクセス

アセットの内部からデジタルアセットのパラメータにアクセスする方法は、既にご存知だと思います。番号付きのパラメータにアクセスする方法も似ていますが、もう少し複雑です。

デジタルアセット内部に入り、Transformノードを選択します。

Transformノードにspare input を作ります。これは必須ではありません。構造をわかりやすくするための設定です。

mceclip11.png

spareパラメータにmeta import ノードをドラッグします。

mceclip12.png

meta inportとTransformが接続されます。

mceclip1.png

次に、イテレーションインデックスを取得するために、"iter" (iteration)というカスタムIntegerパラメータを追加したいと思います。

Transformノードのパラメータエディタを編集するために、Edit Parameter Interfaceを選択します。

mceclip0.png

イテレーションインデックスを取得するのでIntegerを追加します。

mceclip2.png

Nameをiterに設定し、LabelはIterationにします。

mceclip7.png

Accetptをクリックすると、パラメータエディタにIterationパラメータが追加されます。

mceclip3.png

iterationに下記を入力します。

detail(-1, "iteration", 0) + 1

つまり、Metaノード(spare input を取得するために-1を指定)から、iteration Detail アトリビュートを取得し、そこに1を追加します。1を追加したのは、multiparmパラメータが1ベースのインデックスを使用するからです。
TransformノードのScale Xフィールドには、次のように入力します。

ch(strcat("../scale",ch("iter")))

 mceclip1.png

ここがややこしいので、分解してみましょう。hdaに設定したScale1パラメータをコピーして、Paste relative referenceを行うと、以下のようになります。

ch("../scale1")   

シンプルですが、scale"1"の1は動的に変わる必要があります。

そこで実際に設定したエクスプレッションを確認します。

ch("iter") はローカルな反復回数を与えてくれます (1ベース)
strcat(...)関数は、".../size "と数字を組み合わせたものです。つまり、".../size1", ".../size2" などとなります。
最後にすべて ch( ) でラップされたものは、実際に構築したパスからパラメータを読み込みます。

今回3つのBOXを作成し、作成したHDAに接続してみました。

mceclip2.png

そのため、Number of boxesは3つにしています。

mceclip3.png

各Scaleにに異なる値を設定するとそれぞれのBoxのScaleXがかわります。

mceclip4.png

わかりやすくするためにSideFX LabsのAlign and Distriuteを接続します。

mceclip5.png

Spacingを0にすると、Box間の距離がなくなり3つのBoxがぴったり並びます。

mceclip6.png

mceclip7.png

作成したHDAのScaleを変更し、各BoxのScaleが別々に変更できることがわかります。Multiparmをうまく使用し、HDAで異なる値を設定する方法をご紹介いたしました。



問題が解決しない場合は、Born Digital サポートまでお問い合わせ下さい。

サポート問い合わせ