の新機能Katana 3.5

前書き

このドキュメントでは、 Katana 3.5。これらの変更は次のとおりです。

  • Geolib3-MT:これはGeolib3の進化です- Katanaのシーングラフ処理エンジン-ネイティブのマルチスレッドシーングラフ拡張を提供します。Geolib3-MTプロジェクトの目標は次のとおりです。
    • 最新のマルチコアシステムで利用可能なリソースを完全に活用するため。
    • 共有されたインテリジェントなキャッシングテクノロジーを提供して、シーングラフのトラバース中にメモリリソースをより適切に管理します。
    • 最初のピクセルまでの時間(TTFP)を短縮し、アーティストがショットを効率的に反復し、タイムリーなフィードバックを受信できるようにします。
    • UIパフォーマンスの向上によりアーティストの生産性を向上させる。
  • 分析およびプロファイリングツールが提供され、ユーザーが特定の時間コストが最も高いOpをデバッグするのに役立ちますKatanaセッション。
  • 多数のロケーションが作成されるシーンのパフォーマンスを改善する、最適化されたキーワークフロー。
  • 私たちは現在、USD 19.11に基づいてUSDプラグインを構築して出荷しています。 plugins / Resources / Usd /の一部としてのディレクトリKatanaインストール。USDプラグインをオプトインする方法のドキュメントが追加されましたKatana新しい形式の開発者ガイドプラグインの作成> Katana USDプラグインセクション。このセクションでは、現在同梱されているUSDプラグインの違いについても概説しています。 Katana Pixar USDリポジトリにあるものから。
  • 実験的なモニターレイヤー機能は、 ビューアー(Hydra)タブ。トグルボタン、トグルメニュー項目、またはキーボードショートカット( `)を使用してオン/オフを切り替えることができます。モニターレイヤーを使用すると、ビューアーに表示されるシーンにオーバーレイされたレンダーを表示できます。
  • 新しいコマンドラインオプション: -再利用レンダリングプロセス追加されました。走るときKatanaこのオプションをオンにしたバッチモードでは、フレームごとに新しいレンダーブートプロセスを起動するのではなく、レンダープラグインをホストするレンダーブートの単一インスタンスで複数のフレームがレンダーされます。このオプションを使用すると、フレームのレンダリングシーケンスのパフォーマンスが大幅に向上します。これは、レンダリングプラグインおよびその他すべてのKatanaプラグインはフレームごとにリロードする必要はありません。

Geolib3-MTランタイム

Katanaノードグラフ、Opツリー、およびその後作成されるシーンは、非常に柔軟で多様です。これらのシーンを最適に評価するには、評価エンジンは、使用して作成できるシーンの多様性と複雑性を処理するのに十分な効率と柔軟性の両方を備えている必要がありますKatana。Geolib3-MT、次世代のKatanaシーングラフ処理エンジンは、Geolib3の以前のバージョンよりも高度な構成、イントロスペクション、およびチューニングオプションを提供し、ますます複雑で多様なワークロードの要求に応えます。このセクションでは、これらのオプションのいくつかと、シーントラバーサルのパフォーマンスを改善するためにそれらをどのように活用できるかを検討します。

構成

Geolib3-MTは、RenderSettingsノードを介して構成できます。すべてのGeolib3-MTオプションは、 sceneTraversal見出し。

sceneTraversal.maxCores

シーントラバーサルフェーズでGeolib3-MTが使用する論理コアの数を決定します。以前のバージョンとは異なり、Geolib3-MTは内部スレッドプールを使用してシーンの横断時間を改善します。次の図は、Geolib3-MTと以前のバージョンの違いを示していますKatana

注意:デフォルト値(0)により、Geolib3-MTはホストコンピューターで利用可能なすべての論理コアを使用します。コアのGeolib3-MT処理エンジンは、コアの数が増えるにつれて適切にスケーリングしますが、Opツリー内の個々のOpは同じスケーリング特性を示さない場合があります。その結果、スレッドの増加は、シーンの横断時間の増加(減少ではなく)になる可能性があります。この場合、新しいプロファイリングツールはKatana 3.5を使用して、これらのOpを識別し、動作をリファクタリング/最適化できます。「スレッドセーフでない」とマークされたOpsでも同じことが言えます。これらは、シーン実行のスケーラビリティをさらに制限するグローバル実行ロック(GEL)の取得を必要とするためです。

sceneTraversal.opTreeOptimizations

Geolib3-MTは前処理ステップを実行し、Opツリーのトポロジを調べて、最適化される可能性のある構造を特定できます。そのような最適化の1つは、同じタイプのOpのシーケンスをそのOpの単一インスタンスに折りたたむことです。これには多くの利点がありますが、

  • 関数呼び出しのオーバーヘッドの削減-シーングラフの場所をクックするためのOpのスケジューリングにかかるコストがわずかです。同様のOpsのチェーンを組み合わせることにより、この関数呼び出しのオーバーヘッドを減らすことができます。
  • メモリフットプリントの削減-10個のOpのチェーンは、キャッシュサブシステムで10個の別個のクック結果を占有し、正常に折りたたまれたOpチェーンは、場所ごとに1個のクック結果のみを占有します。

注意:Opツリー最適化パスは実験的な機能であるため、デフォルトではオフになっています。RenderSettingsノードのsceneTraversal.opTreeOptimizaionsオプションを使用して有効にできます。

さらに詳しい情報

Opツリーオプティマイザーは、呼び出した場合、同じタイプのOpのチェーンを折りたたみますGeolibSetupInterface :: setOpsCollapsible()間にセットアップ() コール。この関数の呼び出し元は、Geolib3がOpに渡す属性の名前を指定する必要がありますクック() Op引数として呼び出します。この属性には、折りたたまれたOpsの引数を含む属性の順序付き配列(上流Opから下流Opの順序)が含まれます。その後、Opは、必要に応じてこの「バッチ」Op引数を処理できます。

sceneTraversal.verboseLogging

大量の情報メッセージがレンダリングログをいっぱいにしないようにするため、Geolib3-MTはデフォルトでパフォーマンスに関連するメッセージをログに記録しません。これらのメッセージを有効にするには、 sceneTraversal.verboseLogging RenderSettingsノードのオプション。現在、これらのメッセージには次の情報が含まれています。

  • 有効になっている場合、Opツリーオプティマイザーによって適用できなかった最適化。
  • キャッシュエビクション後にキャッシュサブシステムによって使用されるメモリ。

sceneTraversal.cacheグループ

Geolib3-MTには、キャッシュサブシステムの動作を制御する多くの設定が含まれています。キャッシングサブシステムは、「クック結果」として知られる、以前にクックされたシーングラフの場所の保存と取得を行います。これらの設定は、プロジェクトごとにRenderSettingsノードから変更できます。実稼働規模のシーンに対するテストに基づいて、適切なデフォルトが提供されています。各設定の詳細については、以下をご覧ください。

  • sceneTraversal.cache.cacheEviction -デフォルトでオン。オフにすると、クック結果はキャッシュから削除されません。最初はキャッシュエビクションをオフにするのは直感に反するように思えるかもしれませんが、これが適切なシーンがいくつか存在する場合があります。特に、レンダラーが必要とするシーンとデータ構造のサイズがメモリに快適に収まる場合。レンダリングのシーン生成フェーズが完了すると、Geolib3-MTのクック結果で占有されているメモリページにアクセスできなくなり、ディスクへのページングの対象になります。レンダリング中にメインメモリに再ページングされるため、パフォーマンスの低下は最小限です。
  • sceneTraversal.cache.cacheSoftLimit -キャッシュエビクションがオンになっている場合、ソフト制限は、最も最近使用されたエビクションポリシーを使用してエントリがエビクトされる前に、ローカルキャッシュに保存されるクック結果の数を管理します。注:これらのエントリはローカルキャッシュから削除される可能性がありますが、他の多くのローカルキャッシュまたはセントラル(共有キャッシュ)間で共有される場合があります。その場合、エントリのメモリはすぐには再利用されません。
  • sceneTraversal.cache.collectionFrequency -キャッシュエビクションがオンの場合、収集頻度は収集サイクル間の時間をミリ秒単位で制御します。収集サイクル中に、Geolib3-MTは前回の収集サイクル以降に削除されたすべてのキャッシュエントリを収集し、クック結果が使用されなくなった場合は、クック結果のメモリを削除して回収します。

さらに詳しい情報

キャッシング、およびメモリ使用量と最初のピクセルまでの時間のトレードオフは、シーントラバーサル時間とレンダリングのパフォーマンスに大きな影響を与える可能性があります。Geolib3-MTが提供する設定を使用すると、レンダリングのシーントラバースフェーズ中にメモリフットプリントを調整することができます。これらのシーンを試してみるときの考慮事項を次に示します。

  • シーングラフとOpツリーの最大の深さを考慮してください。キャッシュソフト制限は、スレッドごとに最近使用したクック結果のサイズを制御します。つまり、特定のスレッドで調理された場所、または調理プロセス中にアクセスされた場所(経由など) getAttr())はローカルキャッシュに保存され、次の値に基づいて削除されます。 sceneTraversal.cache.cacheSoftLimit。
  • 収集頻度の間隔を短くすると、クックの結果がより積極的に排除され、メモリフットプリントが減少しますが、シーンの走査時間が犠牲になる可能性があります。

sceneTraversal.useCachePrepopulation

オンにすると、Geolib3-MTは、内部キャッシュに入力されるシーングラフの走査を実行します。このトラバースの範囲は、以下の設定によって制御できます。 sceneTraversal.cachePrepopulation以下で説明します。

  • sceneTraversal.cachePrepopulation.preCookSourceOps -デフォルトでオフになっています。オンにすると、Geolib3-MTは最初にOpツリーで見つかったソースOpによって生成されたシーンを完全にトラバースします。ソースOpは、入力のないOpとして分類されます。この設定は、ジオメトリキャッシュまたは他のアセットタイプでロードするときに利点を提供できます。経験的なテストにより、ソースOpsには通常何らかのプルーニング操作が続くことがわかっています。その結果、これらの場合、ソースOpの事前調理により、必要以上のシーングラフの場所が生成される可能性があり、メモリ消費と走査時間が増加する可能性があります。
  • sceneTraversal.cachePrepopulation.preCookKeyOps -デフォルトでオンになっているGeolib3-MTは、並行して評価できるOpツリー内のOpsを識別します。これの明白な例はマージ操作です。この場合、Geolib3-MTは各ブランチを並行して評価し、シーンの横断時間を短縮することができます。
  • sceneTraversal.cachePrepopulation.preCookAllLocations -デフォルトでオンになっている場合、Geolib3-MTは残りのすべてのシーングラフの場所をクックし、シーンを完全に展開します。

上記の設定の値に基づいて、キャッシュの事前設定フェーズが完了すると、Geolib3-MTキャッシュにはシーングラフ全体またはそのサブセクションが事前に設定されます。Geolib3-MTは最適化されており、既存のFnScenegraphIteratorこのキャッシュのAPI。このキャッシュは、スケーラブルでスレッドセーフなキャッシュであるため、レンダラープラグインライターがこのキャッシュに同時にアクセスして、シーンビルドフェーズのパフォーマンスを向上させることをお勧めします。

注:Geolib3-MTキャッシュが完全に読み込まれていない場合、キャッシュアクセス(経由FnScenegraphIterator)はキャッシュミスになります。この場合、要求された場所は呼び出しスレッドを使用してクックされます。

APIの改善

さまざまなAPIが拡張され、パフォーマンスとメモリ管理が改善されました

  • GeolibRuntime :: finalize()そしてFnScenegraphIterator :: finalizeRuntime() レンダラープラグインが使用するメソッド-通常、シーンをトラバースした後、レンダラープラグインはGeolib3ランタイムが再び必要ないことを明示的に示すことができるようになりました。ランタイムはメモリをパージし、さらに計算を停止します。
  • FnAttribute :: getSize() -この関数は、特定の属性に動的に割り当てられたメモリのサイズを返します。グループ属性の場合、サイズはすべての子属性のサイズの合計と、子名の長さを表します。グループ属性に同じ属性インスタンスの重複参照が含まれる場合、そのような属性のサイズは、グループに表示されるのと同じ回数だけ考慮されます。
  • AttributeKeyedCacheスレッド効率の高い代替手段が含まれています。このテンプレートクラスは、TBBの同時ハッシュマップの観点から再実装されました。TBBを使用できないユーザーでも、次のように定義することにより、ミューテックスバージョンを使用できます。 ATTRIBUTEKEYEDCACHE_NO_TBBヘッダーファイルを含める前。
  • GeolibSetupInterface :: setOpsCollapsible()。設定されている場合、これはGeolib3-MTにこのタイプのOpが折りたたみをサポートすることを示します。将来のリリースでは、Geolib3-MTはこの情報を使用して、類似したOpのチェーンを識別し、それらを単一のクック()コール。
  • kFnKatGeolibThreadModeGlobalUnsafe廃止されました。すべてのOpsはスレッドセーフであるか、独自の内部ロックを実装する必要があります。
  • という名前のいくつかの新しい関数setup()、cleanup() そして setRootIterator()に追加されましたRenderBaseのレンダラープラグインのクラスplugin_apis / include / FnRender / plugin / RenderBase.hヘッダ。これらにより、レンダープラグインは、フレームごとにプラグインの新しいインスタンスを作成する代わりに、単一のインスタンスで複数のフレームをレンダーできます。

分析およびプロファイリングツール

Geolib3-MTプロファイリング

Geolib3-MTは、新しいレンダリングタイプを追加します。 プロファイリングによるプレビューレンダリング、シーントラバーサルのパフォーマンスの問題を追跡するのに役立つように設計されています。これにより、通常のプレビューレンダリングが実行されますが、実行されたOps、ロケーションをクッキングするために使用されるCPUの量、および属性とLuaスクリプトに使用されるメモリの量に関する情報もキャプチャされます。

プロファイリングを使用したプレビューレンダリングは、プロファイリングデータを2つの場所に出力します。

  • 合計CPU時間と使用メモリ、および最も高価な10個のOpを含む、Render Logの要約レポート。
  • 以下に説明する生のプロファイリングデータを含むディスクに書き込まれたJSONファイル。

プロファイリングを使用したプレビューレンダリングの開始

プロファイリングを使用したプレビューレンダリングは、他のレンダリングと同じメニューから開始できます。 プロファイリングによるプレビューレンダリングコマンド。

このオプションは、プレビューレンダーを既にサポートしているレンダラーで使用でき、レンダラー側での追加作業は不要です。レンダラーがfinalize() Geolib3-MTランタイムのメソッド。これらのプロファイリングレポートは、ランタイムが完了すると作成されます。そうでない場合、レンダリングが終了するとレポートが書き込まれます。

どのような情報がキャプチャされますか?

オペレーションの名前、タイプ、数値ID。各Opには名前、タイプ、一意の数値IDがあります。たとえば、OpScript Opの名前はop74、タイプOpScript.LuaとID 77。名前とIDを関連付ける必要はありません。

の名前とタイプKatana Opを生成したノード。Opが直接生成される場合Katanaノード、そのノードの名前とタイプが記録されます。Opが暗黙的に作成された場合、ノード名は次のようになります_ノーネーム_タイプは等しくなります _NoType_。これは、たとえばMaterialFilenameResolve Ops:これらのOpsは、ファイル名を解決する必要があるときに暗黙的に作成されるため、no Katanaノードは作成者として識別されます。

注:場合sceneTraversal.opTreeOptimizationsがオンになり、Opsのチェーンが折りたたまれ、ノード名とタイプがチェーンから生成された文字列に置き換えられます。チェーンに長さがある場合t、タイプのOpsで形成opType、ここでOp kという名前です okによって生成されますKatana指定されたノードn、文字列の一般的な形式は次のとおりです。

cop(o0(n0)-> o1(n1)-> ...-> ot(nt))

ただし、この文字列の形式が固定されていることは保証されていません。

Opがロケーションのクッキングに費やした合計CPU時間。各Opは多くの場所をクックし、すべてのシーントラバーサルスレッドでこれを行うために費やされた時間が累積されます。したがって、シーンが並行してトラバースされる場合、CPU時間はシーントラバーサルスレッドの数に比例する必要があります。そうでない場合は、問題のOpの上流にスレッドセーフでないOpがある可能性があります。

そのOpのメモリフットプリント。各Opはメモリをクックの場所に割り当てる必要があり、Opごとのメモリの合計が集計されます。現在、次の割り当てのみが記録されます。

  • クックされた場所の属性を保存するために、FnAttributeライブラリによって作成された割り当て。
  • OpScriptの実行中にLuaインタープリターによって行われた割り当て。そして
  • CookResultsをキャッシュに保存するために行われた割り当て。

プロファイリング概要レポート

プロファイリングによるプレビューレンダリングが完了すると、要約レポートがレンダリングログに書き込まれます。このレポートは、プロファイルデータの概要を提供することを目的としており、次のものが含まれています。

  • すべてのOpsで合計された合計CPU時間。
  • すべてのOpsで合計された合計メモリフットプリント。そして
  • CPU時間による最も遅い5つのOp。

レンダリングログの例の関連セクションを以下に示します。

JSONファイルのプロファイリング

概要レポートに加えて、生のプロファイリングデータを含むJSONファイルがディスクに書き込まれます。書き込まれるディレクトリは、 --profiling-dirコマンドラインオプション。これが設定されていない場合、一時ディレクトリに書き込まれますKatanaセッション。このディレクトリが存在しない場合は作成されます(ファイルシステムのアクセス許可が許可されている場合)。ファイル名の形式は次のとおりです。

profile_ <renderer> _previewRender_ <datetime> .json

どこ:
  • <レンダラー>レンダリングプラグインの名前です。たとえばdl 3Delightの場合;
  • <datetime>レンダリングが開始されたときからのISO8601タイムスタンプです。

ファイルには、次のプロパティを持つ単一のJSONオブジェクトが含まれます。

物件タイプ説明
タイムスタンプストリングプロファイルファイルが書き込まれたISO8601タイムスタンプ。2019-10-11T09:37:06Z
レンダラーストリングレンダリングプラグインの名前。 dl
renderMethodName ストリングレンダリングメソッドの名前。現在は常に「previewRender」です。 previewRender
環境対象以下を含むさまざまな環境変数の値を含むオブジェクト。
  • KATANA_RELEASE
  • KATANA_ROOT
  • KATANA_RESOURCES
{「KATANA_RELEASE」:「3.5v1」、「KATANA_ROOT」:/opt/foundry/katana3.5」、「KATANA_RESOURCES」:「<unset>」}
profileModeストリングプロファイルモードの名前。現在は常に「基本」です。基本的な
opsアレイ各Opによって消費されるリソースを記述するオブジェクトの配列。下記参照。
numOpsOps配列の長さ。78
wallTimeレンダリングの開始からプロファイリングファイルの書き込みまでの秒単位の実時間。レンダラーが実装する場合finalize()、これはシーンの横断時間に相当します。 46.85064
cpuTime すべてのOpsのCPU時間の合計(秒単位)。 91.39238
使用メモリすべてのOpのメモリフットプリントの合計(バイト単位)。 10728607911

opsプロパティには、シーントラバーサル中に実行された各Opに1つずつ、次の形式のオブジェクトの配列が含まれます。

物件タイプ説明
opId Opの一意の整数識別子。23
opName ストリングオペレーションの一意の名前。 op223
opType ストリングオペレーションのタイプ。AttributeSet
nodeNameストリングの名前KatanaこのOpの作成を担当するノード、または_ノーネーム_ Opが暗黙的に作成された場合。RenderSettings_SetSamples
nodeTypeストリングのタイプKatanaこのOpの作成を担当するノード、または_NoType_ Opが暗黙的に作成された場合。RenderSettings
cpuTimeこのOpがすべてのスレッドで場所をクッキングするのに費やした合計時間(秒単位)。0.54512136
使用メモリ上記で定義されているように、ロケーションのクッキング中にこのOpが使用した合計メモリフットプリント(バイト単位)。 185378321
  • Opツリーデバッグ用のコマンドラインツール -新しいコマンドラインツール、 シーンウォーカー、Op開発、シーンデバッグ、パフォーマンス分析を支援するために使用できます。シーンウォーカー構成可能な数のコアを使用してOpツリーをトラバースするか、特定の場所のみをトラバースしてシーングラフから生の属性データを出力するように構成できます。

実験的機能

  • 環境変数KATANA_EXPERIMENTAL_MONITOR_OVERLAY使用されなくなりました。モニターレイヤー機能は、 ビューアー(Hydra)タブ。トグルボタン、トグルメニュー項目、またはキーボードショートカット(`)。

