アトリビュートのタイプについて


どうも篠島です。今回はアトリビュートのタイプについて説明したいと思います。

 

普段何気なくジオメトリに設定している、Cd やN、その他のアトリビュートですが、Geometry Spreadsheet で確認すると、[.x .y .z] 、[ .r .g .b]、[.0 .1 .2]  など付いているのが分かります。見た目は異なりますが、VEXでこれらにアクセスする時に、お互いのアトリビュートを @Cd.x や @Cd[0]など異なる方法でアクセスでき、あまり違いは無い様に見えます。

 

ですが、内部的にはアトリビュートにはタイプという物が存在し、そのタイプによりTransformでの扱われ方が変わったり、Alembicで出力して他のアプリケーションで利用できるアトリビュートが変わったりします。アトリビュートでどのようなタイプがあるのかはヘルプで確認することができます。基本的にはデフォルトで適切なタイプが割り当てられるので、実際の作業であえてタイプの変更をする機会は少ないかと思いますが、変更することができるという事を知っているだけでも将来何かの約に立つかと思います。

 

アトリビュートのタイプの変更ですが、setattribtypeinfo() 関数を使います。恐らくこれはVEXのみ存在し、対応するそれらしいVOPノードは見つけられませんでした。

 

geohandle は処理するジオメトリ、atribclass には point, vertex, prim, detail等のクラス、name にアトリビュート名、typeinfo にどんなタイプのアトリビュートにするのかを指定します。例えば、下のようなVEXを書き、Cdアトリビュートを point のタイプにすると、Geometry Spreadsheet では[.x .y .z] と表示されるようになりました。

 

下のGIFは色をランダムを付けたSphereを回転させただけのものですが、右側のSphereはCdアトリビュートをpointタイプにしています。pointタイプにした事でどうなるかと言うと、Transfom SOPでジオメトリのトランスフォームを変更すると、Cdアトリビュートも同様にトランスフォームがかかり色が変わってしまいます。

 

同様に、Nアトリビュートをpointタイプにして移動すると、移動した分Nアトリビュートに増加されて法線の向きが変わってしまいます。

 

Houdiniだけで作業している場合でわざわざ上記の様なことをする事は少ないと思いますが、アトリビュートのタイプによってトランスフォームの影響を受ける受けないだけでなく、色やUV情報などのカスタムアトリビュートをAlembicで書き出す際に正しくアトリビュートが保存されるように、タイプを変更することができる事を覚えてくといいと思います。