Houdini/SolarisでUSDを用いたRenderMan 24でのレンダリング手法
はじめに
YouTubeに説明動画をUPしておりますので、併せてご覧ください。
本トレーニングは、演習を含んでおります。
演習ファイルは約2.7GBほどありますのダウンロードの際には空き容量などに注意してしてご活用ください。URLは下記になります。
https://drive.google.com/drive/folders/1n4feYe88ONcGKDebm28vjayarfzXVpDB?usp=sharing
※注1:RenderManがインストールされていないと演習ファイルが正しく機能しない場合がございます。
※注2:また今回はSideFX社さまより特別な許可をいただきHoudini 18.5に対応したデータを配布させていただいております。
----------------------------------------------------------------------
Solarisについて
SolarisとはHoudiniに属しているUSDサポートツールの総称です。Houdini18.0以降から追加されました。ルック開発、レイアウト、ライティングの一連のワークフローや、レンダリングの効率化に影響を与えます。
USDについて
USDはPixar Animation Studiosによって開発されたシーングラフ構造を扱うライブラリの総称になります。USDライブラリ自体にはシーングラフを記述するフォーマットとして.usd、そのほかの付随するフォーマットがあります。
この.usd、API(Hydraレンダーデリゲート)、その他のモジュールの3つの要素からライブラリが構築されています。
シーン記述フォーマット(.usd)
.usdは、プロシージャルシーングラフと呼ばれる、複数のUSDファイルをプロシージャルに合成して1つのシーングラフとして構築することが出来ます。そのため非破壊的にシーンを構築をすることが可能となります。複数のUSDファイルを組み合わせ、最終的に1つのUSDファイルとしてまとめて出力することも可能です。
SolarisではStageと呼ばれるエディターがあります。このStageがシーングラフの編集場所になります。Stage上ではそれぞれのノードがシーングラフの1部であり、USDになります。
API(Hydraレンダーデリゲート)
Solaris上でRenderManによるビューポートレンダリングが行えるようになったのはVer.23.0以降になります。
Solaris上では複数のレンダラーが用意されており、ビューポート上で切り替えることが可能となっています。
Hydraレンダーデリゲート自体はレンダラーではありません。
前述のように複数のレンダラーを併用できるようにするためのものであり、USDとレンダラーを繋ぐものがこのAPI(Hydraレンダーデリゲート)だと言えます。
なので特定のレンダラーがUSDファイルを扱えるかどうかは、Hydraレンダーデリゲートに対応したレンダラーかどうかによって決まります。
RfH24とSolaris
RenderManはHydraレンダーデリゲートに対応したレンダラーの中で、唯一プロダクションによって開発されているレンダラーとなります。またUSDの開発元と同じであるので、レンダラーとして最適化もされています。
またXPUが導入され、CPUとGPUのハイブリッドレンダリングの実行が可能になり、加えてCPUとGPUのスイッチを切り替えることも出来るので、非破壊的なデータをより効率的に、プロダクションレベルでレンダリングをすることが可能となります。
ビューポートレンダリングの実践
↓下のリンクから再生すると、実践している部分から再生されます↓
まずレンダリングを行う前にUSDファイルを作成する必要があります。
Objにてオブジェクトを作成し、Stageに移動します。
Houdini上で作成したオブジェクトをSoralisに読み込みます。
読み込む際はSOP Import LOPを使用します。
USDを扱うSoralis上の編集場所をStage、その中で使うノードやオペレータのことをライティングオペレータと言います。
■補足:SOP Import LOPとは SOPネットワークからジオメトリをUSDシーングラフにインポートします。SOPジオメトリをサブレイヤー化(現在のシーンツリーのコンテンツ上に構成)またはリファレンス(シーンツリーの特定のブランチにアタッチ)することによりインポートが可能です。このノードは、インポートされたジオメトリをアクティブなレイヤーに配置することができます。そのため、このノードの出力に接続されたLOPノードによって変更されます。また、ジオメトリ自体に加えて、ジオメトリのHoudiniアトリビュートをUSDプリムバーとしてインポートすることもできます。
USDでは、シーン内のジオメトリ、ライト、カメラ、マテリアル等をUSDファイルとして書き出すことが出来ます。
■RenderManをビューポートで利用するために
USDによるレイアウトを行う前に、一つ一つのモデルに対してグループの割り当てとマテリアルの適応を行う必要があります。
またRenderManをビューポート上で利用するにあたり、マテリアルをRenderManレンダリング用に作成しなおす必要があります。
■レンダラーの切り替え
Karmaなと複数のレンダラーを併用してビューポート上で確認を行えるようにするためには、Collectノードを使用して、最終的なアウトプットとして設定します。
これにより複数のシェーダーをまとめることが出来ます。
このような接続の形をとることで、複数のレンダラー上で結果を確認することが出来ます。
この設定をシーン内に配置するオブジェクトすべてに対して行う必要があります。
これらすべてをUSDファイルとして出力した後、シーン内に読み込んでいきます。
■USDファイルの読み込みとレイアウト
USDファイルを読み込む場合はLoad Layer For Editingノードを使用し、
リファレンスノード、Stage Managerノードと接続していき、一つのシーンを構築します。
■補足:Stage Managerノード
USDファイルを読み込み、システムがすべてのレイヤー(ディスク上の各.usd / .usda / .usdcファイル)をまとめてプリミティブの最終シーングラフを計算する場合、その結果はステージと呼ばれます。Houdiniでは通常「シーン」と呼ばれます。
.usdファイルを「トップレベル」ファイルとして読み込んだ場合、ステージが作成されます。 Houdiniでは、ネットワークの最上部にあるLOPノードがステージを作成します。
■補足:リファレンスノード
USDファイルを単一のシーングラフに結合します。
リファレンスは、個々の小さなアセットを大きなシーンに"graft(接ぎ木)"させるのに役立ちます。 特に、 リファレンスは、同じファイルを何回も別々の場所に読み込むことができる唯一の方法です (サブレイヤー化はツリー全体に対して動作するので、同じファイルを何回もサブレイヤー化しても何の効果もありません)。
リファレンスに関するもう1つの重要な点は、ファイル内の単一のプリミティブを常に参照する必要があり、そのプリミティブをルート( "/")にすることはできないということです。
他のレイヤーから参照されることを意図したレイヤーを作成する場合、単一のルートプリミティブを提供し、シーングラフ全体をこの1つのルートプリミティブの下に配置することを推奨します。
参照する場合は、常に1つのファイルの1つのプリミティブをリファレンスシーングラフの既存のプリミティブのネームスペースにリファレンスします。
別のシェルフ(棚)のシーンをリファレンスノード(もしくはMergeノード)で接続します。
この時左下のシーングラフツリーを見ると、シェルフはwall_partに内包される親子関係となっています。
ボトルのみで構成されたシーンも、同じ手順で3段分接続します。
この後も、リファレンスノードを使用してUSDファイルの読み込み、トランスフォームによる配置を繰り返していき、全てのモデルを配置します。
■ライトとカメラの設置
全てのモデルデータの配置が終了したら、ライトとカメラの設定を行っていきます。
シェルフ用のライトを1つ作成し、Dupulicate(複製)し縦横4つ配置します。
ライトの明るさなどの設定は、Base Propertiesタブの中から行えます。
またRenderManがインストールされている場合、ライトの制御項目にRenderMan RISの項目が用意されています。
またレンダリングの時のために、ライトのTypeをRectangleに変更しておく必要があります。
これは、ほかのTypeでレンダリングすると、ライトの形状が反映されてしまうからです。
ライトのセッティングが終了したら、最後にカメラを配置します。
■レンダリングの速度について
レンダリング結果は、マシンの性能など環境によっと速度が変わってきます。またライトの多いシーンとなると、XPUで動作させようとするとメモリを多く消費する傾向にあるとみられます。
またXPUモードレンダリングを行った際であっても、CPUの処理が100%を示す場合があります。一通りビューポート上で終息すると使用率は下がります。
また、Soralis上のレンダリングにおいて、RenderMan RISのレンダラーでLive StatisticのAttach to Renderを押して接続を行おうとしても、応答はしません。
■RenderManROPノード
RenderManを用いてレンダリングを行おうとする際には、RenderManROPノードが用意されています。このノードを使用することで、Houdini上でレンダリングを行うときと同様に、連番の書き出し先、レンダリングに使うカメラの選択、解像度の設定などを設定し、レンダリングを行うことが出来ます。
またRenderMan Integraterを変更することで、Integrateを切り替えることが出来ます。それ以外は、通常のROPノードと同じようにサンプリングや、AOVの出力にも対応しています。
Soralisのレンダリングについてまとめた記事も公開しております。
ぜひご参照ください。
---------------------------------------------------------------------
今回の記事はここまでとなります。
閲覧していただきありがとうございました。
この記事が気に入ったらサポートをしてみませんか?