バッチレンダリングでのレンダリングプロセスの再利用

  • の起動を最適化するための新しいモードレンダーブートレンダリングプラグインをホストするプロセスが追加されましたKatanaのバッチモードは、新しい-再利用レンダリングプロセスへのコマンドラインオプションKatana実行可能ファイル(に加えて - バッチ)。走るときKatanaこのオプションをオンにしたバッチモードでは、複数のフレームが単一のインスタンスでレンダリングされますレンダーブート新しいプラグインを起動するのではなく、レンダリングプラグインをホストするレンダーブートすべてのフレームのプロセス。このオプションを使用すると、フレームのレンダリングシーケンスのパフォーマンスが大幅に向上します。これは、レンダリングプラグインおよびその他すべてのKatanaプラグインはフレームごとにリロードする必要はありません。

    注:レンダリングプラグインは、 Katanaサポートするための3.5v1レンダリングAPI -再利用レンダリングプロセスバッチモードのコマンドラインオプション。
  • という名前のいくつかの新しい関数setup()、cleanup() そして setRootIterator()に追加されましたRenderBaseのレンダラープラグインのクラスplugin_apis / include / FnRender / plugin / RenderBase.hヘッダ。これらにより、レンダープラグインは、フレームごとにプラグインの新しいインスタンスを作成する代わりに、単一のインスタンスで複数のフレームをレンダーできます。

その他の注目すべき機能強化

  • TP 55592 / BZ 27736-新しい-V / -詳細ログ情報メッセージの詳細レベルを制御するためのコマンドラインオプションが追加されましたKatana実行可能ファイル:

     -V LEVEL、-verbose = LEVEL情報メッセージのロギングの詳細レベル。デフォルトは1です。ほとんどの情報メッセージを抑制するには、0に設定します。
  • TP 280477-選択したアイテムのテキスト表現をコピーできるようになりました遅延グループツリーのウィジェット属性タブをクリップボードに移動します。このタイプのウィジェットは、たとえばlightListグループ属性/ root / worldそしてmaterial.nodesグループ属性材料ネットワーク資料を表す場所。