Houdini 20.0 Solaris

LOPs入門チュートリアル 3 レイアウト部署編: シーケンスレイアウト

シーン内にいくつかセットを配置して、“シーケンス”レベルでそれらのアセットを動かしていきます。これは、プロダクションパイプラインのステージの1つである レイアウト の小規模版です。

On this page

はじめに

まだ準備ができていない方は、必要なサポートファイルをダウンロードしてください。

このチュートリアルでは、“レイアウト”部署の役を演じましょう。 たいていの今どきのパイプラインには、アセットを整理してシーン内に配置するレイアウト部署が存在し、仮組み(アニメーションキャラクタやプロップの場合では当たり前)、最終的な正確な配置(セットまたは環境ではよくあります)を行ないます。

ここでは、1番目のチュートリアルで作成した樽アセットと2番目のチュートリアルで作成した本棚、さらにはダウンロードした他のアセットを利用します。 1番目と2番目のチュートリアルをしていなくても心配無用です。 これまでのチュートリアルをしなくても、このチュートリアルを学習することができます(とはいっても、もちろんそれらのチュートリアルを学習 しておいた方がいい です!)。

2つの方法で シーケンスレイアウト を作成して行きます。 USDレイアウトステージを構築する方法を理解するために手動で少しだけ シーケンスレイアウト を行なってから、この工程を非常に簡単にできるStage Managerを使って完全に シーケンスレイアウト を行ないます。 次のチュートリアルでは、この シーケンスレイアウト から分岐して、ショット( ショットレイアウト )毎にバリエーションを作成します。 もちろん、プロジェクトによって、この扱い方が異なります(プロジェクトレイアウト、シーケンスレイアウト、シーケンスレイアウト、ショットレイアウトなど)。 通常作業または他の工程(自動化など)で何かしらのライティングができるように、いくつかデフォルトのライトを入れます。

これらのチュートリアルでは、出荷されたカメラがなかったわけですが、もちろん実際のプロダクション環境では、マッチムーブ部署からカメラが出荷され、各ショットレイアウトに入れます。

では、始めましょう。作業の度にlops_tutorial_3.1.hipのような名前でファイルを頻繁に保存することを忘れないでください。

