Houdini19.0 Solarisを用いたレンダリングまでのワークフロー
はじめに
Youtubeにて動画を公開しておりますので、併せてご覧ください。
動画内と同じシーンファイルを配布いたします。
URLは下記になります。
https://drive.google.com/drive/folders/1WzsWoRc56Aq6Pz-oaKRPJ6NcGgLQwAwg?usp=sharing
演習ファイルについての注意:
権利上、当記事ではテクスチャに使用した素材を配布することができません。上記ファイルにはそのデータは含まれておりません。お手数ですが、利用する際は個別にDLサイトからデータをダウンロードしていただくようお願いいたします。
ダウンロード先リンク
https://freepbr.com/
こちらで
「Oak PBR Floorboards 1」
「Rough Brick 1」
「Concrete 3」
「Rich Brown Tile Variation」
「Clay Shingles 1」
と、それぞれ検索し、表示されるテクスチャの一番左上にある項目を先手くし、その中から、UEバージョンのテクスチャをデータをダウンロードください。
配布したhipのデータを開く際には、ダウンロードしたテクスチャをを
「USD_basic_sample > Material」のディレクトリ内に保存してください
※今回使用しているHoudiniのバージョンは「Houdini19.0.498」です。
-------------------------------------------------------
概要
※今回使用しているシーンでは、Topsを使用してキャッシュを一括でとるために「SideFX Labs Tools」のキャッシュノードを使用しています。
そのため、シーン内でキャッシュをとる場合は「SideFX Labs Tools : Ver.19.0.498」をインストールしてください。
従来のSOP等を使用したシーン構成と、Solarisを使用したライティングや
レイアウトのベーシックな手順を解説します。
今回はSOP階層でシミュレーションを行い、そのデータをLOPに読み込み
レイアウト、ライティングを行い、最終的なレンダリングを行うまでのベーシックなフローをご紹介します。
レンダリングまでの流れ
1.SOP→LOPへのデータ読み込み
2.LOP階層でのレイアウト
3.LOP階層でのライティング&カメラ
4.LOP階層でのレンダリング&
ROP階層でのKarmaレンダリング
以上の流れでSOPにて作成したシーンをLOPにてレンダリングします。
それでは、具体的な説明を行います。
SOP→LOPへのデータ読み込み
まず初めに、前提条件として、SOP階層でシーンを作成します。
今回は、以下の画像のように、建物が崩壊し、土埃が舞うシミュレーションを作成しています。
こちらのシーンをLOP階層に読み込みます。
LOP階層へシーンを読み込む際には、複数の方法で読み込むことが可能です。
具体的な読み込み方法について解説していきます。
SOPからLOPへシーンを読み込む際には、2種類のノードが使用可能です。
それが、「SOP Import LOP」と「Scene Import LOP」です。
各ノードは、それぞれ、SOP階層からモデルやシーンを読み込むことが可能なノードです。このノードの差は読み込む対象の範囲の差になります。
「SOP Import LOP」は、
SOP階層からLOP階層に対して、選択した1つのノード
(Geometryノードなどのノード)を読み込むことができます。
しかし、ライトや、カメラなどをLOP階層へ読み込むことはできません。
「Scene Import LOP」は、
SOP階層からLOP階層に対して、選択したSOP階層に存在するすべてのノードを読み込むことが可能です。
こちらは、Houdini19.0より追加されて機能で、SOPで作成したシーンすべてをLOP階層に丸ごと読み込ませることが可能です。
各ノードは、このような機能差があり、「Scene Import LOP」は
「SOP Import LOP」の上位互換の機能となります。
そのため、基本的に、SOP階層からシーンを読み込む際には、
Houdini19.0移行のバージョンをお使いの場合は、
「Scene Import LOP」を使用することをお勧めします。
まず、「SOP Import LOP」のノードは上記のように、
「SOPから1つのノード」を読み込むことが可能です。
これは、もちろん「Geometryノード」を読み込むことも可能ですし、「Geometryノード内の任意のノード」を読み込むことも可能です。
新しくノードを作成し、「SOP Path」のパラメータから任意のノードを選択することで、選択した対象をLOP階層内に読み込むことが可能です。
対象のノードを選択することで、このように、SOP階層で作成したモデルをLOP階層へ読み込むことが可能です。
また、SOP階層からモデルを読み込む際には、アニメーションがついている場合は、自動的にアニメーション付きのデータが読み込まれます。
補足ですが、読み込む対象を選択する際に、SOP階層で作成しているカメラやライトを選択することも可能です。
しかし、カメラを選択してLOP内へ読み込むと、カメラとしてではなく、
オブジェクト(カーブ)としてLOP階層へ読み込まれます。
ここからわかるように、「SOP Import LOP」を使用して、
モデル以外を読み込むことはできません。
また、「SOP Import LOP」を使用して、モデルをSOP階層から
読み込んだ場合は、マテリアルを同時に読み込むことができない場合があります。
その場合は、別で「Assign Material LOP」や「Material Library LOP」などを使用して再度マテリアルをアサインする必要があります。
以上が、「SOP Import LOP」の使用方法です。
「Scene Import LOP」に関しては、過去に詳しく説明している記事がございますので、詳しく機能を確認したい場合は、以下のURLより、過去に公開しております記事をご覧ください。
LOP階層でのレイアウト
次に読み込んだシーンのレイアウトを行います。
まず初めに、LOP階層に対して読み込んだデータのシーングラフの編集を行います。
Solaris内でUSDデータを扱う上で「シーングラフ」の構成は非常に重要になります。
LOP階層でデータを扱う際には、ほとんどの操作でシーングラフより、プリムの指定が必要になります。
今回は、そこまで大規模にLOP階層でシーンを構成しませんが、読み込むプリムが多くなればなるほど、シーンフラフが整理されていない場合は、目的のプリムやディレクトリを指定することが難しくなります。
そのため、シーングラフの整理は、どのようなシーンでも基本的にはキレイに行うことをお勧めします。
もしくは、シーングラフ構成のルールを明確化し、シーングラフを構成するのもシーンフラフ整理には有効になります。
では、実際に、読み込んだシーングラフの編集を行います。
編集を行うために、再度新しく「Scene Import LOP」を2つ作成し、それぞれに対して「model」と「camera」に変更します。
そして、「model」に対してSOP階層から「シミュレーションを行ったモデル」と「背景用の地面」を読み込み、
「camera」に対して「カメラ」を読み込みます。
「Object」の項目内に選択したノードを指定することで、LOP階層に対して別々に読み込むことができますが、このままでは、先ほどのノード1つで読み込んだ際と同じようにシーングラフが作成されます。
「Scene Import LOP」を使用して別々にSOP改装から読み込んだとしても、このようなシーングラフが構成される理由は、「Scene Import LOP」は、
デフォルトのままでは、「シーングラフの最上階層」に対して
プリムが接ぎ木されるためです。
そのため、シーングラフへの接ぎ木位置の設定をしていない場合は、それぞれで読み込んだシーンはシーングラフの最上階層に対して接ぎ木されます。
シーングラフへの接ぎ木位置を変更する場合は、
「Destination Path」に対して任意のパスを指定することで
シーングラフへの接ぎ木位置を変更することができます。
今回は、まず「model」のノードにて読み込んでいる「背景」と「シミュレーションを行っているモデル」の接ぎ木位置を変更します。
「model」のノードを選択し、「Destination Path」に対して
「/models」と入力します。
そして、さらに、このモデルはマテリアルの情報も含んでおり、マテリアルもシーングラフに対して接ぎ木されるため、そちらの接ぎ木位置も合わせて変更します。
そのため、パラメータ下側の「Materials」の項目内の
「Destination Path」対して、「/materials」と入力します。
すると、以下のように、
シーングラフが変更され、大本のシーングラフに対して
新しく「models」と「materials」のディレクトリが作成され、
その中に、それぞれモデルとマテリアルが読み込まれます。
以下の太字になっている部分がシーングラフに追加されたレイヤーです。
root
∟materials
∟obj (SOP階層にて適用されているマテリアル群)
∟○○
∟○○
∟models
∟BG
∟Fruature (崩壊のシミュレーション)
∟Pyro2 (崩壊時の煙のシミュレーション)
実際には以下のようなシーングラフが構成されます。
これで、「model」のノードにて読み込んだシーングラフの編集は終了です。
次に、「camera」のノードで読み込んでいるカメラのシーングラフを編集します。
先ほどと同様に、「camera」のノードを選択し、
パラメータの「Destination Path」に対して
「/cameras」と入力し、パスを編集します。
そうすることで
root
∟cameras
∟cam1
∟cam2
∟materials
∟obj (SOP階層にて適用されているマテリアル群)
∟○○
∟○○
∟models
∟BG
∟Fracture (崩壊のシミュレーション)
∟Pyro2 (崩壊時の煙のシミュレーション)
のように、先ほど作成したシーングラフに対して新しく
「cameras」のディレクトリを追加し、その中に
「cam1」「cam2」のプリムが追加されます
これによって、「モデル」「マテリアル」「カメラ」を
すべて別々のディレクトリに格納したシーングラフを作成できます。
以上が、シーングラフに関する説明と、編集方法です。
今回は特に編集は行いませんが、SOP階層読み込んだシーンを
LOP階層で再度レイアウトすることも可能です。
その際には、「Edit LOP」や「Transform LOP」などによって、
モデル等の位置の編集を行うことが可能です。
またカメラに関しては、「Camera LOP」を「Editモード」に変更し、
シーンの編集を行うことも可能です。
その際には、「primitives」の項目に対して任意のカメラを指定し、
「Action」のパラメータを「Edit」に変更します。
すると、SOP階層で作成したカメラをLOP階層で編集することが可能です。
以上が、LOP階層でのシーン編集方法です。
LOP階層でのライティング&カメラ
次に、LOP階層でのライティング、カメラの設定を行います。
ライトを追加する際には、「SOP階層からライトを読み込む」もしくは「LOP階層で新しく作成する」方法があります。
SOP階層からライトを読み込む際には、「Scene Import LOP」を使用してライトを読み込むことができます。
また、LOP階層でライトを作成する場合には、新しくライトに関するノードを追加する必要があります。
まずは、新しく環境光として新しく「Dome Light LOP」を作成します。
その際に、ノードはそのまま下流に接続することシーングラフへの結合が可能です。
接続をすると以下のようにシーングラフに対してライトが追加されます。
このようにLOP階層でライトを作成するとデフォルトでシーングラフに対して「lights」のディレクトリが作成され、その中に、作成したライトが追加される形でシーングラフが構成されます。
これは、ライト関係のノードのパラメータの「Primitive Path」に対して「/lights/$OS」とシーングラフへプリムを追加する際のパスが設定されているためです。
そのため、先ほどSOP階層から読み込んだ際にシーングラフを編集したようにノードグラフへの結合場所のパスを設定する必要がありません。
今回追加した「Dome Light LOP」はObject階層で言う
「Environment Light LOP」と同様のライトとなります。
このように、LOP階層でライトを追加することが可能です。
そのほかにも、LOP階層で追加することができるライトは複数存在します。
追加可能なライトは、複数のライトが作成可能な「Light LOP」と
無限遠にあるライトを設定可能な「Distance Light LOP」を追加可能です。
LOP階層のライト関係のノードは、デフォルトで「Primitive Path」に対して「/lights/$OS」が入力されているため、ノードを接続すると自動的にシーングラフ内の「lights」内に作成したライトが追加されます。
このように、LOP階層でライトを追加することが可能です。
補足ですが、シーングラフの構成に注意を払うことをお勧めしていますが、接続するノードネットワークも整理しながら追加していくことをお勧めします。
例として、追加したライトが非常に多くなってしまう場合は、ただ単純にノードを直列で接続するのではなく、ネットワークに対してライトのノードをMergeする形でノードをまとめることも可能です。
具体的には、以下の画像のように、作成したライトをすべて
「Merge LOP」にてシーングラフを結合します。
そして、さらに追加した「Merge LOP」とモデル等を読み込んでいる「Scene Import LOP」を「Merge LOP」によって接続します。
そうすることによって、シーングラフは先ほどまでと変わらないままライト関係のノードを別でまとめることができます。
このようにライトを追加することが可能です。
さらに、ライトの編集を行う際には、各ノードにて細かな設定が可能ですが、光量や色などは、「Light Mixer LOP」を使用することでライトを一括で管理することができます。
このように、使用しているライトを一括で操作、編集することが可能となります。
また、上記の「Light Mixer LOP」を使用することで
SOP階層から読み込んだライトを編集することも可能です。
また、SOP改装から読み込んだライトの詳細を変更したい場合は、新しく「Light LOP」を作成し、下流に接続します。
「Action」を「Edit」に変更することで、「Primitive Path」に対して
指定しているライトを編集することも可能です。
このように、LOP階層でライトの編集を行います。
ライトに関しても、過去に詳しく説明している記事がございますので、さらに詳しく機能を確認したい場合は、以下のURLより、過去に公開しております記事をご覧ください。
次に、カメラの設定方法を解説します。
今回は、カメラはすでにSOP階層で作成していますが、この読み込んだカメラをLOP内で編集する方法とLOP内で新しくカメラを作成する方法を紹介します。
LOP階層でカメラを編集、操作するにはどちらも「Camera LOP」が
必要になります。
この「Camera LOP」をノードの下流に接続することで、カメラを作成、操作が可能です。
一度デフォルトの設定のまま、下流に対してノードを接続すると以下の画像のように、シーングラフに対して、新しくカメラが追加されます。
ここでは、新しく加えられたカメラが
「_ > cameras」に対して追加されます。
これは、「Camera LOP」のシーングラフのどの部分に対してプリムを追加するかを決定する「Primitive Path」のパラメータに対して、デフォルトで「/cameras/$OS」と入力されているためです。
さらに、一番最初に、「Scene Import LOP」によってSOP階層からカメラを読み込む際に読み込んだプリムを「cameras」のディレクトリ内に格納しています。
そのため、新しく作成したカメラのデフォルトのパスと作成したディレクトリ名が一致するため、「Scene Import LOP」にて作成したディレクトリ内に追加したカメラが追加されます。
このように作成したカメラは、通常のカメラと同じように操作して、
レイアウトを行うことが可能です。
さらに、このようにカメラを追加するだけでなく、先ほども触れているように、このノードを使用することで、入力されているカメラを操作することができます。
そのためには、「Action」のパラメータを「Edit」に変更する必要があります。
そしてさらに、パラメータを「Edit」に変更したのちに、操作するカメラのプリムを新しく表示される「Primitives」に対して指定する必要があります。
今回は、例として「cam1」を指定するために、シーングラフからドラッグアンドドロップまたは「Primitives」に対して指定するパスを入力します。
そうすることで、指定されたカメラの設定を編集(上書き)することができます。
また、カメラを作成する際には、SOP階層で作成したように、シーンビュー上からも作成可能です。
その際には、シーンビュー右上にあるカメラに関するUIをクリックし、表示される項目から「New Camera」を選択します。
すると以下の画像のように、現在ディスプレイフラグが立っているノードの下流に対して新しいカメラが作成されます。
このように、LOP階層でカメラを追加、編集を行い、
シーンのレイアウトが可能です。
LOP階層&ROP階層でのレンダリング
次に、LOP階層でのレンダリング方法を解説します。
LOP階層でレンダリングを行う場合は、デフォルトでは2種類のレンダリング方法があります。
それが、
・「Karma LOP」を使用したレンダリング
・「USD Render ROP LOP」を使用したレンダリング
の2種類です。
「Karma LOP」を使用したレンダリングでは、通常のレンダリングに加え、α版として「XPU」を使用したレンダリングが可能です。
「USD Render ROP LOP」を使用したレンダリングの場合は、
「Karma」に加え、その他のサードパーティ製のレンダラーを使用して
レンダリングを行うことが可能です。
レンダーノードに関して、過去に詳しく説明している記事が
ございますので、詳しく機能を確認したい場合は、以下のURLより、
過去に公開しております記事をご覧ください。
最後に、「LOP階層」ではなく、「ROP階層」で「Karma」を使用する方法を解説します。
ROP階層でKarmaを使用する場合は、ほとんどMantraと同じ方法で使用可能です。
まず、ROP階層で「Karma ROP」を作成します。
この「ROP階層のKarmaノード」は「LOP階層のKarmaノード」と
同様の設定が可能です。
LOP階層で使用していた「Karma LOP」のように各種設定を行い、
「Render to Disk」を選択することで「Geometry」階層で作成した
シーンを「Karma」を使用してレンダリングすることが可能です。
しかし、ここで操作をしているシーンは「LOP」階層ではなく
「ROP」階層のため、シーンビューレンダーを使用することができません。
この「ROP階層のKarma」を使用している際にシーンビューレンダーを
使用するにはノードのパラメータの「Karma Viewport」のボタンを
選択すると以下の画像のように新しいウィンドウが開かれ
LOP階層のように左側にシーンビューレンダー、
右側にレンダリング設定が可能となります。
ここで、レンダリングの各種設定を行い、「Render to Disk」を
クリックすることでこちらのウィンドウからもレンダリングを
行うことが可能です。
補足ですが、ROP階層でシーンビューレンダーを使用することができるのは「ROP階層のKarmaノード」内がLOP階層で構成されているためです。
ノードをダブルクリックし中に入ると以下の画像のように、
「Output」の階層にとなり、その中に「lopnet」のノードがあります。
そしてさらにその「lopnet」のノードをダブルクリックすると
「Solaris」(LOP)階層に移動し、その中にLOPのシーンが組まれています。
このノードを確認してみると「Scene Import LOP」を使用して
SOP階層からのシーンやカメラ、ライトなどをすべてインポートし、下流の「Karma LOP」にてレンダリングを行います。
この「Karma LOP」のすべての設定が先ほどの
「Karma ROP」とリンクしています。
それによって、ROP階層でLOP階層のKarmaを使用することが可能になっています。
このように、LOP階層にてシーン構成を行わずとも
ROP階層にてKarmaを使用することが可能です。
さらに、このROP階層のKarmaはLOP階層のKarmaとは異なる点があります。
そちらはノード内に「Objects」のタブが追加されています。
LOP階層のKarmaではレンダリング対象のオブジェクトを選択するには「Karma LOP」とは別にノードを使用して対象のプリムを選択する必要があります。
しかし、ROP階層のKarmaでは「Objects」のタブにて
レンダリングしたい対象のオブジェクトやライト等を選択することで、Mantraのように対象のみをレンダリングすることが可能となります。
このように、LOP階層でKarmaを使用せずともROP階層でKarmaを使用することでLOP階層と同様にレンダリングを行うことが可能です。
---------------------------------------------------------------------
今回の記事はここまでとなります。
閲覧していただきありがとうございました。