Instancer LOP ノードでレンダリング時間を最適化しようとした場合、どの方法が最も RAM 効率が良いでしょうか。
要約:理論的には、一度翻訳されてレンダラー内にロードされれば、性能的にはすべて同じになるはずです。
ポイントインスタンサーの方が一般的にフィードバックが早く、レンダリングを早く開始することができます。しかしその一方で、Hydra がすべてのインスタンスをレンダーデリゲートに送ったならば、そのメソッドは基本的に同じになるはずです。
以下では、異なるメソッドを使用する理由(必ずしもレンダリング最適化による選択ではありません)について検討します。
USD は、インスタンス化可能なプリミティブ(同じ参照の複数のコピーが共有ストレージへのエイリアス)とポイントインスタンス化(USD はポイントとポイントにコピーするプロトタイプを格納しますが、レンダー時、つまりシーンをレンダラーに変換してロードするときのみコピーを描画します)の 2種類のインスタンス化をサポートしています。詳細については、USD の instansing を参照してください。
そのため、最終的には2種類のインスタンス化を行うことになります。ポイントインスタンス化とインスタンス化可能なプリミティブ、またはシーングラフインスタンス化です。
ポイントインスタンス化
これは USD プリミティブです。つまり、ここでは、インスタンスがそれ自体でプリミティブであることを意味します。
球体やライト、カメラがその例で、つまり 1つのプリミティブがすべてのインスタンスを表すということです。
これはレンダラーに読み込まれると展開されます。
オーサリングツールがないため、Solaris 以外ではあまりサポートされていません。しかし、DCC が USD のサポートで成熟するにつれて、これは変わりつつあります。
USD プリミティブとして、USD で動作する他のどの DCC でも理解されます。
Hydra は Point インスタンスを以下の方法よりも高速に処理しますが、レンダラーに取り込まれた後はすべて同じになります。
シーングラフのインスタンス化
注:実際には、Inherit と Specialize はかなり高度でニッチな機能で、めったに使われることはありません。これらは完全性を保つためにここにあるだけで、単純化するために、現時点では無視しても大丈夫です。このため、インスタンス化可能なリファレンスと通常のリファレンスが残されています。
インスタンス化可能なリファレンス
- プリミティブの1つの仮想的な「プロトタイプ」コピーの代わりに複数のプリミティブを作成し、USD はインスタンス化可能なプリミティブをこのマスタープリミティブへの参照とします。
- そして、USD はシーングラフのインスタンス化可能なプリミティブで同一の構成アーク(通常は参照ですが、ペイロード、バリアント選択、継承、特殊化も)に出会うと、自動的にそれらを同一のマスタープリミティブを指すようにします。ポインターのため、これらの複製は非常に小さなスペースしかとりません。
- これらの複製は、オリジナルのソース原型(ステージ上、ディスク上、または参照の円弧を合成したもの)のエコーです。
ネイティブインスタンス(USD ネイティブ)なので、USD を理解する他の DCC でも理解できるため、便利に使えます。
しかし、USD はシーングラフにポインターを置いているので、多少のオーバーヘッドがあります。そして、これが通常ポイントインスタンスがシーングラフインスタンス化より速く「感じる」理由です。
したがって、大量のネイティブインスタンスを使用する場合は、代わりにポイントインスタンスを使用することをお勧めします(何らかの理由で各コピーを変形させる必要がある場合を除く)。
通常のリファレンス
ソースプロトタイプのユニークなコピーです。ポインターではありません。
入力の各ポイントに Reference LOP を使用しているようなものです。これを手動で行うのは非常に面倒なので(つまり、Reference LOP を作成し、アセットをロードし、Transform LOP を作成して、必要な各ポイントに配置する)、メソッドを Reference に設定したインスタンスが、あなたに代わってこれを実行するのです。
そのため、ここでの Reference はより多くのスペースを使用することになります。
しかし、1つの利点は、各コピーを直接修正することができることです。
この点は、ポイントインスタンサよりもシーングラフインスタンサを使用する主な理由に触れています。アセットやモデルは、ショット内のヒーローアニメーションによって変形する可能性が高いので、インスタンス化可能な参照(または、インスタンスが数個しかない場合は、単なる参照)として、アセットの各インスタンスを個別に変更しやすくすることが可能です。
この種の変更は、ポイントインスタンサを使用しても可能ですが、より多くのツールが必要です(Solaris にはありますが、アニメーターがキャラクタアニメーションを行う他の DCC には、まだこの機能がない可能性があります)。
注:メソッドパラメータのドロップダウンメニューは、最も使用頻度の高い順にソートされています。ポイントインスタンスは最も可能性の高い状況、インスタンス可能なリファレンスは Instancer LOP の 2番目に可能性の高い使い方、などです。これは、メソッドの効率に関連しているようなものです。
しかし、それは常に手元のケースに依存するので、必ずしもそうではありません。
例えば、何百万回もインスタンス化するプロトタイプがあり、何も編集する必要がない場合、ポイントインスタンスを使用するのがよいでしょう。
しかし、いくつかのプロトタイプをインスタンス化し、シーンにいくつかのアセットを簡単に配置するためにこの LOP を使用するだけで、手動で配置する手間を省くなら、インスタンス化可能なリファレンスまたは通常のリファレンスが最適な選択かもしれません。パフォーマンスの違いは、便利さと個々のリファレンスを編集する可能性によって相殺されるでしょう。