🏞️

Copernicus (COP3.0)でジオメトリの持つアトリビュートの活用する

2024/08/26に公開

ビューポートでの表示について

すみません、一部勘違いしていた内容を記載していたので2024/09/01に修正しました。
シーンビューで現在のHoudiniバージョンではheightプレビューできないと記載しましたが、厳密にはvulkanでならプレビューが可能でした。

環境

Houdini Indie 20.5.332

概要

Houdini20.5で突然追加されたHoudiniのSubstanceDesignerことCopernics。
https://www.sidefx.com/ja/products/whats-new-in-h205/copernicus/
20.5段階ではベータであり、軽量なマテリアルプレビュー用のノードが動作しなかったり元々のCOPの用途であるコンポジット用の機能が少なく、そのあたりは外部ツールに頼っているなどの問題点はあるものの、概ね動作も安定しておりなにより個人的に非常に将来性を感じることができた。
テクスチャ作成
本文はそのSOPとの連携でメッシュベースのテクスチャ作成やアトリビュートの転送についての内容です。

(2024/9/1追記)
すみません、MaterialPreviewノード動作しました!とても便利です!(打消し線の部分)
導入方法にビューポートをvulkanに変更する方法を記載したので同じくビューポートでheightプレビューができていない人は参照してみてください。
シーンビューでheightプレビュー

◇ 導入方法

Copernics自体はすぐに作成できるのだが、preview用のノードが動かなかったり ※vulkanならシーンビューでプレビューできます(2024/9/1追記)、シーン内でテクスチャとして参照する方法が少し特殊だったりするので表示する方法には少し癖がある

ビューポートのレンダーをvulkanに変更する(2024/9/1追記)

Copernicusでマテリアルの見た目を確認するためのノード、MaterialPreviewノードはビューポートの設定がOpenGlでは正常に表示できないのでCopernicusを利用したい場合、ビューポートのレンダリング設定を「vulkan」に変更する

  1. 上部メニュー Edit/ Preference/ 3D Viewports から Preference Window を開く
  2. Renderの項目をvulkanに変更
  3. 再起動
    vulkanに変更

20.5からはビューポートの設定はデフォルトで vulkan なのだが、過去のHoudiniの設定ファイルを引き継いでいる場合などにこのビューポートの設定がOpenGLになってしまっている模様。

SOPで作成する

cop自体は専用のネットワークを作ることですぐに利用できる

  1. Geometryノードに入りCop Networkを作成(Oldではない方)
  2. 作成したCopに入ると利用できる

SOP内でテクスチャとして参照する

テクスチャとしてCOPの出力をしたい場合は入力がちょっと特殊

  1. COPで参照先としたいノードを作成し、ctrl + c でコピー
    (今回はnullを作成して「OUT_BC」という名称にしてノイズを接続)
  2. SOPに移動し、テクスチャを参照したい入力欄に ctrl + v でペースト
    (今回はLabsQuickMaterialのBaseColortexture)
  3. ノードの絶対パスが入力されるので先頭に「op:」を入力
    copをテクスチャとして参照

LOP(Stage)でプレビューする

heightなどをプレビューしたい場合はkarmaを利用する
(チュートリアル動画ではscene viewでプレビューできていたのでアップデートでより簡単にプレビューできるようになるかも) ※vulkanならシーンビューでプレビューできます(2024/9/1追記)

  1. COPでPreviewMaterialノードを作成
  2. PreviewMaterialノードのheightにノイズなどを接続
    PreviewMaterialを作成
  3. Stageに移動しSceneImportを作成
  4. SceneImportのObjects項目にCOPを選択しているGeometryを指定
  5. Karmaでプレビューするとheightなどが確認できる
    Heightをプレビュー

◇ SOPとの連携とメッシュアトリビュートの活用

本題。Copernicsはジオメトリとの連携が非常に容易で強力で、ベイクを介さずにジオメトリを画像として扱えたり、Houdiniの知識があれば内側と外側のグループ分けからマスクを作成するなども可能になる。

COPからSOPを参照する

