Houdini 20.0 Solaris

SOPをUSDに取り込む方法

HoudiniがSOPジオメトリをUSDに変換する方法、その工程を制御する方法の詳細。

On this page

概要

  • SOP Import LOPは、LOPネットワーク内でSOPジオメトリをUSDステージに取り込みます。このLOPには、ジオメトリを変換するためのたくさんの設定があります。

  • Scene Import LOPは、/objレベルのノードをLOPネットワークに取り込みます。Pythonプラグインを使用すれば、オブジェクトからUSDへの変換の挙動をカスタマイズすることができます。例えば、プロプライエタリなレンダラーで使用されている特別なカメラオブジェクトやライトオブジェクトを取り込むようにカスタマイズすることができます。

  • USD Configure SOPは、SOP Import LOPの設定に呼応したアトリビュートをSOPジオメトリに作成します。 SOP Import LOPで(存在すれば)各アトリビュートを使用するように設定、または、そのLOPノードのパラメータを明示的に設定してそれに呼応するアトリビュートをオーバーライドすることができます。

SOP Import LOPとUSD Configure SOPのパラメータだけでなく、以下に載せている様々なSOPアトリビュートを使って、インポーターがジオメトリを変換する方法に影響を与えることができます。

階層

SOPレベルでは、根本的にHoudiniジオメトリは、階層関係を持っていません(Houdiniでは、モデル間の階層関係はオブジェクトレベルで定義します)。

パスを定義するアトリビュートがない場合:

  • すべてのポリゴンフェースがmesh_0という名前の単一ポリゴンメッシュになります。

  • USD Primsと等価なSOPプリミティブ(例えば、SphereやVolume)は、自動的に付けられた名前(例えば、sphere_0volume_0)で兄弟として取り込まれます。

パックプリミティブやAlembicプリミティブなどの一部のジオメトリタイプは、階層内のそのジオメトリの位置を示したアトリビュートを持っている場合があります。 そのようなアトリビュートが存在すれば、インポータはそのアトリビュートを使用します。

ジオメトリがUSDに取り込まれた時に階層関係を制御できるように、SOPを使って具体的にアトリビュートを追加することもできます。 Path Attributes パラメータは、パス情報を含んだSOPプリミティブアトリビュートのリストを指定することができます。

取り込まれたPrimにパス情報がなくて(mesh_0のように)自動的に名前が付けられた場合、または、パス情報があるもののそのパスが(/で始まらない)相対パスだった場合、ノードが自動的に Import Path Prefix のパスを名前/パスフラグメントの頭に付けます。 これが、単一ブランチ下で“パスなし”Primsの構成を維持する方法です。

例えば、 Import Path Prefix/world/geoを設定した場合に、異なる名前/アトリビュート値を持ったPrimsがどのようにシーングラフツリーにマップされるのかを以下のテーブルに示します:

名前/アトリビュート値

Import Path Prefix

取り込まれる場所

mesh_0

/world/geo

/world/geo/mesh_0

/moon/crater

/world/geo

/moon/crater

chair/leg

/world/geo

/world/geo/chair/leg

  • アトリビュート値の中の無効なパス/文字は、有効なパスになるように変換されます。通常では、これは無効な文字がアンダースコアに置換されます。

  • 互換性のないジオメトリタイプが同じパスアトリビュート値を持っていた場合、インポータは、名前の後に数値を追加して固有な名前にします。

    例えば、/foo/barの場所に球とポリゴンメッシュの両方を配置しようとした場合、インポータは、これら2つのPrimsを別々の名前(例えば、/foo/bar_0/foo/bar_1)で作成します。

マテリアル

  • usdmaterialpathアトリビュートを追加することができ、SOP ImportSOP Createはマテリアルバインドを作成することができます。これらのノードは、見つからないMaterial Primsを作成したり、既存のマテリアルバインドを無効にすることもできます。USDパックPrimをSOPジオメトリにアンパックすると、usdmaterialpathも生成されます。詳細は、マテリアルのバインドを参照してください。

  • GeomSubsetを使用すれば、Mesh Prim上のフェースに対してマテリアルを割り当てることができます。このGeomSubsetは、 Subset GroupsPartition Attributes で指定されたプリミティブグループやプリミティブアトリビュートによって作成することができます。