手動によるレイアウト

  • 新規でHoudiniを起動します。

  • メインメニューから、 Desktop ▸ Solaris を選択します。

    Scene Graph Tree がパネルのどれかになっていることを確認します。

  • ネットワークエディタで、/stageに移動します。

    Note

    Houdini内のどのレベルでもLOPネットワークを作成することができますが、わかりやすくするために、/stage内で作業しましょう。

    • Reference LOPを作成します。名前をBarrelsに変更します。

      このReference LOPの Primitive Path パラメータを見てください。 $OSエクスプレッションは“このノードの名前”を意味します。 そのパラメータのラベルをクリックすると、“Barrels”と表示されます。 これによって、2箇所で同じ情報を入力する手間が省けます。

      Reference FIle

      $HIP/LOPS_DEMO_FILES/Library/Assets/Barrels/BarrelsAsset.usd

      Reference(リファレンス)は、PrimsをLOPネットワークに読み込むのによく使用する方法の1つです。

  • Reference LOPにSet Variant LOPを接続します。

    • Variant Set パラメータの隣にあるメニューからmodelを選択します。

    • Variant Name パラメータの隣にあるメニューからBarrelWithLidを選択します。

    樽アセットで以前に保存した樽のバリアントを選択するには、 Set Variant LOP を使用します。

  • Null LOPを接続し、名前をBarrelWithLidに変更します。

  • 作成したSet Variant LOPとNull LOPを選択して、ネットワークエディタのメニューから Edit ▸ Copy を選択します。次に、 Edit ▸ Paste を2回選択して、それらのコピーを2セット作成します。

  • コピーされた2つのSet Variant LOPの内、片方のLOPのVariant NameパラメータをBarrelNoLidに、もう片方をBarrelNoLidV2に設定します。各Null LOPの名前をそれに合わせます(もし迷ったら、下にスクロールして、ノードネットワークがどのようになっているのか確認してください)。

    Scene Graph Tree を見ると、/Barrels直下にこれらの樽が存在しています。 わかりやすくするために、これらの樽をシーン内で“graft(接ぎ木)”にしたいです。 これらの(と他の)プロップを格納するための“shop front(店頭)”を作成しましょう。

    • Xform LOP(Transform LOP ではありません )を作成します。名前をShopfrontに変更します。このLOPには何も接続しないでください。

      これまでと同様で、 Primitive Path パラメータのエクスプレッションは、プリミティブパスの名前を適切に管理します。

      このXform LOPのパラメータエディタで、 Create Primitives セクションを開きます。

      Primitive Kind

      Assembly

      Xform LOP を追加することで、USDファイル構造にトップレベルのトランスフォームとルートフォルダを追加することができます。 今回は、このLOPの名前を“Shopfront”に変更します。 小さなモデルをグループに整理しておくことは良い方法なので、このPrimitive Kindを“Assembly”にしました。 このような体系的な構造( アセンブリ , グループ, コンポーネント, サブコンポーネント )に関する情報は、用語集のアセンブリを参照してください。

  • Graft Stages LOPを作成します。

    • Graft Stages LOPの1番目の入力に Xform LOPの出力を接続します。

    • Graft Stages LOPの2番目の入力に3つのNull LOPすべてを接続します。

      Primitive Path

      これはデフォルトのままにします: `lopinputprim('.', 0)` このラベルをクリックすると/Shopfrontと表示されます。

      Primitive Kind

      Group

      Destination Path Default
      /Barrels/`opinput('.', $IIDX)`

    Graft Stages LOPは、文字通りでPrimsをUSD階層に“graft(接ぎ木)”させます。 “graft(接ぎ木)”の処理に関する情報は、用語集のGraftを参照してください。 基本的にGraft Stages LOPは、他のLOPツリーをLOPネットワークに挿入(そして、その結果のUSDファイルを適切に構築)するための機能です。

  • ノードネットワークは下図のようになっているはずです:

    Note

    `opinput(“.”, $IIDX)`のエクスプレッションが何を意味しているのか気になっていることでしょう。 そのパラメータのラベルをクリックすれば、通常であれば、そのエクスプレッションの評価内容が表示されるはずです。 今回の場合では、このLOPは入力をループさせる度にエクスプレッションを評価するので何も表示しません(一度に複数の結果を表示することはできません)。 “opinput”エクスプレッションは、2番目の入力の現在の“入力インデックス”($IIDX)を照会して、そのインデックスに該当するLOPの名前でサブフォルダの名前を管理します。

  • Scene Graph Treeを見ると、下図のように表示されるはずです:

    ビューポート内には3つではなくて1つの樽しか表示されていないのはなぜでしょう? 実は3つの樽がお互いに上に重なっています。 これらの樽の位置を動かしましょう。

  • ビューポート内で、(選択できるように)Sキーを押します。ビューポートの上部を見ると、“Select Leaf Primitives”、“Select Models”などのアイコンの列があります。

    今回は、デフォルトの“Select Leaf Primitives”のままで作業します。

    • 樽を選択したら、Tを押してEdit LOPを配置します(樽を選択できない、または、選択を変更できない場合は、このページの次の注記を参照してください)。

    • ビューポート内でEnterを押すと、Handleツールに切り替わります。

    • TREのキーを使うことで、移動、回転、スケールのハンドルに切り替えることができます。Tキーを押して、トランスフォーム(移動)ハンドルに切り替えます。

    • 樽が重ならないように動かします。

    どうして“Transform”ではなく“Edit”を使用するのでしょうか? 手動によるレイアウトでは、Editが直感的です。Transformはプロシージャルにトランスフォームを制御することができます。

  • では、何か面白いことに挑戦してみましょう。

    • ステージビューポートの左上にある“Use Physics”チェックボックスを有効にします。これで、 物理モード になりました。

      (Editノードステートになっていない場合、ネットワークエディタでEditノードを選択してから、マウスをビューポート内に移動させてEnterを押すことで、Editノードステートにすることができます)

    • 樽をすべて選択します。ビューポートのツールバー上の“Add Physics”をクリックします。これによって、樽がお互いに衝突できるようになります。

    • 樽を選択して、Tを押して移動ハンドルに切り替えます。樽を他の樽の上にドラッグしてから下に動かしてください。移動させている樽が他の樽と衝突するはずです。

    Note

    樽を選択できない、または、選択を変更できない場合は、ビューポートの左側にある“Secure Selection”アイコンが無効になっていることを確認してください。

次に進む準備ができましたので、続けるために、(必要であれば)現行ファイルを保存します。 この完了させた全体の手動レイアウトを見たいのであれば、FullSceneSetup.hipを開いてください。 そうでないなら、 File ▸ New を選択して、新しいHoudiniセッションを始めます。

