Houdini 20.0 インポートとエクスポート

Alembicファイル

HoudiniはAlembic交換ファイルの読み書きに対応していて、要求に応じてファイルを読み込む(Demand-loading)ことができます。

On this page

概要

Houdiniは Alembic (.abc)ファイルの読み書きをサポートしています。 Alembicとは、ジオメトリとアニメーションのオープン交換フォーマットです。 初期の頃は、Sony Pictures ImageworksとIndustrial Light & Magicのチームによって開発されていました。

Houdiniは 要求に応じて読み込み可能な(Demand-loaded) Alembicデータに対応しています。 Alembicファイルのジオメトリをメモリにコピーすることなく、ビューアで表示することができます。 そして、Mantraは、AlembicのファイルからジオメトリをすべてRAMに読み込むのではなく、“ストリーム”することができます。 ジオメトリノードは、ポイントを動かさない“要求に応じて読み込まれた(Demand-loaded)”Alembicプリミティブに適用することができます。 さらに、AlembicデータをHoudiniのジオメトリとして読み込むこともできるので、そのサーフェスを編集することができます。

重いデータセットを取り扱うために、Houdiniでは同時にAlembicファイルの一部のみを読み込む方法が用意されています。 例えば、Alembic階層の特定のオブジェクトだけを読み込んだり、境界ボックス内のジオメトリだけを読み込んだり、境界ボックスやポイントとしてジオメトリを読み込み/表示することができます。

HoudiniはジオメトリをアニメーションをAlembicアーカイブに“レンダー”することもできます。

インポート

Alembicシーンのインポートには2通りの方法があります。 1つ目が、Alembic SOPを使って全体のシーンを単一のジオメトリに読み込む方法です。 2つ目が、Alembic Archiveオブジェクトを使ってAlembicシーンを表現したオブジェクトレベルの階層を作成する方法です。

  • Houdiniは、Alembic SOPを使ってAlembicファイルの特定のジオメトリをGeometry objectに読み込むことができます。

    Demand-loaded Alembicプリミティブ としてジオメトリを読み込むか、実際のHoudiniのジオメトリとして読み込むのか選択することができます。 Alembicプリミティブは少ないメモリで変換が可能ですが、ジオメトリを編集(ポイントの移動)することができません。 Houdiniのジオメトリとして読み込めばポイントを移動させることができますが、メモリが必要になります。

  • Alembicファイルのオブジェクト階層を使用するには、Alembic Archiveオブジェクトを使います。

    オブジェクトのパラメータには、そのオブジェクトの内部のAlembic Transformオブジェクトのネットワークを構築するコントロールがあります。 Alembic階層をHoudiniサブネットワークとして複製するか、Alembicオブジェクトをすべて並べて読み込むか選択することができます。

    メインメニューから File ▸ Import ▸ Alembic Scene を選択すると簡単にAlembic Archiveオブジェクトをセットアップすることができます。

メソッド

長所

短所

Alembic SOPの使用

これは静的なジオメトリをインポートするのにおそらく最速な方法です。 すべてのノードが別々のグループに分けられますが、グループの数が膨大になると、Houdiniでは管理が難しくなる場合があります。 メモリの効率が良いです。

アニメーションジオメトリは処理が遅くなる場合があります。その理由は、新しいオブジェクトトランスフォームを読み込むだけでなく、ジオメトリを変形しなければならないからです。 アトリビュートはすべてのオブジェクトで共有されます。 例えば、1個のオブジェクトだけがUV座標を失ってしまうと、HoudiniジオメトリがUV座標を持っていても、そのオブジェクトは無効な値を持つことになります。

Alembic Archiveオブジェクト

一度シーンが読み込まれると、フレームが変わる度にアニメーションオブジェクトだけが更新され、変形するジオメトリを持つオブジェクトのみが処理されます。 これによって、おそらく再生パフォーマンスが速くなることでしょう。

Houdiniのオブジェクトは単純なジオメトリよりももっとリソースを消費する可能性があります。 ノード毎にShapeノードとして単純なボックスを含んだAlembicノードが膨大にあるシーンでは、Houdiniで全体のAlembicツリーを再構築するのが効率が悪くなる場合があります。