焼きこみなどを介さないでジオメトリから位置情報を参照できる

  1. COPに入りSOP Importを作成
    SOP Importは設定を有効にするとほかのジオメトリを参照することもできるが、そのまま中に入ってSOP Networkとして利用することもできる
  2. SOP Importに入りジオメトリを何か作る
    今回はテスト目的としてboxをscatterで複製したものを作成
    テスト用ジオメトリ
  3. COPに戻り、SOP Importの出力からRasterize Setupを接続
    このノードでテクスチャに投影する際の範囲などを設定できる
  4. Rasterize Setupの出力からRasterize Geometryを接続
  5. RasterizeGeometryの出力タイプと参照アトリビュートを指定する
    TypeをRGB、NameをPに設定
    参照アトリビュートを指定
  6. Rasterize Geometryの出力からSplitChannelを接続
    BchがDepthMapとして利用できる
    ジオメトリからデプスを作成

SOP内で複製してループテクスチャとして作成

Houdiniはジオメトリの複製が簡単なのでジオメトリをループしてしまえばループテクスチャの作成も簡単にできる

  1. scatterのソースとなるgridのサイズを2x2に設定
    (デフォルトのテクスチャ参照範囲が-1 ~ 1の範囲なのでこの中に元のポイントをscatterで作成するようにしたい)
  2. SOP Importに入り先ほどscatterで複製したメッシュにcopy and transformを2つ繋げて縦横に2こずつ複製しcenterノードで中央に移動
    これで中央から-1 ~ 1の範囲でループするメッシュになる
    中央を中心にループするジオメトリを作成
  3. チャンネルスプリットのblueチャンネルにtransform2Dを接続
    スケールするとループテクスチャになっているのがわかる
    ジオメトリから作成したループテクスチャ

SOPで作成したアトリビュートをテクスチャに反映

Houdiniで設定したアトリビュートをテクスチャに反映させることもできる

  1. SOP Importに入り、Copy to Points のあとにBoolean、RBD Material Fracture、Labs Delete Small Partsを接続
  2. パラメータを調整してマテリアルに応じた粉砕と小さな破片の削除でコンクリート風に破壊したメッシュを作成する
    粉砕メッシュを作成
  3. MaterialFractureで粉砕したメッシュは内側と外側のグループ分けがされて出てくるのでこのグループから内側と外側を分けるfloat値を作成する
    内外を分けるアトリビュートを作成
  4. COPに移動しRaasterizeGeometryから参照するアトリビュートを追加し先ほどグループを変換したアトリビュートをカラーに変換
  5. 粉砕前後の内外を分けるマスクとして利用できる
    RBD Material Fractureに限らずHoudiniで作成したアトリビュートなら色に置き換えができる
    内外を分けるマスク

複製メッシュの番号をIDとして参照して色の差を作る

output typeをIDにすることでindexを色調として取り出すこともできる
メッシュの番号をindexで保有しておくとIDとして別々のカラーを持たせることも可能

  1. copy to pointsの前の段階で頂点番号をアトリビュートとして保持しておく
    頂点番号を保持
  2. copy to pointsのあとにattribute promoteを作成し頂点番号をprim attributeに変換する
    promote
  3. COPに移動しRaasterizeGeometryから参照するアトリビュートを追加し保持した番号をOutput Type IDで取得する
    番号をIDで取得
  4. id to ~ 系のノードとrampを組み合わせることでブロックごとの色調の差として利用することができる
    IDでブロックごとの色差を作成
    ブロックごとの色差を反映

◇ 所感

Houdiniとの連携からできることが非常に有用そうな印象を感じるし、「画像を扱う」という面においては機能の不足は感じられない。
今回は触れていないが連番画像出力を行えるノードがあったりノイズの入力値が自由度が高く複雑なノイズを作れる点などSubstanceDesignerへの優位性をもつ部分はほかにも感じられた。

リアルタイムレンダー領域においてはここから多くの化学変化が起きていくと期待できる。

一方でHoudiniに慣れていない人にとっては似たようなことが可能かもしれないがとっつきづらくなったSubstanceDesignerと感じるものになりそう。(わかりやすいキャッチーな機能にしないのもSideFXの平常運転か…)

総じて、Houdiniユーザーを進化させる機能といった印象を受ける。

個人的には以下のチュートリアルでやれている「シーンビューで結果をプレビュー」ができるようになればHoudiniとSubstance両方を使う人だったら即移行したいところ。
https://youtu.be/iv_Ldwwkkbg?si=NwL3qm2pp3Jdq0eJ&t=543

※vulkanならシーンビューでプレビューできます。かなり快適にマテリアル作成できます(2024/9/1追記)

Discussion