No More Retake

3DCG屋さん向けTips&Referenceサイト

メニュー

Houdini:Transform(SOP)とTypeQualifier

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/

 

関連記事

  1. 2017.08.13

    Houdini:Practice01

コメントをお待ちしております

このサイトについて

3DCG Tipsサイト。Houdiniの記事が多めです。

RSS

follow us in feedly

アンケート

どのようなタイプのセミナを好みますか?(複数可)

View Results

Loading ... Loading ...

言語切り替え

  • English (United States)
  • 日本語

Archives

  • 2018 (20)
  • 2017 (29)
  • 2016 (36)
  • 2015 (64)
  • 2014 (54)
  • 2013 (60)
  • 2012 (55)

スポンサードリンク