Houdini18.5 Solaris(USD) トレーニング Part4 USDを用いたHoudiniの操作
はじめに
YouTubeに説明動画をUPしておりますので、併せてご覧ください。
今回のパートは、演習を含んでおります。
今回は演習ファイルは約800MBほどありますのダウンロードの際には空き容量などに注意してしてご活用ください。URLは下記になります。
https://drive.google.com/file/d/1XfgNW3VvYAshnWDbsgRiNw7Zjm0B2aq8/view?usp=sharing
※注:また今回はSideFX社さまより特別な許可をいただきHoudini 18.5に対応したデータを配布させていただいております。
(11月1日追記:URL先に飛んだ際にアクセス権を求める共有状態となってしまっておりました。現在は何もせず演習ファイルをダウンロードできるようになっております。記事をご覧いただいている皆様に、大変ご迷惑をおかけしてしまいましたことをここにお詫び申し上げます。
誠に申し訳ございませんでした。)
■この記事を閲覧される対象の方
・Solaris(USD)について体系的に学習したい方
・Houdini Solarisの導入を検討している方
・ライティング、ルック開発、レイアウトに携わるアーティスト
■記事作成時の情報について
Houdini18.5.462、2021年9月に作成
----------------------------------------------------------------------
5-1.SOPオブジェクトの読み込みとLOP内での作成
■アセットの作成
↓下のリンクから再生すると、実践している部分から再生されます↓
ここでは、LOPネットワークを使用してアセットを作成します。最初に、新規シーンを展開します。Objectネットワーク上でTabキーからGeometryノードを作成します。
Geometryノードをダブルクリックして中に入り、TabキーからBoxを作成しその下にNullノードを追加し、名前をOUT_OBJに変更します。
ウィンドウ上部のプルダウンSolaris インターフェース
メニューから【Solaris】を選択することでデスクトップのモードをSolarisの仕様に変更します。
次に、OtherネットワークからStageを選択します。Stageネットワークに移動すると、先ほど作成したBoxが非表示になっていることが確認できます。
注意:Solaris(Stageネットワーク)での作業は、他のコンテキスト(Obj、Geometryネットワーク)での作業とビューポートが異なります。
SOP Importノードを作成して、パラメーターをいくつか調整します。
■補足:SOP Import LOPとは
SOPネットワークからジオメトリをUSDシーングラフにインポートします。SOPジオメトリをサブレイヤー化(現在のシーンツリーのコンテンツ上に構成)またはリファレンス(シーンツリーの特定のブランチにアタッチ)することによりインポートが可能です。このノードは、インポートされたジオメトリをアクティブなレイヤーに配置することができます。そのため、このノードの出力に接続されたLOPノードによって変更されます。また、ジオメトリ自体に加えて、ジオメトリのHoudiniアトリビュートをUSDプリムバーとしてインポートすることもできます。
SOP Pathの右アイコンをクリックし、先ほど作成したOUT_OBJを指定します。
■LOP内でのSOPのオブジェクトの作成
↓下のリンクから再生すると、実践している部分から再生されます↓
Stageネットワーク内でSOP Createノードを作成します。左下のScene Graph Treeを確認すると作成したオブジェクトを確認することができます。
■補足:SOP Create LOPとは
このノードは中のSOPサブネットワークにジオメトリを作成します。そのため、別のSOPネットワークを必要とせずに、LOPネットワーク内の決められた場所にジオメトリを作成します。
SOP CreateノードをダブルクリックしてGeometryネットワーク内に入り、TabキーからBoxノードを作成します。
Stageネットワークにアクセスすると、ビューポート上にグリッドが表示されたことが確認できます。
5-2.LOP内でのシェーディング
↓下のリンクから再生すると、実践している部分から再生されます↓
SOP Createノードを二つ作成し、片方にBox、片方にSphereを作成します。
二つのオブジェクトは重なってしまっているので、SOP Create(Sphere)のTransformの値を変更し、場所を移動させます。
SOP Createノード(Sphere)の下にMaterial Libraryノードを追加します。
Material LibraryノードをダブルクリックしてMaterialネットワークに入り、PrincipledShaderを2つ作成します。
PrincipledShaderのベースカラー(Base Color)をそれぞれ赤、青に設定します。
■補足:Material Library LOPとは
Material VOPノードをUSDマテリアルプリムとしてインポートします。このノードは、Houdini VOPマテリアルをVOPネットワーク(/matなど)から読み込むことができます。または、USDマテリアルを定義するための場所としてVOPサブネットが含まれています。このノードは、VOPネットワーク内のすべてのマテリアルを自動で読み込むことが可能です。
Stageネットワークに戻り、Auto Fill Materialsをクリックすることで、パラメータ欄にシェーダーパスなどを自動的に割り当て、マテリアル名はMaterial Libraryノードで作成した名前が表示されます。Scene Graph Treeを見ると追加したマテリアルを確認できます。
Scene Graph Tree上でオブジェクトを選択した後、Geometry Pathへドラッグアンドドロップすることでマテリアルを割り当てることができます。また、Scene Graph Tree上でオブジェクトを選択し、Geometry Pathのカーソルアイコンをクリックすることでもマテリアルを割り当てることが可能です。
■補足:マテリアルの適用は、Material LibraryノードのGeometry Path欄でカーソルアイコンをクリックします。そして、ビューポート上でジオメトリを選択してEnterキー押すことでもマテリアルを割り当てることができます。
■シェーダーを追加する方法(サブレイヤー)
↓下のリンクから再生すると、実践している部分から再生されます↓
Box、Sphereを含んだSOP Createノードと、赤と青の情報を持ったPrincipledShaderを2つ含んだMaterial Libraryノードを用意します。
(動画内では前項のノード3つをコピーして使用しました。)
Sublayerノードを作成し、左にSOP Createノード、右にMaterial Libraryノードを連結させます。
■補足:Sublayer LOPとは
USDファイルまたは他のLOPノードからサブレイヤーとして、インポートおよび既存のサブレイヤーを削除/置換/並べ替えます。
SublayerノードのSublayer TypeをSublayer Inputsに変更します。
Sublayerノードの下に、Asign Materialノードを追加します。
Primitevesにsopcreate3(Box)、Material Pathにblueをドラッグアンドドロップして、それぞれの情報を割り当てます。
アサインするマテリアルが複数ある場合は、+マークをクリックします。
Primitevesにsopcreate4(Sphere)、Material Pathにredをドラッグアンドドロップして、それぞれの情報を割り当てます。
■マテリアルがついているオブジェクトを読み込む場合
↓下のリンクから再生すると、実践している部分から再生されます↓
マテリアルがついているオブジェクトをLOP階層で読み込むとマテリアルが剝がれてしまいます。そのためマテリアルを再度アサインする必要があります。
SOP Createノードを作成し、内部でTest Geometryを作成します。
Material Networkからテストジオメトリー内にある作成されているマテリアルを選択し、Auto-fill Materialsをクリックします。
Geometry Pathにsopcreate5をドラッグアンドドロップすることで、マテリアルを割り当てることが出来ました。
5-3.LOP内でのライティング
■Dome Light LOP
Dome Lightのパラメーターです。
・Intensity 発光の強さ
・Exposure 発光の強さ(指数関数)
・Color 環境マップを使用しない場合の発光白
・Texture IBL環境マップとして使用するテクスチャを指定
Dome LightではHDRIによるイメージベースドライティングを行うことができます。
■Light LOP
Lightのパラメーターです。
・Type ライトの形状を選択
・Radius ライトの半径(Cylinder,Disk,Sphere)
・Exposure 発光の強さ(指数関数)
・Intensity 発光の強さ
・Color 環境マップを使用しない場合の発光白
USD Lightには様々な種類があります。
●Cylinder X軸円柱形上から光を放ちます。エンドキャップは光りません。
●Distant Z軸に沿って遠方から放たれる光であり、指向性ライトです。
●Disk 円形ディスクから放たれる光であり、-Z軸方向のみです。
●Point 半径は0の点光源です。
●Rectangle 四角形の平面から放たれる光であり、-Z軸方向のみです。
●Sphere 球形から放たれる光です。
■ライティング実践編
↓下のリンクから再生すると、実践している部分から再生されます↓
Sublayerノードを作成して/Library/Layout/FullScene.usdを読み込みます。
Dome Lightノード、Lightノード、Distant Lightノードを追加します。
Lightノードは、ライトの種類をDistantに変更します。
少数のライトの場合、各々のバランスを計ることは難しくはありませんが、ライトが多い場合、またはノードの位置が異なると調整を行うことが困難です。
解決策として、Light Mixerノードを使用します。これは、複数のライトを1つのパネルで調整することができます。
Light Mixerノードの設定パネルでは左側にあるライト一覧から右側のミキサーパネルにドラッグアンドドロップして並べます。
Light Mixerでは主にSlidersタブにてライトを操作します。
スライダーを操作することでライトの強度を変更することが出来ます。
下の白い四角をクリックすることでライトの色を変更できます。
スライダー上部の黄色の枠で囲まれた部分をクリックすると、そこに該当するライトのON/OFFを変更することが出来ます。
またAttributesタブでは数値でライトの設定することが出来ます。
Transformsタブではライトの位置を数値で設定することが出来ます。
■Sublayerノードを使用したライトの作成
↓下のリンクから再生すると、実践している部分から再生されます↓
前項で説明したようにライトノードを直列で接続した場合、途中のノードを参照しずらくなってしまう場合もあるため、並列でライトノードを接続する方法を説明します。
Dome Lightノード、Lightノード、Distant Lightノードを追加します。
Lightノードは、ライトの種類をDistantに変更しています。
(動画内では前項のノードをコピーして使用しました。)
3つのライトノードをMergeノードを使用して合併させ、Light Mixerノードを追加します。
SubLayerノード(Sublayer3)を作成し、左にシーンを読み込んだSublayerノード(Sublayer1)、右にマージされたライトを接続したLight Mixerノードを接続します。
二つのノードを接続したSublayerノード(Sublayer3)のSublayer TypeをSublayer Inputsに変更します。
この状態にすることで、並列でつなげた状態でLight Mixerノードを使用したライトの設定を変更することが可能になります。
5-4.LOPを使用したシーン構成
■Stage Managerを使用したUSDファイルの読み込み
↓下のリンクから再生すると、実践している部分から再生されます↓
Solarisには、Stage Managerという機能があります。ディスクからアセットを参照し、3D空間上に配置、シーン空間を調整する一連の流れを1カ所で操作することが可能です。Stage Managerを利用した場合、シーンのレイアウト、整理、バリアントの選択にかかる時間を大幅に節約することができます。
※注意:Stage Managerを使用した場合、レイヤースタック内のすべてのレイヤーが結合されます。
最初に、Stageネットワーク上でTabキーからStage Managerノードを作成します。パラメーター左端のファイルブラウザのアイコンをクリックして、プロジェクトファイルの保存先を参照します。
そして最初にアセットを読み込みます。
.usdファイルを選択し、Scene Graph Path上へドラッグアンドドロップします。ドラッグすると、ビューポートにオブジェクトが表示されます。
■USDのレイアウトの方法
↓下のリンクから再生すると、実践している部分から再生されます↓
Scene Graph Pathの右にマニピュレーターアイコンがあります。これを選択して、アセットを移動させることができます。また、Enterキーでハンドルモードに移行し、マニュピレーターを動かすことでアセットを配置することも可能です。
次に、各オブジェクトを配置します。
Sキーを押し、ビューポートのなにも無い部分をクリックします。選択モードにした状態で、TabキーからEditノードを作成します。StageネットワークにEditノードが追加されたことが確認できます。
■補足:Edit LOPとは
ビューアーでプリムをインタラクティブに変換します。物理衝突を使用して、リアリティ感のあるプロップの配置を行うことができます。
Editを選択した状態で、すべてのプリムを選択します。そこからHas Physics Enabled(DOP Networkと同じマーク)にチェックを付けます。
この状態でビューポート上を右クリックして【Use Physics】にチェックを入れます。これでビューポートがPhysicalモードになります。
この状態でマニピュレーターからオブジェクトを操作すると、移動させたオブジェクトが他のオブジェクトに衝突するようになります。
Use Physicsを使用することでよりリアルな配置を容易に行うことができ、この操作はGPUメモリの影響を受けます。
■補足:Shift+PキーからUse Physicsを実行することができます。
■注意:EditノードとStage Managerノードについて
Editノードで編集した後にStage Managerノードへ戻り、Scene Graph Pathの階層を変更すると、プリミティブのパスが変わり、Editノードの編集が無効になります。
■USD LOPを使用したUSDデータの書き出し
↓下のリンクから再生すると、実践している部分から再生されます↓
前項のシーンの続きから始まります。
Edit ノードの下にUSD ROPノードを作成し、接続します。
■補足:USD ROP LOPとは
このノードは、LOPによって生成されたUSDファイルをディスクに書き込む方法です。保存操作は、レイヤー構造と各レイヤーのデータに対して多数の変換を実行します。
USD ROPノードのOutput File右端のカーソルアイコンをクリックして、ここでは「test.usd」という名前でUSDファイルを書き出します。
ファイルを保存した後、パラメーター左上の【Save to Disk】をクリックして、USDファイルを書き出します。
次に、Sublayerノードを作成します。
SublayerノードのパラメーターからSublayer File > File右端カーソルアイコンをクリックして、先ほどUSD ROPノードで書き出したtest.usdファイルを選択します。Sublayerノードにディスプレイフラグをつけると、ビューポート上にオブジェクトが表示されたことが確認できます。
この状態で、前項で説明した手順を踏んでライトの接地を行うことが出来ます。
■LOP階層でのRBDシミュレーション
↓下のリンクから再生すると、実践している部分から再生されます↓
Stageネットワーク上でTabキーよりSOP Createノード(sopcreat1)を作成します。SOP Createノードの中に入り、Geometryネットワーク上でSphereノードを配置します。スフィアのPrimitive TypeをPolygonに変更します。
次に、SOP Createノード(sopcreate2)を作成し、接続します。
SOP Createノードの中に入り、Geometryネットワーク上でGridノードを配置します。
Stageネットワークに戻り、それぞれのSop createノードの名前をSphere、Gridに変更します。
オブジェクトに対してマテリアルを割り当てます。
Material Libraryノードを追加します。ノードの中に入りPrincipled Shaderを2つ作成します。
ここでは、青と赤のシェーダーを作成しています。blueをGroundに割り当て、redをSphereに割り当てています。
次に、Material Libraryノードの下にUSD ROPノードを作成し、接続します。
USD ROPノードのOutput File右端のカーソルアイコンをクリックして、ここではRBD.usdという名前でUSDファイルを書き出します。
ファイルを保存した後、パラメーター左上の【Save to Disk】をクリックして、USDファイルを書き出します。
次に、Sublayerノードを作成し、SublayerノードのパラメーターからSublayer File > File右端カーソルアイコンをクリックして、先ほどUSD ROPノードで書き出したRBD.usdファイルを選択します。
次に、サブレイヤーとして読み込んできたレイアウトファイルに対して、エフェクトを追加します。SOP Modifyノードを作成し接続します。
■補足:SOP Modify LOPとは
このノードは、RBDシミュレーションに基づいた変換のアニメーション化、既存のジオメトリへプリムバーまたはアトリビュートの追加、ジオメトリの破壊、既存のサーフェス上に散在するインスタンスの追加などに使用することができます。ノードの中に入り、LOPネットワークに戻す前にSOPネットワークでソースジオメトリを編集することができます。
SOP ModifyノードのパラメーターからPrimitives右端カーソルアイコンをクリックして、SceneGraphからSphereを選択し、Enterキーを押します。
Unpack USD Primitives to Polygonsにチェックを入れ、SOP Modifyノードの中に入ります(Unpack USD Primitives to Polygons:パックされたUSDプリミティブをポリゴンに変換して、編集を行うためにサブネットワークを介して送信します)。
次に、SOP Modifyノードをダブルクリックしに内部に入り、RBD Material Fractureノードを作成します。ノードは、OUT Putノードの前にくるように配置します。
■補足:ここでExproded ViewノードをRBD Material Fractureノードに接続すると、Sphereがどのように分割されているのか確認することが出来ます。
次に、RBD Bullet Solverノードを作成して、RBD Material Fractureノードの下に配置します。(Exproded Viewノードの下には接続しません)
そして、Grandタブ > Add Grand PlaneからGrand Planeを選択します。
タイムラインからシミュレーションを確認します。
シミュレーション結果は、Stageネットワークでも確認することができます。
---------------------------------------------------------------------
今回のパートは以上となります。
次回Part5では「Karmaを用いたレンダリング」を解説します。
是非ご覧ください。