Houdini勉強回。
今回はTransform(SOP)のパラメータ”Attributes”とアトリビュートの修飾子(Qualifier)について取り上げてみました。
最近、仕事で気にする機会が多かったので、まとめてみました。
Transform(SOP)のパラメータ”Attributes”
まずは、Transform(SOP)のパラメータ”Attributes”について。
Transform(SOP)のパラメータ”Attributes”を設定することで、任意のアトリビュートのみにTransform(SOP)の効果を適応することが可能です。
デフォルトでは、*(アスタリスク)が記述されており、全てのアトリビュートに対して効果が適応されます。
試しにこの記述を削除すると、何も動かなくなります。
Pと記述すると、位置情報が更新されるようになります。
ではパラメータ”Attributes”にPとだけ記述した場合、他のアトリビュート、例えばN(法線)はどうなるか?
こうなります。
パラメータ”Attributes”には”P”とだけ記述されているので、N(法線)に対してはTransform(SOP)の効果は適応されず、同じ向きを保ったままになっています。
つまりこれを使えば、任意のアトリビュートでTransform(SOP)の影響を受ける/受けないのコントロールが可能ということになります。
もっとも、そういうのは限られたシチュエーションでの話で、大抵はデフォルトの*(アスタリスク)設定で問題なし・・・かと思いきや、そうは問屋がおろさない。
実はAttributesパラメータが*(アスタリスク)だからと言って、ほんとうに全てのアトリビュートがTransform(SOP)の影響を受けるわけではないです。
例を示します。
今ここに、Y軸方向を向いたVector型のアトリビュート”dir”を、Wangeleを用いて作成します。
ビュー上ではアトリビュート”dir”を可視化しています。
これを、Transform(SOP)でグリグリ動かすとこうなります。
もちろん、Transform(SOP)のAttributesパラメータは*(アスタリスク)に設定してあります。
にもかかわらず、dirというアトリビュートは常に同じ向きを向いており、Transform(SOP)の影響を受けません。
なぜか?
アトリビュートの修飾子(Qualifier)
実はアトリビュートにはFloatやVectorなどのデータ型の他にもうひとつ、Qualifier(修飾子)というものがあります。これが、Transform(SOP)での挙動に影響しています。
Qualifier(修飾子)はアトリビュートの型情報を補強するもので、これにより同じVector型でも、色や法線情報を区別しているようです。
各アトリビュートのQualifier(修飾子)はNode Infoで確認できます。
アトリビュートの型の横にカッコで囲まれた、NmlやPosという記述がQualifier(修飾子)です。
この場合、dirは何も修飾子のついていないVector型、NはNml修飾子のついたVector型、PはPos修飾子のついたVector型というわけです。これらは同じVector型だけどHoudini内で明確に区別され、データの扱われ方にも違いがあるというわけです。
以下に、Qualifier(修飾子)の主だったものを列挙します。
none | transformの影響をうけない |
point | 移動、回転、スケールの影響を受ける |
vector | スケールと回転の影響を受けるが、移動の影響は受けない |
normal | 回転の影響を受ける。スケールは逆転換で適応される。 |
color | transformの影響をうけない |
先に示した例でいえば、Pos修飾子のついたPアトリビュートは、上の表ではpointに相当し移動回転スケールすべての影響を受ける、という具合です。
dirアトリビュートは修飾子が何もついていないのでQualifier(修飾子)は”none”となり、tranformの影響を受けません。結果、どれだけ回転させようとも、dirは変化せず同じ向きを保ちつづけたというわけです。
修飾子(Qualifier)は、他にもいろいろあります。
マニュアルで一覧を確認できます。
http://www.sidefx.com/docs/houdini/vex/functions/setattribtypeinfo.html
Qualifier(修飾子)の付け方 - wrangle ー
通常、Wrangleでアトリビュートを作成した場合、修飾子(Qualifier)はnoneに設定されます。(CdやNなどの特定の予約語は除く)
Wrangleで修飾子(Qualifier)をつける場合は、setattribtypeinfo関数を用います。
ここの場合、次のように書くと、dirアトリビュートがnormalタイプのVector型として定義されTransform(SOP)の影響を受けるようになります。
v@dir = set(0,1,0); setattribtypeinfo(0, "point", "dir", "normal");
また、CdやN、Pといった特定の予約語は、wrangleで作成しても、自動的に修飾子(Qualifier)が付与されます。
Qualifier(修飾子)の付け方 - Attribute Create(SOP) ー
Wrangle以外でアトリビュートを定義する場合、Attribute Create(SOP)にはTypeの隣に項目があり、そこで設定可能です。
Qualifier(修飾子)の付け方 - Add Attribute(VOP) ー
VOPでは、Add Attribute(VOP)を使ってアトリビュートを作成した場合は、パラメータのType Infoで設定可能です。
Bind(VOP)やParameter(VOP)でアトリビュートを作った場合は、設定項目が見当たらなず、作られるアトリビュートの修飾子(Qualifier)は”none”状態になってます。
このTypeQualifierは、他にもパス出力や、他ソフトとのデータ受け渡しにも影響があるようで、気にかけておく必要があります。
(Houdini→MayaでAlembicデータを渡す際、Cdアトリビュートにclr修飾子が付いてないとデータが来ない場合がありました)
このあたりWrangleでもっと楽に定義できたら良いと思いますし、そういう要望も既に出されているようなので、いずれ仕様が変更になるかもしれませんね。
以上つらつらと書いてきましたが、実は私もこのあたり教えてもらったくちなのです。
ありがたや (*´・人・`)゜
以上、ここまで!
間違い等ありましたらご指摘を!
宣伝
拙著「Houdini ビジュアルエフェクトの教科書」が5/15発売で予約受付中です。
あと、発売セミナも行います。
当日は、本の先行販売も行われる予定です。
参加登録は、SideFXのページより。
https://www.sidefx.com/ja/community/houdini-5/
コメント