[Houdini][Tips] Attributeのmetadataの種類によってTransformのかかり方が変わるので意識しておこう
結構重要だと思うのですが、勉強した入門書籍や教材動画には言及がなかった(と思う)のでメモしておきます。
Attributeのmetadataについて
↓のように、node infoでAttributeを見ると、変数名・型名の右に [Vec],[Norm],[UV],[Pos] などの記号が付いているものがあります。(無いものもあります。)
↓の例では、型名はすべて「3 Flt」で同じですが、記号はすべて異なっています。
この記号は「Attribute type metadata」というものです。
↓の公式ページに書いてあるとおりなのですが、このmetadataの種類によって、そのAttributeへのTransformのかかり方が変わります。
Transformのかかり具合の検証
このTransformのかかり具合というのを少し試してみます。
↓のように「MyDir」と「MyPos」の2つのAttributeがあります。2つとも「3 Flt」ですが、metadataは異なり、前者は「vector」で、後者は「none」です。
よく見ると、「MyDir」のほうは要素が[x][y][z]になっていて、「MyPos」のほうは[0][1][2]になっていて、ここでも違いが見て取れます。
Transform適用前
ここで、↓のように「Transform」ノードによって、RotateとScaleをかけてみると、metadataが「vector」である「MyDir」のほうは値が変わり、metadataが「none」である「MyPos」のほうは値が変わりませんでした。
また、「Transform」ノードのTranslateを与えても、どちらのAttributeも値は変わりませんでした。
Transform適用後
metadataの設定&変更の仕方
予約語の「P」「N」「uv」などはあらかじめmetadataが付いているようです。
では、自分で作成したAttributeにはどうやってmetadataを付けるのでしょうか?
「Attribute Create」ノードで付ける
Attributeの作成を「Attribute Create」ノードで行う場合は、「Type」を「Float」にするとmetadataは「none」に、「Type」を「Vector」にするとmetadataは「vector」になるようでした。
しかし、ここでは「Type」を「Vector」にする以外に、metadataを付けることは出来ないようでした。
Wrangleで「setattribtypeinfo」で付ける
こちらの方法であれば、比較的自由にmetadataを設定&変更できるようです。
↓では例として、「MyDir」のmetadataを「point」に、「MyPos」のmetadataを「normal」に変えてみました。
ただ、ちょっと面倒なのが、VEXでAttributeを作成するときに、ひと息でmetadataまで設定できない、ということです。
例えば、「Hoge」という「3 Flt」を作成するときは↓のように書きますが、metagataまでは指定できないので、デフォルトでは「none」になってしまっています。
metadataはデフォルトの「none」になっている
これを「vector」にしたい場合は、2行目で「setattribtypeinfo」をしてあげる必要があります。
setattribtypeinfoによってmetadataが「vector」に変わった
これはとても面倒ですね。いちいち所属Classも書かないといけないし、変数宣言時に変数名を2回書かされる、というのも面倒です。
何とかひと息で書ける方法がないのかなと、↓の公式ページを見てみたのですが、25/02/09現在では、そのようなシンタックスは存在しないようでした。
今後、もっと楽に書けるようにアップデートされるとうれしいですね。
Discussion