Copernicus (COP3.0)でジオメトリの持つアトリビュートの活用する
ビューポートでの表示について
すみません、一部勘違いしていた内容を記載していたので2024/09/01に修正しました。
シーンビューで現在のHoudiniバージョンではheightプレビューできないと記載しましたが、厳密にはvulkanでならプレビューが可能でした。
環境
Houdini Indie 20.5.332
概要
Houdini20.5で突然追加されたHoudiniのSubstanceDesignerことCopernics。軽量なマテリアルプレビュー用のノードが動作しなかったり元々のCOPの用途であるコンポジット用の機能が少なく、そのあたりは外部ツールに頼っているなどの問題点はあるものの、概ね動作も安定しておりなにより個人的に非常に将来性を感じることができた。
本文はそのSOPとの連携でメッシュベースのテクスチャ作成やアトリビュートの転送についての内容です。
(2024/9/1追記)
すみません、MaterialPreviewノード動作しました!とても便利です!(打消し線の部分)
導入方法にビューポートをvulkanに変更する方法を記載したので同じくビューポートでheightプレビューができていない人は参照してみてください。
◇ 導入方法
Copernics自体はすぐに作成できるのだが、preview用のノードが動かなかったり ※vulkanならシーンビューでプレビューできます(2024/9/1追記)、シーン内でテクスチャとして参照する方法が少し特殊だったりするので表示する方法には少し癖がある
ビューポートのレンダーをvulkanに変更する(2024/9/1追記)
Copernicusでマテリアルの見た目を確認するためのノード、MaterialPreviewノードはビューポートの設定がOpenGlでは正常に表示できないのでCopernicusを利用したい場合、ビューポートのレンダリング設定を「vulkan」に変更する
- 上部メニュー Edit/ Preference/ 3D Viewports から Preference Window を開く
- Renderの項目をvulkanに変更
- 再起動
20.5からはビューポートの設定はデフォルトで vulkan なのだが、過去のHoudiniの設定ファイルを引き継いでいる場合などにこのビューポートの設定がOpenGLになってしまっている模様。
SOPで作成する
cop自体は専用のネットワークを作ることですぐに利用できる
- Geometryノードに入りCop Networkを作成(Oldではない方)
- 作成したCopに入ると利用できる
SOP内でテクスチャとして参照する
テクスチャとしてCOPの出力をしたい場合は入力がちょっと特殊
- COPで参照先としたいノードを作成し、ctrl + c でコピー
(今回はnullを作成して「OUT_BC」という名称にしてノイズを接続) - SOPに移動し、テクスチャを参照したい入力欄に ctrl + v でペースト
(今回はLabsQuickMaterialのBaseColortexture) - ノードの絶対パスが入力されるので先頭に「op:」を入力
LOP(Stage)でプレビューする
heightなどをプレビューしたい場合はkarmaを利用する
(チュートリアル動画ではscene viewでプレビューできていたのでアップデートでより簡単にプレビューできるようになるかも) ※vulkanならシーンビューでプレビューできます(2024/9/1追記)
- COPでPreviewMaterialノードを作成
- PreviewMaterialノードのheightにノイズなどを接続
- Stageに移動しSceneImportを作成
- SceneImportのObjects項目にCOPを選択しているGeometryを指定
- Karmaでプレビューするとheightなどが確認できる
◇ SOPとの連携とメッシュアトリビュートの活用
本題。Copernicsはジオメトリとの連携が非常に容易で強力で、ベイクを介さずにジオメトリを画像として扱えたり、Houdiniの知識があれば内側と外側のグループ分けからマスクを作成するなども可能になる。
COPからSOPを参照する
焼きこみなどを介さないでジオメトリから位置情報を参照できる
- COPに入りSOP Importを作成
SOP Importは設定を有効にするとほかのジオメトリを参照することもできるが、そのまま中に入ってSOP Networkとして利用することもできる - SOP Importに入りジオメトリを何か作る
今回はテスト目的としてboxをscatterで複製したものを作成
- COPに戻り、SOP Importの出力からRasterize Setupを接続
このノードでテクスチャに投影する際の範囲などを設定できる - Rasterize Setupの出力からRasterize Geometryを接続
- RasterizeGeometryの出力タイプと参照アトリビュートを指定する
TypeをRGB、NameをPに設定
- Rasterize Geometryの出力からSplitChannelを接続
BchがDepthMapとして利用できる
SOP内で複製してループテクスチャとして作成
Houdiniはジオメトリの複製が簡単なのでジオメトリをループしてしまえばループテクスチャの作成も簡単にできる
- scatterのソースとなるgridのサイズを2x2に設定
(デフォルトのテクスチャ参照範囲が-1 ~ 1の範囲なのでこの中に元のポイントをscatterで作成するようにしたい) - SOP Importに入り先ほどscatterで複製したメッシュにcopy and transformを2つ繋げて縦横に2こずつ複製しcenterノードで中央に移動
これで中央から-1 ~ 1の範囲でループするメッシュになる
- チャンネルスプリットのblueチャンネルにtransform2Dを接続
スケールするとループテクスチャになっているのがわかる
SOPで作成したアトリビュートをテクスチャに反映
Houdiniで設定したアトリビュートをテクスチャに反映させることもできる
- SOP Importに入り、Copy to Points のあとにBoolean、RBD Material Fracture、Labs Delete Small Partsを接続
- パラメータを調整してマテリアルに応じた粉砕と小さな破片の削除でコンクリート風に破壊したメッシュを作成する
- MaterialFractureで粉砕したメッシュは内側と外側のグループ分けがされて出てくるのでこのグループから内側と外側を分けるfloat値を作成する
- COPに移動しRaasterizeGeometryから参照するアトリビュートを追加し先ほどグループを変換したアトリビュートをカラーに変換
- 粉砕前後の内外を分けるマスクとして利用できる
RBD Material Fractureに限らずHoudiniで作成したアトリビュートなら色に置き換えができる
複製メッシュの番号をIDとして参照して色の差を作る
output typeをIDにすることでindexを色調として取り出すこともできる
メッシュの番号をindexで保有しておくとIDとして別々のカラーを持たせることも可能
- copy to pointsの前の段階で頂点番号をアトリビュートとして保持しておく
- copy to pointsのあとにattribute promoteを作成し頂点番号をprim attributeに変換する
- COPに移動しRaasterizeGeometryから参照するアトリビュートを追加し保持した番号をOutput Type IDで取得する
- id to ~ 系のノードとrampを組み合わせることでブロックごとの色調の差として利用することができる
◇ 所感
Houdiniとの連携からできることが非常に有用そうな印象を感じるし、「画像を扱う」という面においては機能の不足は感じられない。
今回は触れていないが連番画像出力を行えるノードがあったりノイズの入力値が自由度が高く複雑なノイズを作れる点などSubstanceDesignerへの優位性をもつ部分はほかにも感じられた。
リアルタイムレンダー領域においてはここから多くの化学変化が起きていくと期待できる。
一方でHoudiniに慣れていない人にとっては似たようなことが可能かもしれないがとっつきづらくなったSubstanceDesignerと感じるものになりそう。(わかりやすいキャッチーな機能にしないのもSideFXの平常運転か…)
総じて、Houdiniユーザーを進化させる機能といった印象を受ける。
個人的には以下のチュートリアルでやれている「シーンビューで結果をプレビュー」ができるようになればHoudiniとSubstance両方を使う人だったら即移行したいところ。
https://youtu.be/iv_Ldwwkkbg?si=NwL3qm2pp3Jdq0eJ&t=543
※vulkanならシーンビューでプレビューできます。かなり快適にマテリアル作成できます(2024/9/1追記)
Discussion