見出し画像

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に対応したデータを配布させていただいております。

スライド2

----------------------------------------------------------------------

Solarisについて

スライド2

SolarisとはHoudiniに属しているUSDサポートツールの総称です。Houdini18.0以降から追加されました。ルック開発、レイアウト、ライティングの一連のワークフローや、レンダリングの効率化に影響を与えます。

USDについて

スライド3

USDはPixar Animation Studiosによって開発されたシーングラフ構造を扱うライブラリの総称になります。USDライブラリ自体にはシーングラフを記述するフォーマットとして.usd、そのほかの付随するフォーマットがあります。
この.usd、API(Hydraレンダーデリゲート)、その他のモジュールの3つの要素からライブラリが構築されています。

シーン記述フォーマット(.usd)

スライド5

.usdは、プロシージャルシーングラフと呼ばれる、複数のUSDファイルをプロシージャルに合成して1つのシーングラフとして構築することが出来ます。そのため非破壊的にシーンを構築をすることが可能となります。複数のUSDファイルを組み合わせ、最終的に1つのUSDファイルとしてまとめて出力することも可能です。

スライド6

SolarisではStageと呼ばれるエディターがあります。このStageがシーングラフの編集場所になります。Stage上ではそれぞれのノードがシーングラフの1部であり、USDになります。

API(Hydraレンダーデリゲート)

スライド8

Solaris上でRenderManによるビューポートレンダリングが行えるようになったのはVer.23.0以降になります。

05_Solaris&RfH24.00_03_10_22.静止画001

Solaris上では複数のレンダラーが用意されており、ビューポート上で切り替えることが可能となっています。

Hydraレンダーデリゲート自体はレンダラーではありません。
前述のように複数のレンダラーを併用できるようにするためのものであり、USDとレンダラーを繋ぐものがこのAPI(Hydraレンダーデリゲート)だと言えます。
なので特定のレンダラーがUSDファイルを扱えるかどうかは、Hydraレンダーデリゲートに対応したレンダラーかどうかによって決まります。

RfH24とSolaris

スライド9

RenderManはHydraレンダーデリゲートに対応したレンダラーの中で、唯一プロダクションによって開発されているレンダラーとなります。またUSDの開発元と同じであるので、レンダラーとして最適化もされています。
またXPUが導入され、CPUとGPUのハイブリッドレンダリングの実行が可能になり、加えてCPUとGPUのスイッチを切り替えることも出来るので、非破壊的なデータをより効率的に、プロダクションレベルでレンダリングをすることが可能となります。

ビューポートレンダリングの実践

スライド10

↓下のリンクから再生すると、実践している部分から再生されます↓

まずレンダリングを行う前にUSDファイルを作成する必要があります。
Objにてオブジェクトを作成し、Stageに移動します。

05_Solaris&RfH24.00_05_49_23.静止画004

Houdini上で作成したオブジェクトをSoralisに読み込みます。
読み込む際はSOP Import LOPを使用します。
USDを扱うSoralis上の編集場所をStage、その中で使うノードやオペレータのことをライティングオペレータと言います。

05_Solaris&RfH24.00_06_01_12.静止画005

■補足:SOP Import LOPとは SOPネットワークからジオメトリをUSDシーングラフにインポートします。SOPジオメトリをサブレイヤー化(現在のシーンツリーのコンテンツ上に構成)またはリファレンス(シーンツリーの特定のブランチにアタッチ)することによりインポートが可能です。このノードは、インポートされたジオメトリをアクティブなレイヤーに配置することができます。そのため、このノードの出力に接続されたLOPノードによって変更されます。また、ジオメトリ自体に加えて、ジオメトリのHoudiniアトリビュートをUSDプリムバーとしてインポートすることもできます。

USDでは、シーン内のジオメトリ、ライト、カメラ、マテリアル等をUSDファイルとして書き出すことが出来ます。

■RenderManをビューポートで利用するために

USDによるレイアウトを行う前に、一つ一つのモデルに対してグループの割り当てマテリアルの適応を行う必要があります。
またRenderManをビューポート上で利用するにあたり、マテリアルをRenderManレンダリング用に作成しなおす必要があります。

05_Solaris&RfH24.00_07_54_15.静止画006

■レンダラーの切り替え

Karmaなと複数のレンダラーを併用してビューポート上で確認を行えるようにするためには、Collectノードを使用して、最終的なアウトプットとして設定します。

05_Solaris&RfH24.00_08_13_00.静止画007

これにより複数のシェーダーをまとめることが出来ます。
このような接続の形をとることで、複数のレンダラー上で結果を確認することが出来ます。

05_Solaris&RfH24.00_09_17_12.静止画009

この設定をシーン内に配置するオブジェクトすべてに対して行う必要があります。
これらすべてをUSDファイルとして出力した後、シーン内に読み込んでいきます。

05_Solaris&RfH24.00_10_00_13.静止画010

■USDファイルの読み込みとレイアウト

