| 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_0やvolume_0)で兄弟として取り込まれます。
パックプリミティブやAlembicプリミティブなどの一部のジオメトリタイプは、階層内のそのジオメトリの位置を示したアトリビュートを持っている場合があります。 そのようなアトリビュートが存在すれば、インポータはそのアトリビュートを使用します。
ジオメトリがUSDに取り込まれた時に階層関係を制御できるように、SOPを使って具体的にアトリビュートを追加することもできます。 Path Attributes パラメータは、パス情報を含んだSOPプリミティブアトリビュートのリストを指定することができます。
取り込まれたPrimにパス情報がなくて(mesh_0のように)自動的に名前が付けられた場合、または、パス情報があるもののそのパスが(/で始まらない)相対パスだった場合、ノードが自動的に Import Path Prefix のパスを名前/パスフラグメントの頭に付けます。
これが、単一ブランチ下で“パスなし”Primsの構成を維持する方法です。
例えば、 Import Path Prefix に/world/geoを設定した場合に、異なる名前/アトリビュート値を持ったPrimsがどのようにシーングラフツリーにマップされるのかを以下のテーブルに示します:
名前/アトリビュート値 |
Import Path Prefix |
取り込まれる場所 |
|---|---|---|
|
|
|
|
|
|
|
|
|
-
アトリビュート値の中の無効なパス/文字は、有効なパスになるように変換されます。通常では、これは無効な文字がアンダースコアに置換されます。
-
互換性のないジオメトリタイプが同じパスアトリビュート値を持っていた場合、インポータは、名前の後に数値を追加して固有な名前にします。
例えば、
/foo/barの場所に球とポリゴンメッシュの両方を配置しようとした場合、インポータは、これら2つのPrimsを別々の名前(例えば、/foo/bar_0と/foo/bar_1)で作成します。
マテリアル ¶
-
usdmaterialpathアトリビュートを追加することができ、SOP Importと
SOP Createはマテリアルバインドを作成することができます。これらのノードは、見つからないMaterial Primsを作成したり、既存のマテリアルバインドを無効にすることもできます。USDパックPrimをSOPジオメトリにアンパックすると、
usdmaterialpathも生成されます。詳細は、マテリアルのバインドを参照してください。 -
GeomSubsetを使用すれば、Mesh Prim上のフェースに対してマテリアルを割り当てることができます。このGeomSubsetは、 Subset Groups や Partition Attributes で指定されたプリミティブグループやプリミティブアトリビュートによって作成することができます。
ボリューム ¶
-
デフォルトでは、すべてのSOPフィールドが単一の
volume_0Prim下に取り込まれます。 -
usdvolumepathという名前のSOPアトリビュートをボリュームに割り当てることで、そのボリュームのフィールドの取り込み先となるUSDシーングラフパス指定することができます。 -
フィールドがそのボリューム下の既存フィールドと同じ名前だった場合、インポータは、(
volume_1のように)新しいボリュームPrimを追加して、そのPrim下にそのフィールドとその後のフィールドを格納します。これは、2つのPyroシミュレーションを結合した場合にインポータは
density、vel、temperatureのフィールドの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 SOPで Display As を“Hidden”に設定することができます)。 インポータは、自動的にこの設定をUSD Visibilityメタデータに変換します。 アトリビュートパターンパラメータ内で
visibilityトークンを使用することで、Visibilityデータの編集方法を制御することができます(例えば、 Attributes パターンに^visibilityを追加するとvisibilityの編集がスキップされます)。 -
入れ子化されたパックプリミティブをNative Instancesとして取り込んだ場合、新しいマテリアルを作成する時は
usdmaterialpathを相対パスにする必要があります。
サブディビジョンサーフェス ¶
-
Treat Polygons as Subdivision Surfaces パラメータを使ってすべてのポリゴンをサブディビジョンサーフェスに変換しなくても、
osd_schemePrimitive文字列SOPアトリビュートの値に基づいて選択的にフェースをサブディビジョンサーフェスに変換することができます。指定可能な値は、
catmullClark、loop、bilinear、noneです。(
Unpack USD SOPは、USDからSOPにアンパックして、それを再度USDに戻せるようにするために、このSOPアトリビュートを作成します。)
-
ポリゴンをサブディビジョンサーフェスに変換する時、インポータは、
Subdivide SOPで認識できるSOPアトリビュート(例えば、
creaseweight、cornerweight、osd_vtxboundaryinterpolation、osd_fvarlinearinterpolation、osd_trianglesubdiv、subdivision_holeプリミティブグループ)も使用します。
アトリビュートの変換 ¶
-
以下の共通Houdiniアトリビュートのどれかを取り込んだ場合、インポータは、自動的にそれらのアトリビュートを、それに呼応する異なる名前のUSDアトリビュートまたはPrimvarsに変換します:
PUSDでは
pointsアトリビュートになります。NUSDでは
normalsアトリビュートになります。vUSDでは
velocitiesアトリビュートになります。wUSDでは
angularVelocitiesアトリビュートになります(Point Instancer Primを編集する時のみ)。accelUSDでは
accelerationsアトリビュートになります。idUSDでは(ポイントまたはPoint Instancer Prim上で)
idsアトリビュートになります。uvUSDでは Translate UV Attribute to ST パラメータ設定に応じて
primvars:stになります。CdUSDでは
primvars:displayColorになります。AlphaUSDでは
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情報は
invisibleIdsUSDアトリビュートに変換されます。 -
usdpurpose文字列SOP Primitiveアトリビュートを作成することで、呼応するUSD PrimのPurposeを制御することができます。この値には、default、render、proxy、guideのどれかを指定してください。 -
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スキーマを複数指定することができます。これを使用することで、
path、usdprimtype、usdapischemas、usdkindのアトリビュートを持ったポイントのSOPsでUSD Primsの階層を表現することができます。 -
SOPアトリビュートに直接呼応していないUSDプロパティのデータの作成方法を制御するためにアトリビュートパターンパラメータ内で使用可能な特殊なトークンがいくつかあります。 例えば、 Set Default Values パターンに
transformを追加すると、プリミティブトランスフォームがタイムサンプルにならなくなります。-
boundsトークンは、SOPプリミティブの境界ボックスのextentアトリビュートの変換方法を制御します。 -
skelanimationトークンは、エージェントプリミティブを変換する際のSkelAnimationPrim上のジョイントとブレンドシェイプのアニメーションアトリビュートの作成方法を制御します。 -
transformトークンは、プリミティブトランスフォームの作成方法を制御します。 -
visibilityトークンは、_3d_hidden_primitivesグループとパックプリミティブの可視性を変換する際のvisibilityアトリビュートの作成方法を制御します。
-
パラメトリックシェイプ ¶
-
インポータは、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)は、たとえ値が単一タイムサンプル値であったとしても、値がタイムサンプルになっていると処理が重くなります。 セットアップの規模が小さいと、おそらくその違いはわからないですが、大規模シーンになると、かなり違いが出ます。