Houdini 18.5 Solaris

SOPをUSDに取り込む方法

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

On this page

概要

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

  • 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)で作成します。

ボリューム

  • デフォルトでは、すべての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 Edit SOPDisplay As を"Hidden"に設定することができます)。 インポータは、自動的にこの設定をUSD Visibilityメタデータに変換します。

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

  • 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のどれかを指定してください。

  • USD Configure SOPは、SOPジオメトリ上にインポータ設定を表現したアトリビュートを作成します(このノードのパラメータを有効にすることで、そのアトリビュートを上書きすることができます)。 これは、 グローバル(Detail)レベルusdconfigureotherprims SOPアトリビュートの 他のプリミティブ を変換する方法に関する設定を保存することができます。

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

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

    これを使用することで、pathusdprimtypeusdkindのアトリビュートを持ったポイントの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

チュートリアル

Karmaレンダラー