ボリューム

  • デフォルトでは、すべてのSOPフィールドが単一のvolume_0 Prim下に取り込まれます。

  • usdvolumepathという名前のSOPアトリビュートをボリュームに割り当てることで、そのボリュームのフィールドの取り込み先となるUSDシーングラフパス指定することができます。

  • フィールドがそのボリューム下の既存フィールドと同じ名前だった場合、インポータは、(volume_1のように)新しいボリュームPrimを追加して、そのPrim下にそのフィールドとその後のフィールドを格納します。

    これは、2つのPyroシミュレーションを結合した場合にインポータはdensityveltemperatureのフィールドの2つのシーケンスを2つの別々のボリュームPrimsにグループ分けすることを意味します。

  • usdvolumesavepathという名前のSOPアトリビュートを割り当てることで、USD ROPを使用した時のボリュームファイルの保存先のカスタムパスを指定することができます。 このアトリビュートは、USDフィールドPrim上のHoudiniSavePathメタデータに変換されます。

SOPパックプリミティブ

  • Packed Primitives パラメータを“Create Point Instancer”に設定すると、パックプリミティブにusdinstancerpathという名前のSOPプリミティブ文字列アトリビュートを割り当てることができます。このアトリビュート値には、作成したいインスタンサーのUSDシーングラフパスを指定します。

  • SOPパックプリミティブには、LOD Visibility設定のviewportlodIntrinsicアトリビュートがあります(例えば、Packed Properties SOPDisplay As を“Hidden”に設定することができます)。 インポータは、自動的にこの設定をUSD Visibilityメタデータに変換します。 アトリビュートパターンパラメータ内でvisibilityトークンを使用することで、Visibilityデータの編集方法を制御することができます(例えば、 Attributes パターンに^visibilityを追加するとvisibilityの編集がスキップされます)。

  • 入れ子化されたパックプリミティブをNative Instancesとして取り込んだ場合、新しいマテリアルを作成する時はusdmaterialpathを相対パスにする必要があります。

サブディビジョンサーフェス

  • Treat Polygons as Subdivision Surfaces パラメータを使ってすべてのポリゴンをサブディビジョンサーフェスに変換しなくても、osd_scheme Primitive文字列SOPアトリビュートの値に基づいて選択的にフェースをサブディビジョンサーフェスに変換することができます。

    指定可能な値は、catmullClarkloopbilinearnoneです。

    (Unpack USD SOPは、USDからSOPにアンパックして、それを再度USDに戻せるようにするために、このSOPアトリビュートを作成します。)

  • ポリゴンをサブディビジョンサーフェスに変換する時、インポータは、Subdivide SOPで認識できるSOPアトリビュート(例えば、creaseweightcornerweightosd_vtxboundaryinterpolationosd_fvarlinearinterpolationosd_trianglesubdivsubdivision_holeプリミティブグループ)も使用します。

アトリビュートの変換

  • 以下の共通Houdiniアトリビュートのどれかを取り込んだ場合、インポータは、自動的にそれらのアトリビュートを、それに呼応する異なる名前のUSDアトリビュートまたはPrimvarsに変換します:

    P

    USDではpointsアトリビュートになります。

    N

    USDではnormalsアトリビュートになります。

    v

    USDではvelocitiesアトリビュートになります。

    w

    USDではangularVelocitiesアトリビュートになります(Point Instancer Primを編集する時のみ)。

    accel

    USDではaccelerationsアトリビュートになります。

    id

    USDでは(ポイントまたはPoint Instancer Prim上で)idsアトリビュートになります。

    uv

    USDでは Translate UV Attribute to ST パラメータ設定に応じてprimvars:stになります。

    Cd

    USDではprimvars:displayColorになります。

    Alpha

    USDではprimvars:displayOpacityになります。

    width, widths, pscale

    これらすべては、USD widthsアトリビュートに変換されます。

  • Houdiniは配列アトリビュートに対応していますが、USDにはそれと等価のネイティブな表現がありません。

    foo配列アトリビュートを持ったジオメトリを取り込むと、インポータは、2つのUSD Primvarを作成します:foo(すべての配列を連結した作成されたリスト)とfoo:lengths(配列長のリスト)。

    例えば、bar配列値が[1,5][2,6,8]の2個のポイントは、2つのPrimvarとして変換されます: bar=[1,5,2,6,8]bar:lengths=[2,3]