Stage Managerに関して

3つの樽を配置しましたが、複雑なセットに対してこれを繰り返すのはどれほど面倒なことなのか分かることでしょう。 幸いなことに、Stage Managerを使用することで、これよりももっと良い方法があります。 Stage Managerは、ディスクからアセットを参照し、それらのアセットを3D空間でトランスフォームさせて、シーン階層を調整するといった事を一箇所で制御できるように設計されています。 Stage Managerは、入力のレイヤーを1枚のレイヤーに平坦化するので、どの入力に対してもそれらのオペレーションを実行することができます。 しかし、この機能を使用すると、レイヤースタック内のすべてのレイヤーが結合されるので、軽く処理できるようなものではありません。

“入力のレイヤーを1枚のレイヤーに平坦化する”とはどういう意味でしょうか? レイヤーを“平坦化”すると、実質的にUSDの“サブレイヤー”機能が除去されます。 もはや“レイアウト”レイヤーと“アニメーション”レイヤーがなくなり、レイヤーが1枚だけになります。 そのため、あなたがFXアーティストとして作業する時に、Stage Managerを使ってシーンの一部を置換すると、実質的に上流からの変更を遮断することになります。 その後でレイアウト部署がアセットを動かしても、レイアウト+アニメーション+FXを取得するライティング部署では、そのFX部署がレイヤーを平坦化してすべてをオーバーライドしてしまっているので、その変更をまったく見れなくなります。 それだけでなく、FXレイヤーを“ミュート”して、FXでの平坦化の前と同じPrimsを表示する方法がありません。 FXレイヤーをミュートにすれば、Primsが単に消えて、“存在”させたい“レイアウトレイヤー”も“アニメーションレイヤー”もありません。

USDでは、何も削除されないことを忘れないでください(これは、他の何かがそれを参照しているかもしれないのが主な理由です)。 そのために、ミュート可視性アクティブ化がサポートされています。 しかし、レイヤーを平坦化することで、実質的に弱いレイヤーを破壊することになります。

以上のことから、おそらく結局のところ、Stage Managerにはかなりの時間がかかってしまうでしょう。 既に説明したとおり、シーンのレイアウト、シーンの整理、バリアントの選択に関しては、大幅に時間を短縮することができます。

この後のチュートリアルでは、レイヤーの概念とレイヤーのオーバーライドについて学習します。

Stage Managerを使ったレイアウト