エクスポート

  • Alembicファイルにエクスポートするには、Alembicレンダーノードを作成します。

  • Houdiniは、便宜的にジオメトリネットワーク内に直接Alembicレンダーノードを作成することができます。 これはジオメトリを直接レンダーノードに接続して、そのジオメトリだけをエクスポートすることができます。

    重要: ジオメトリレベルでAlembicレンダーノードを使う時でさえ、Alembicファイルは そのジオメトリを含んだオブジェクトのトランスフォーム も考慮されます。

  • アニメーションをエクスポートするには、レンダーノードのパラメータで、 Valid Frame Range を“Render Frame Range”に設定します。 Alembic File にはAlembicファイルのファイル名を設定します。

    (ファイル名に$F使わないで ください。Alembicレンダーノードは、画像をレンダリングするときにファイル名に$Fを使っていなくてもファイルを上書きすることなく、アニメーションの複数フレームを単一のAlembicファイルにちゃんとレンダリングします。)

  • メインメニューから File ▸ Export ▸ Alembic を選択すれば、簡単に/outネットワークにAlembicレンダーノードをセットアップすることができます。

双方向

AlembicファイルをHoudiniにインポートし、それを修正して、新しいAlembicアーカイブを同じ階層でエクスポートしたいことがよくあります。

Tip

HoudiniのImportとExportのサポートを使用することで、既存アーカイブを結合して、新しく結合したアーカイブを作成することができます。

  • AlembicファイルをAlembic Archiveオブジェクトとしてインポートする場合、それと同じ階層を出力するには、Alembicレンダーノードを使用するのが簡単です。

  • Alembicジオメトリノードを使用して、ジオメトリ(SOP)レベルでAlembicファイルをインポートする場合、そのノードには、元のアーカイブ内の形状のパスをHoudiniプリミティブのpath文字列アトリビュートに記録するためのオプション( Add path attribute , デフォルトでオン)があります。例えば、/octopus_low/octopus_lowShapeです。Alembicレンダーノードは、( Build hierarchy from attribute パラメータがオンの時に)そのpathアトリビュートを使用して、元の階層を再構築することができます。

  • エクスポートしたジオメトリに“パックAlembic”プリミティブ(ディスク上のAlembicファイルからジオメトリを取得するパックプリミティブのタイプ)が含まれていれば、Houdiniは、元のファイルから直接そのデータをコピーします。

起こり得る双方向問題と回避策に関する情報は、技術的な制約を参照してください。

ノード

Alembic Archiveオブジェクト

このオブジェクトはAlembicインポートの最上位に位置し、AlembicファイルのデータからHoudiniのオブジェクトノードを構築するコントロールが用意されています。 このノードの内部には、Alembicファイルのトランスフォームを意味するAlembic Transformオブジェクトがあります。

Alembic Transformオブジェクト

このオブジェクトは、Alembicファイルのトランスフォームを意味します。 このノードの内部には、実際にデータを読み込むAlembic SOPがあります。

Alembic SOP

AlembicデータをDemand-loaded Alembicプリミティブとして読み込むか、または実際のHoudiniジオメトリとして読み込むのか選択することができます。

Alembic Proceduralシェーダ

このシェーダは、レンダリング時にAlembicファイルからデータを読み込みます。

  • 通常では直接このシェーダを使う必要はありません。その理由は、Alembic ArchiveオブジェクトやAlembic SOPを使うと自動的にこのシェーダがセットアップされるからです。 しかし、このProceduralシェーダには役に立ちそうな技術的な機能が2つあります。

  • Alembic ユーザプロパティ をHoudiniのパラメータに読み込み/再マップすることができます。

  • 別のAlembicファイルからアトリビュートをインポートすることができます。 これにより、例えば、アーティストがファイルの1つのコピーをアニメーションで使い、 テクニカルディレクタがもう1つのコピーでUVを付け、 レンダリング時にアニメーションを付けたファイルにUVを読み込むことができます。

Alembicレンダーノード

HoudiniのジオメトリをAlembicファイルに“レンダー”します。 このレンダーノードは、便宜的に直接ジオメトリ(SOP)ネットワークに配置することができます。

Alembic-Houdiniのモデルミスマッチ

  • Houdiniは、階層で配置された オブジェクト を使ってシーンを表現し、そのオブジェクトには、平坦な(階層になっていない)ジオメトリを生成する ジオメトリネットワーク が含まれています。

  • Alembicは、“オブジェクトノード”の階層を使ってシーンを表現し、そのいくつかのノードには、個々のジオメトリを持つ“シェイプノード”が含まれています。

これら2つのモデル間のミスマッチは、HoudiniでAlembicデータを“双方向”にやり取りするのに、膨大な数の“取り組み”が必要になります。