USDファイルを読み込む場合はLoad Layer For Editingノードを使用し、
リファレンスノード、Stage Managerノードと接続していき、一つのシーンを構築します。

05_Solaris&RfH24.00_10_09_13.静止画011

■補足:Stage Managerノード
USDファイルを読み込み、システムがすべてのレイヤー(ディスク上の各.usd / .usda / .usdcファイル)をまとめてプリミティブの最終シーングラフを計算する場合、その結果はステージと呼ばれます。Houdiniでは通常「シーン」と呼ばれます。
.usdファイルを「トップレベル」ファイルとして読み込んだ場合、ステージが作成されます。 Houdiniでは、ネットワークの最上部にあるLOPノードがステージを作成します。
■補足:リファレンスノード
USDファイルを単一のシーングラフに結合します。
リファレンスは、個々の小さなアセットを大きなシーンに"graft(接ぎ木)"させるのに役立ちます。 特に、 リファレンスは、同じファイルを何回も別々の場所に読み込むことができる唯一の方法です (サブレイヤー化はツリー全体に対して動作するので、同じファイルを何回もサブレイヤー化しても何の効果もありません)。
リファレンスに関するもう1つの重要な点は、ファイル内の単一のプリミティブを常に参照する必要があり、そのプリミティブをルート( "/")にすることはできないということです。
他のレイヤーから参照されることを意図したレイヤーを作成する場合、単一のルートプリミティブを提供し、シーングラフ全体をこの1つのルートプリミティブの下に配置することを推奨します。
参照する場合は、常に1つのファイルの1つのプリミティブをリファレンスシーングラフの既存のプリミティブのネームスペースにリファレンスします。

別のシェルフ(棚)のシーンをリファレンスノード(もしくはMergeノード)で接続します。

05_Solaris&RfH24.00_10_57_05.静止画013

この時左下のシーングラフツリーを見ると、シェルフはwall_partに内包される親子関係となっています。

05_Solaris&RfH24.00_11_08_19.静止画012

ボトルのみで構成されたシーンも、同じ手順で3段分接続します。

05_Solaris&RfH24.00_11_14_00.静止画016

05_Solaris&RfH24.00_11_38_15.静止画015

この後も、リファレンスノードを使用してUSDファイルの読み込み、トランスフォームによる配置を繰り返していき、全てのモデルを配置します。

05_Solaris&RfH24.00_11_58_09.静止画018

05_Solaris&RfH24.00_12_03_12.静止画019

■ライトとカメラの設置

全てのモデルデータの配置が終了したら、ライトとカメラの設定を行っていきます。
シェルフ用のライトを1つ作成し、Dupulicate(複製)し縦横4つ配置します。

05_Solaris&RfH24.00_12_30_22.静止画020

ライトの明るさなどの設定は、Base Propertiesタブの中から行えます。

05_Solaris&RfH24.00_12_36_09.静止画021

またRenderManがインストールされている場合、ライトの制御項目にRenderMan RISの項目が用意されています。
またレンダリングの時のために、ライトのTypeをRectangleに変更しておく必要があります。

05_Solaris&RfH24.00_12_55_22.静止画023

これは、ほかのTypeでレンダリングすると、ライトの形状が反映されてしまうからです。

05_Solaris&RfH24.00_13_12_00.静止画024

ライトのセッティングが終了したら、最後にカメラを配置します。

05_Solaris&RfH24.00_13_28_18.静止画026

■レンダリングの速度について

レンダリング結果は、マシンの性能など環境によっと速度が変わってきます。またライトの多いシーンとなると、XPUで動作させようとするとメモリを多く消費する傾向にあるとみられます。
またXPUモードレンダリングを行った際であっても、CPUの処理が100%を示す場合があります。一通りビューポート上で終息すると使用率は下がります。

05_Solaris&RfH24.00_14_11_00.静止画027

また、Soralis上のレンダリングにおいて、RenderMan RISのレンダラーでLive StatisticのAttach to Renderを押して接続を行おうとしても、応答はしません。

05_Solaris&RfH24.00_14_35_16.静止画028

■RenderManROPノード

RenderManを用いてレンダリングを行おうとする際には、RenderManROPノードが用意されています。このノードを使用することで、Houdini上でレンダリングを行うときと同様に、連番の書き出し先、レンダリングに使うカメラの選択、解像度の設定などを設定し、レンダリングを行うことが出来ます。

05_Solaris&RfH24.00_15_08_18.静止画029

またRenderMan Integraterを変更することで、Integrateを切り替えることが出来ます。それ以外は、通常のROPノードと同じようにサンプリングや、AOVの出力にも対応しています。

05_Solaris&RfH24.00_15_21_00.静止画030

Soralisのレンダリングについてまとめた記事も公開しております。
ぜひご参照ください。

---------------------------------------------------------------------

今回の記事はここまでとなります。
閲覧していただきありがとうございました。

この記事が気に入ったらサポートをしてみませんか?