他の特別なSOPアトリビュート

  • usdvisibility文字列SOP Primitiveアトリビュートを作成することで、呼応するUSD PrimのVisibilityメタデータを制御することができます。この値には、invisibleまたはinheritのどれかを指定してください。

    インスタンサーを作成した場合、このVisibility情報はinvisibleIds USDアトリビュートに変換されます。

  • usdpurpose文字列SOP Primitiveアトリビュートを作成することで、呼応するUSD PrimのPurposeを制御することができます。この値には、defaultrenderproxyguideのどれかを指定してください。

  • usdactive整数SOP Primitiveアトリビュートを作成することで、呼応するUSD Primのアクティベーションを制御することができます。この値には、0(非アクティブ)または1(アクティブ)のどれかを指定してください。

  • USD Configure SOPは、SOPジオメトリ上にインポータ設定を表現したグローバル(Detail)アトリビュートを作成します(このノードのパラメータを有効にすることで、そのアトリビュートを上書きすることができます)。 このアトリビュートの名前は、usdconfigで始まるインポータパラメータの名前にマッチします。例えば、usdconfigattribsDetailアトリビュートには、インポートするSOPアトリビュートの文字列パターンを指定します。

    Note

    プリミティブまたはポイントレベルでusdconfigotherprimsアトリビュートを作成することで、プリミティブ単位でアトリビュートを指定することができます。

  • SOPポイントにusdprimtype文字列Pointアトリビュートがあれば、それはUSD Primとして取り込まれます。 インポータは、ポイントの位置と標準のインスタンスオリエンテーションアトリビュートを、新しいPrimのトランスフォームに変換します。 ポイントにもusdkind文字列アトリビュートがあれば、それはPrimのKindとして使用されます。 他にも、usdapischemas文字列配列Pointアトリビュートを使用することで、Primに適用されるAPIスキーマを複数指定することができます。

    これを使用することで、pathusdprimtypeusdapischemasusdkindのアトリビュートを持ったポイントのSOPsでUSD Primsの階層を表現することができます。

パラメトリックシェイプ

  • インポータは、Houdini球プリミティブをUSD Sphere Primsに変換します。

  • 両端を蓋して片側半径を0にしたHoudiniチューブプリミティブを取り込むと、インポータはそれをUSD Cone Primに変換します。

    両端を蓋してテーパーのないHoudiniチューブプリミティブを取り込むと、インポータはそれをUSD Cylinder Primに変換します。

    それ以外の構成のチューブプリミティブは、サブディビジョンメッシュに変換されます。

Tipsとメモ

  • USDのデフォルトは右手向きメッシュであるのに対して、Houdiniは左手向きメッシュです。あなたのメッシュが右手向きの場合、SOPsでそのジオメトリを編集する時は Reverse Polygon Vertex Ordering を有効にしてください。

  • SOPジオメトリをUSDに変換する時、できるだけ効率的に変換されるように試みてください。デフォルトでは、アトリビュートはタイムサンプルになるのですが、アトリビュートを Set Default Values に追加することで、それらのアトリビュートをタイムサンプルにしないように指定することができます。

    他にも Topology Attributes を“Static”に設定することで、アトリビュートをタイムサンプルにしないようにすることができます。

    USD(と特にHydra)は、たとえ値が単一タイムサンプル値であったとしても、値がタイムサンプルになっていると処理が重くなります。 セットアップの規模が小さいと、おそらくその違いはわからないですが、大規模シーンになると、かなり違いが出ます。

Solaris

USD

ジオメトリ

  • SOP Geometry I/O

    HoudiniがSOPジオメトリをUSDに変換する方法、その工程を制御する方法の詳細。

  • Component Builder

    Component Builderツールは、マテリアル、バリアント、ペイロード、レイヤーをサポートし、SOPからUSDモデルを作成するためのネットワークスニペットを配置します。

レイアウト

  • Editノード

    ビューア内でインタラクティブにPrimsをトランスフォームさせます。物理衝突を使用して、プロップを現実的に配置することができます。

  • Layoutノード

    インスタンス化されたUSDアセットをシーンに取り込むツールが備わっています。個々にコンポーネントを配置したり、カスタマイズ可能なブラシを使って色々な方法でコンポーネントをペイント/スキャッターしたり、既存のインスタンスを編集することができます。

  • カスタムレイアウトブラシ

    Layout LOPの挙動をカスタマイズして利用可能なレイアウトブラシデジタルアセットの作成方法。

ルック開発

  • MaterialX

    HoudiniにはMaterialXシェーダノードに呼応させたVOPノードが用意されています。これらのノードを使用してシェーダネットワークを構築したり、既存のMaterialXベースのシェーダをインポートすることで、(HoudiniのUSDレンダラーの)KarmaでMaterialXシェーダノードを利用することができます。

  • UDIMパス

    テクスチャ空間の異なるタイルを、それぞれ別の解像度で、異なるテクスチャファイルにエンコードすることができます。その後、kaiju.exrといったテクスチャファイル名を指定すると、Houdiniがロード時にそのトークンを特定のタイルアドレスに置き換えてくれます。

  • シェーダ変換フレームワーク

    シェーダノードのUSDプリミティブへの変換を含む、Solarisシェーディングフレームについて説明しています。

Karmaレンダリング

チュートリアル