長年(Houdini初めて1月くらいなのでそのくらい)の疑問が解けたのでメモ
Houdiniでモデル作ったはいいが、それをエクスポートしてC4D(もしくはその他外部ソフト)に持ってったとき、どやってマテリアル分けたらいいの?っていうのがずっとわからなかった。というか、どのワードで検索すればいいのかわからなかった。
しかし、見つけてみれば至極単純でした。結論から言うと
- pointのAtributeは読み込み時にVertex Map Tagとして出てくる
- この際、@CdのみVertex Color Tagとして出てくるっぽい
- primitiveのグループは各グループごとにPolygon Selection Tagとして出てくる
- primitiveに対して、String型で”/~~”の形で表記したAttributeを設定すると、Attribute毎に別のオブジェクトとして読み込まれる(Alembicのみ?)
あまり詳細な検証はしていないけど、こうらしい。ちなみに試してみた限りAlembicとHDAでは書いたとおりに読み込んでくれました。続きでもうちょっと詳しく書きます。
pointへのAttribute
そのまんま上に書いた通り、pointに対してAttriburteを設定すると、c4dなどで読み込んだ際にVertex Map Tagとして出てきます。
ちなみにvertexに対してAttributeを設定してもc4d側では読んでくれないっぽい(そんなパターンあんまりなそうだけど)。
試しにめっちゃ雑にネットワークを組んでみる。x座標に応じて@aという名前のAttributeを設定し、これを使って@Cd Attributeで色付けするとともに、時間軸で簡単にアニメーションをつけてます。これをROP Alembic SOPでアニメーション付きでエクスポートしてc4dで読み込む。
読み込みの際に、オプションデータの”カラーマップ”と”他の属性”にチェックを入れないとAttributeが読み込まれないので注意
ちょっと見づらいけど立方体のオブジェクトに、Vertex ColorでCdが、Vertex Mapでaが読み込まれている。さらに言うと、
この通り、Vertex Colorのアニメーションもちゃんと来ている。ちなみにVertex Mapもちゃんとアニメーションする。
公式のドキュメントとかだと、Cdとかのベクトル系のAttributeはXYZとかでそれぞれ単一のVertex Map Tagとして出てくるって書いてあって、そこだとCdもVertex Map Tag3つで出てきてるんですが、最近変わったんですかね。
primitiveへのAttribute
primitiveにおいては、Attributeは読んでくれないけどグループを設定すると、グループごとに選択範囲タグで出てくる。
さっきの雑なネットワークをちょっと改変。attribute promoteで@aをprimitiveにpromoteしてgroup expressionで@aの値に応じてグループを作成。ちなみに、選択範囲タグはアニメーションできないみたいなので、wrangleの時間軸に依存する部分は削除してある。
これをc4dで読み込むと
こんな感じで、2つの選択範囲タグで読み込まれる。ちなみにpointのグループは読んでくれないみたいです(AlembicはだめだけどHDAだと読むっぽい)。
さらに、primitiveに対してString型の@pathのAttributeを設定してみる。
attrib createで@path Attributeを作成。グループに応じてそれぞれ"/" + "グループ名"の命名規則で値を設定。取り合えず先頭に"/"をつければいいっぽい。
そして、ROP Alembic SOPにて、Build Hierarchy From Attributeにチェックを入れて、識別用のAttributeを入れる。デフォルトが@pathなだけでここを変えれば名前はなんでもよさそう。
これをc4dで読み込むと
この通り、別々のオブジェクトで出てきます。
もちろんHoudiniで別ジオメトリをマージしたような物でも、識別Attributeさえ設定していればこの通り。
HDAでオブジェクト分けたい場合は、シーンレベル?って言っていいのか、objネットワークの一番上の階層に複数のGeometryノードを置いて、全選択からのAssets→New Digital Asset From Selectionで行けました。
参考文献:
Houdini Integration - MAXON
Getting Started with Houdini Engine: Output Attributes