下図のレイアウトを再現しようと思います。セットの正面部分を構築することから始めましょう。

  • コンストラクション平面の表示を有効にします。この平面を表示すると、Houdiniは、その平面に対してスナップをします。

  • Stage Manager LOPを作成します。名前をfrontに変更します。

    • Stage Managerで、前にダウンロードしたファイルを開きます。ここでは、ファイル名が“Asset.usd”で終わるUSDファイルのみを読み込みます。これらのファイルには、すべてのマテリアルと通常ならバリアントも含まれています。例えば、LOPS_DEMO_FILES/Library/Assets/Barrels/BarrelsAsset.usdから始めます。

  • ブラウザからBarrelsAsset.usdファイルをビューポートにドラッグします。原点に配置するならENTERを押すか、または、シーンビュー内をクリックして、そのアセットをシーンに配置します。

    このアセットのデフォルトのバリアントが表示されます。他のバリアントを選択したいのであれば、方法が2通りあります:

    • ビューポート内でアセットを選択して、 ▸ Edit Variants (またはCTRL + E)を選択して、その選択ダイアログからバリアントを選択します。

      または

    • Stage Manger内のScene Graph Pathのフィールドの隣にある“Variants”をクリックして、バリアントを選択します。

  • セットの正面部分を構築するまでシーンの構築を続け、必要に応じてバリアントを選択して上図のレイアウトに合わせます(まず最初に、セットの正面部分を構築していることを忘れないでください)。 `

    Tip

    ビューポート内でCTRL + Dを使ってPrimsを複製してから、適切なバリアントを選択することができます。

  • では、Scene Graph Treeを見てみましょう。下図のようになっているはずです。

    すべてのアセットがUSDツリーのルート直下に置かれていることに気づいてください。 まったく良くありません。 前回のチュートリアルでは、Stage Mangerの緑の“+”ボタンをクリックするだけで、棚を整理しました。 ここでは、それも可能ですが、LOPsとUSDをもっと深く理解してほしいので、他の方法を紹介したいと思います。 Graft Stages LOPが何のノードなのかを覚えていない人のために、ここで復習しましょう。

  • Xform LOPを作成します。

    Create Primitives:Primitive Kind

    Assembly

  • Graft Stages LOPを作成します。

    Primitive Kind

    Group

下図のように、ノードを接続して、名前を変更します。

  • では、Scene Graph Treeペインを見てみましょう。USDファイル構造が“tent_scene”グループ下にコンポーネントを収めて非常にうまく整理されています。

  • Stage Manager をもう1個作成します。

    • 名前をbackに変更して、下図のように接続します。

  • 以前に説明したテクニックを使って、いくつかのアセットをシーンの“back”に追加します。

物理ベースのレイアウト

では、テーブルの上に何冊か本を配置しましょう。 従来だと、この類の配置(CGでオブジェクトを積み上げる)は非常に非常に面倒でした。 物理ベースのレイアウトを使用することで、これが簡単になります。 物理ベースのレイアウトは、Stage Mangerではまだ対応していないので、Edit LOPを使ってレイアウトを調整します。

  • front Stage Managerを選択して、本をシーンの床の上にドラッグします。

  • 本を複製して、別のバリアントを使用しましょう。Stage MangerでBooksAssetを選択して、それをクリックして、 Duplicate を選択します。

    • 複製したPrimでは、以前に説明したテクニックの1つを使って、別のバリアントに変更します。

    • 積み上げたい本の数だけ繰り返します。

      では、テーブルの上に本を積み上げて行きましょう。

  • Graft Stages LOPにディスプレイフラグを設定します。

  • ビューポート内で、Sを押して選択モードにします。本を選択して、ENTERを押して選択を完了します。

  • ビューポート内で、⇥ Tabを押してタブメニューを開き、editと入力してEnterを押してEditツールを選択します(これは、ネットワークにEdit LOPを接続します)。

  • ビューポート内で、⇧ Shift + Pを押すか、または、何もない空間をクリックして Use Physics を有効にします。

  • これで、本をテーブルの方へ動かすと、その本がテーブルと衝突するはずです。

  • これを繰り返して、本を積み上げます。

仕上げとライティングの追加

これから、背景幕を追加します。

  • Reference LOPを作成しますが、まだ何も接続しないでください。

    • 名前をCycloramaに変更します。

    • 重要: このLOPの名前を変更しなかった場合、以降の他のいくつかの設定を変更しないと、期待したとおりの結果が得られません。

    Reference File

    $HIP/LOPS_DEMO_FILES/Library/Assets/Cyclorama/CycloramaAsset.usd

  • LOPチェーンにGraft Stages LOPを接続します。

    Primitive Path

    /tent_scene/Background

    Primitive Kind

    Group

では、デフォルトのシーケンスライトを追加します。

  • Graft Stages LOPSublayer LOP を接続します(次のチュートリアルでは、レイヤーについてもっと学習します)。

    Sublayer Type

    Sublayer Inputs

  • ビューポート内で、最初のライトの視点になるようにビューを回転させます。

  • LOP Lights and Cameras シェルフタブをクリックしてから、配置したいライトの種類を⌃ Ctrlクリックします。この練習では、1個の Distant Light と1個の Area Light を追加しましょう。

    (シェルフ上のライトツールを⌃ Ctrlを押しながらクリックすると、現行ビューの“視点”でライトが作成されます)

  • 作成したライト毎に以下の設定をします:

    Primitive Path

    /tent_scene/lights/Layout/$OS

    • ライトのタイプがわかるように、ライトノードの名前を変更します(例えば、sunとかfillとかrim)。

  • 必要に応じてライトの強度を調整します。

  • おそらくライトが正しく接続されていません。下図のようにライトを接続します。

    ステージ階層が下図のようになるはずです。 “tent_scene”はアセンブリ、“back”と“front”はグループ、残りがコンポーネントです。

USDを保存

  • USD ROP LOPを接続します。

    Layer Metadata ▸ Default Primitive

    /tent_scene

    Output File

    $HIP/tutorials/TentScene.usd

  • Save to Diskをクリックして、このLOPネットワークから生成されたUSDを保存します。

あなたが作成したレイアウトとデモファイルのレイアウトを比較したい場合、LOPS_DEMO_FILES/Libaray/Layout/FullScene.usdを読み込んでください。

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レンダリング

チュートリアル