Cop/ Bake Geometry Texturesでcustom attributeを使って頂点カラーなどをベイクする
Bake Geometry Textures Copernicus Nodeで頂点カラーなどのアトリビュートを出力するための方法

COP用テクスチャベイカーについて
Houdini21で新しく追加されたCop用テクスチャベイカー。
非常に高速に法線や曲率、AOといったジオメトリに関する情報のテクスチャ化ができる。
- Houdini Document | Bake Geometry Textures
https://www.sidefx.com/docs/houdini/nodes/cop/bakegeometrytextures.html
ただし、ジオメトリを入力しただけでは頂点カラーをベイクができないので例えば以下のようなことを行いたい場合カスタムアトリビュートを利用する必要がある。
- プロシージャルモデリングし、BaseColor用の色などを頂点カラーアトリビュートして持っているジオメトリのテクスチャを作成したい
- 入力メッシュをローディテールモデルに加工しUVの配置しなおしなどを行った後に新しいテクスチャを作成したい
- 苔の範囲を制御する、といった独自のマスクテクスチャをMaskアトリビュートなどから作成したい
今回は上記2つ目の項目のような、「元のテクスチャからUVを再生成したメッシュに合わせたテクスチャの焼き直し」を題材に、アトリビュートのテクスチャベイクを行う。
テストデータの作成
サンプルデータとしてMeshyAIから出力したモデルとテクスチャを利用する。
出力されるデータは30万~100万程度のポリゴン数(今回のサンプルは72万ポリゴン)とBasecolor、Metalness、Roughness、Normalテクスチャを持つ。

今回はこのジオメトリの新しいUV位置に合わせたBaseColor、Metalness、Roughnessを作成する。
ベイク対象となるローモデルとして VDB From Polygon、Convert VDBを接続後にQuad RemeshでTarget Quad で1000ポリゴンまで削減。
(VDB経由だと穴をふさげるのと、個人的な印象としてQuadRemesh時の破綻も少ない気がしています)

polyframeでNとtangentNを作成し、AutoUVでUVを作成して準備完了。

リメッシュし、新しくUVを作成したメッシュという想定でこのメッシュにリメッシュ前と同様のテクスチャをベイクしていく。
元メッシュのセットアップ
テクスチャの色をアトリビュートとして持たせてベイクを行うための準備として、元のジオメトリにUVで参照した頂点に該当するテクスチャ色を頂点カラーとして持たせていく。
Subdiveを接続し分割数を増やせるようにしてAttribFromMapを4つ接続し、元のBaseColor、Metalness、Roughness、NormalをそれぞれCd_BC、Cd_MT、Cd_RH、Cd_NMとしてアトリビュートを作成する。

この時、後工程でCOPに読み込む際にモノクロになるアトリビュートはAttribute From Mapでアトリビュート化する際にFloatにしておく必要がある

頂点カラーとして持たせるので焼きこみ先のテクスチャ解像度を高くする必要がある場合はsubdivideで分割数を増やして調整する。
COPでのベイク
作成したCd_BC、Cd_MT、Cd_RH、Cd_NMの4つのアトリビュートをテクスチャにベイクしていく。
通常のベイク同様、ベイク対象となるローポリモデルと4種のテクスチャを頂点カラーとして持たせたハイポリメッシュをCOPにSOP Importで読み込み、Bake Geometry Texture Bakeを接続。

接続するとNormal Mapは作成できるがそのままでは頂点カラーなどはテクスチャ化できない。
特定のアトリビュートをテクスチャとしてベイクするためにBake Geometry Textureのカスタムアトリビュート項目を追加する。

カスタムアトリビュートがケーブルとして出力されるので Cable Unpackを作成し各チャンネルに分解するとベイクされた各アトリビュートが利用できるようになる。

また、packする際に各チャンネルの接続名を指定することができるのでCable Packを作成して再度packし、かつ各接続の名称をCop Previewの接続に該当した名称に設定することで、ベイク結果をケーブル接続用のパラメータとしても利用することができるようになる。

※ケーブル回りの扱いは少し癖があります。
以下の記事でまとめているのでよければ参考にしてください。
- Maneki Pipeline | Houdini21のCOP3を確認する
https://www.procedural.jp/articles/booeqw1ku-2z
今回のようにカスタムアトリビュートを使ったベイクを利用すれば、例えば「苔や草などが生える範囲をシェーダーに設定するためのマップ」「マテリアルブレンドのためのマップ」といった独自マップのベイクも容易にできるようになる。


Bake Geometry Texture/ カスタムアトリビュートの不具合のような挙動について
Bake Geometry Textureで頂点カラーなどをベイクした際、UVの境界を隣接色で補正したい場合にUV Bounding Fillingを有効にすると境界を隣接色で塗りつぶしてくれるのだが、

カスタムでベイクしたアトリビュートが一つだけだった場合、上述のようにパックされた地震で設定したチャンネルの出力ではなく「custom」という名称の出力が作成される。
そしてこの単一のカスタムアトリビュートのベイクでは正常にUV Bounding Fillingが動作しない。

対策としてはベイクしたいアトリビュートを二つカスタムアトリビュートとして出力するとパックされたケーブル出力となり、UV Bounding Fillingも動作するようになる。

Houdini21で追加されたCOP用のベイカーですがカスタムアトリビュートのベイク機能が非常に素晴らしいです。
過去にKarmaで工夫して同様の挑戦などしてみたこともあったのですが、(https://www.procedural.jp/articles/cetd194trb8/)
COPで追加されたベイカーに「現状、僕が考えられる欲しかった機能」がすべて含まれているのでこちらを多用していくことになると思います。

fish_ball
プロシージャル魚類