ジオメトリ変換

  • 現在では、Houdiniはオブジェクト階層のインポート/エクスポート、ジオメトリのインポート/エクスポート、カメラのインポート/エクスポートに対応しています。

  • 以下にAlembicとHoudiniのジオメトリタイプ間の変換に関するテーブルを載せます:

    Alembicジオメトリ

    Houdiniジオメトリ

    Face Sets

    Primitive groups

    Subdivision Surfaces meshes

    Polygon primitives

    Polygon Meshes

    Polygon primitives

    Curve Sets

    Open polygon primitives

    Point Sets

    Particle primitives

    NuPatches

    NURBS surface primitives

    Shape nodes

    Geometry groups

  • Houdiniは、AlembicジオメトリスコープとHoudiniアトリビュートタイプ間を変換します。そのマッチングは不完全ですが、一般的には以下のとおりです:

    Alembicスコープ

    Houdiniアトリビュートタイプ

    Constant

    Detail

    Uniform

    Primitive

    Facevarying

    Vertex

    Vertex, Varying

    Point

  • AlembicはHoudiniのすべてのジオメトリタイプをサポートしていないので、エクスポート時に、Houdiniジオメトリが複数のAlembicシェイプに“精製”されることがあります。 Alembicでは同階層レベルのシェイプが固有の名前である必要があるので、Houdiniは、それらのシェイプが作成できるように名前を変更します(例えば、mesh, mesh_1, mesh_2)。

  • 新しいジオメトリグループはAlembic Shapeノード毎に作成されます。 グループ名はそのノードへのパスを誤魔化したバージョンです。その理由は、Houdiniのグループ名は有効な文字列の制限があるからです。

  • Polygon Meshプリミティブに関しては、レンダーノードは、それを含んだオブジェクトがPolygons as subdivisionまたはri_rendersubdトグルプロパティのどちらを有効にしているのかチェックします。 どちらかが有効になっていれば、レンダーノードはPolygon MeshをAlembic Subdivision Meshとして出力します。

  • 現在では、Alembicレンダーノードは、対応していないジオメトリすべてをPolygon Mesh、Curve Mesh、Point Setのどれかに変換します。

  • Alembic UVは2エレメントしか持たないのに対し、Houdini UVは3エレメント持ちます。

  • Alembicサブディビジョンサーフェスは、法線アトリビュートをファーストクラスアトリビュートとして保存しません。

可視性

Alembicの可視性は、“下から上に”計算されます: ノードは、可視、不可視、“deferred(遅延)”に指定することができます。つまり、“deferred(遅延)”になっていない階層の次に高いノードから可視性を取得します。 Houdiniの可視性は、“上から下に”計算されます: オブジェクトの可視性の設定が、その階層内のすべてのサブオブジェクトの可視性を決定します。

この違いから、Alembic Archiveオブジェクトを使用してAlembicアーカイブを読み込んだ時に問題が生じます。 デフォルトでは、 Flatten Visibility Evaluation パラメータが有効になっています。 これは、そのアーカイブオブジェクト内のすべてのAlembic Xformオブジェクトが可視になるように設定し、そのオブジェクト内のジオメトリにその可視性の設定を押し付けます。 それによって、フレーム毎に正しくジオメトリが可視になります。

とはいえ、これは双方向のやり取りには向いていません。なぜなら、Alembicファイル内のすべてのオブジェクトの可視性を書き換える可能性があるからです。 元の可視性の情報を維持することが重要な時は、アーカイブに対して Flatten Visibility Evaluation を無効にすることができます。 とはいえ、HoudiniがそのAlembicジオメトリをビューポート内で間違えて表示してしまう可能性があります。

Mayaカメラの取り扱い方

Mayaカメラモデルは、2つの“ゲート”を使用して動作しています: film gateresolution gatefilm gateは、カメラから見えるもの、resolution gateは、レンダリングされるものです。

Mayaカメラには、Houdiniに相当するものがない lens squeeze アトリビュートというのがあります。そのアトリビュートを考慮して、HoudiniカメラをMaya film gateに合わせるには、以下の方程式が真でなければなりません:

  • a = 10h * l

  • p = (h * l * resy) / (v * resx)

意味:

  • h = Alembic horizontal aperture

  • v = Alembic vertical aperture

  • l = Alembic lens squeeze

  • a = Houdini aperture

  • p = Houdini pixel aspect ratio

  • resx, resy = Houdini X/Y resolution (ピクセル)

Houdiniカメラは、常にMayaカメラのfilm gateと同じものをキャプチャします。Houdiniカメラの Resolution を変更しても、Mayaの Resolution の変更と同じに なりません

  • Mayaでは、Resolutionを変更すると、アスペクト比を変更し、その結果、Resolution GateがFilm Gate内にフィットするように変わります。

  • Houdiniでは、Film Gateの内容がまだ表示されるように、上記の方程式を使用して AperturePixel Aspect Ratio を調整します。MayaのFilm GateとResolution Gate間の関係性を模倣するには、Houdiniカメラの Crop パラメータを使用します。ネガティブクロップ(オーバースキャン)には対応していません。

Mayaカメラ

Alembicカメラ

Houdiniカメラ

メモ

Focal length

Focal length

Focal length

H. camera aperture

H. aperture

Aperture

  • Mayaの単位はinch、Alembicの単位はcm、Houdiniの単位はmmです。

  • Lens squeezeと組み合わせて、Houdiniで有効な絞りを計算します。

V. camera aperture

Vertical aperture

None

  • Screen window YPixel aspect ratio の計算に使用します。

H. film offset

H. film offset

Screen window X

  • Mayaでは絶対単位、Houdiniでは相対単位。

  • Screen window X = H. Film Offset / H. Aperture.

V. film offset

V. film offset

Screen window Y

  • Mayaでは絶対単位、Houdiniでは相対単位。

  • Screen window Y = V. Film Offset / V. Aperture.

Lens squeeze ratio

Lens squeeze ratio

None

  • 有効な AperturePixel aspect ratio に寄与します。

Pre/Post/Camera scale

FilmBackXformOps

Screen window size

  • Lens Squeeze RatioとResolution Gateフィットに依存したカメラに適用された追加スケールは無視されます。

Shutter open/close

Shutter open/close

Shutter time

  • Shutter close - shutter open

F stop

同じ

同じ

Focus distance

同じ

同じ

Near clip plane

Near clipping plane

Near clipping

Far clip plane

Far clipping plane

Far clipping

Tips

  • 現在のところ、Alembicのライトとマテリアルには対応していません。

  • Alembic Importノードは、Alembicジオメトリを実際のジオメトリではなく、境界ボックスやポイントクラウドとして読み込むことができます。 これは、そのジオメトリの情報だけが必要なときや、非常に膨大なファイルを可視化するのにも役に立ちます。

  • Alembic Importノードでは、特定のジオメトリタイプのみ、特定の境界ボックス内のオブジェクトのみ、アニメーションオブジェクトのみ、アニメーションなしのオブジェクトのみを読み込むようにすることができます。 (読み込むオブジェクトのリストは、フレーム毎に更新されるので、例えば、オブジェクトが境界ボックスを通過する時に、現れたり消えたりすることができます。)

  • Houdiniは通常ではAlembic Archiveオブジェクトで作成されたオブジェクト間に チャンネル参照 を作成します。 これらのチャンネル参照は非常に膨大なAlembicファイルを扱う時に遅くなる可能性があり、あるパラメータを変更する度に再クックします。

    非常に膨大なAlembicファイルを扱う時は、Alembic Archiveオブジェクトのパラメータの Build Hierarchy With Channel References をオフにしてみてください。 これにより、チャンネル参照なしでオブジェクトを構築するので、再ククが速くなります。 実際に子ノードのパラメータを更新したい時は、Alembic Archiveノードのパラメータの Push Parameters To Children をクリックしてください。

  • Alembic Archiveオブジェクト内に あなたが作成したオブジェクトを配置しないでください 。 Alembic Archiveノードがネットワークを再構築すると、それらのオブジェクトが削除されてしまいます。

  • Demand-loaded AlembicプリミティブとしてAlembicジオメトリを読み込んだ後は、後でConvert SOPを使ってHoudiniのジオメトリに変換することができます。

  • Alembic Importノードの Remap Attributes を使えば、Alembic固有のアトリビュート名をHoudiniの名前に変更することができます。

  • Alembic ProceduralシェーダAttribute File パラメータを使えば、別のAlembicファイルから特定のジオメトリアトリビュートを引き出すことができます。

オープンソース

HoudiniのAlembic対応は、いくつかのプラグイン(SOP、OTLなど)で用意されています。 Houdiniのインストールでは、プラグイン用のソースコードが入っています。 Side Effects Software Inc.は改善内容をAlembicプロジェクトにフィードバックすることを約束しています。

技術的な制約

以下の制約は、ジオメトリ(SOP)レベルでのAlembicジオメトリの双方向のやり取りに適用されます。

  • エクスポート時に、Alembicレンダーノードは、Houdiniネットワーク階層に相当するAlembicノードを作成します。これは、pathアトリビュートを持たないシェイプノードの格納場所です。すべてのジオメトリに有効なpath値があれば、このノードは作成されません。

  • Alembicレンダーノードがパックプリミティブを書き出す時、“Packed Mode”を“Transformed Shape”に設定または“Use Instancing WHere Possible”を有効にすると、親オブジェクトとジオメトリオブジェクトの間に追加でトランスフォームオブジェクトを挿入し、パックジオメトリのローカルトランスフォームを保持します。

インポートとエクスポート