この 2 番目のチュートリアルでは、シーンのパフォーマンスを最適化する方法について説明します。
ビデオ キャプション: Autodesk VRED Professional のチュートリアル シリーズ、「リアルタイムと VR の概要」のパート 2 へようこそ。最初の概要については、前のパートでお話ししました。不明な点がある場合は、コメントを投稿してください。質問、一般的な意見交換、機能に関するリクエストがある場合は、autodesk.com の VRED フォーラムもご利用ください。
前回は、ジオメトリのシャドウとライトを計算するさまざまな方法について確認しました。本日は、リアル タイム シーンのパフォーマンスに直接影響を与えるパラメータの概要を示します。このチュートリアルの主な目的は、発生する可能性のあるボトルネックを特定して、最適化できるボトルネックを評価できるようにすることです。シーンの最適化には時間と忍耐が必要になることがあるため、この機能は重要ですが、主に静止画をレンダリングする場合などでは、この機能は必要ありません。ただし、このチュートリアルでは OpenGL を引き続き使用します。この時点で重要になるヒントは、パフォーマンス問題の重要なインジケータとして VRAM の負荷が挙げられるといこうことです。この点に常に注意を払い、フレーム レートが低下した場合は、VRAM の負荷を最初に確認してください。また、常に統計を監視するようにしてください。
最初に、概要について説明します。他のレンダリング エンジンや VRED には既知の多数の機能が組み込まれていますが、いずれかのヒントが役立つことを願っています。では、概要を見てみましょう。順序は重要ではありません。たとえば、最初にポリカウントを処理しますが、通常、ポリカウントは VRED ではそれほど重要でありません。
したがって、次に示す概要は、一種のチェックリストとしてご利用ください。ここで紹介する内容は次のとおりです。
ジオメトリの読み込みおよび準備を行う際に、事前に検討しておく必要がある項目。確認する必要があるマテリアルのパラメータ。レンダリング設定がシーンのパフォーマンスに与える影響。最後に、フレーム レートに影響する可能性があるカメラの設定です。
ジオメトリ
a.読み込み(ポリカウント、NURBS データ) > ノード情報
b.NURBS 対 ポリゴン
c.シーンツリー(階層、未使用のノード、マテリアル グループ、ノード数 > print len(getAllNodes()), Transformnodes, Shared Nodes
)
マテリアル
a.概要 + IBL の品質、テクスチャ量 + サイズ > テクスチャ統計情報
b.シェーダ パラメータ(バンプ、オレンジ ピール、変位)
c.特殊なケース(織布、マルチパス + レイヤ化されたマテリアル、.axfs/substance)
d.アルファ チャネル
レンダリング設定
a.リアル タイム アンチエイリアシングと DLSS
b.オクルージョン カリング/バックフェース カリング
カメラ設定
a.被写界深度
b.ライト フレア + グロー + グレア
まず、データを読み込みます。基本的に、テッセレーション品質はできる限り低く設定することをお勧めします。特に、NURBS データを読み込む場合は、VRED で後から品質を選択的に再調整し、ねじやアイコンなどの小さなパーツのテッセレーションなどを行うことができます。その一方で、リーン モデルを作成し、読み込み時間を節約し、リアルタイムで可能な限り最高のパフォーマンスを維持することもできます。この時点で、[サーフェス データを維持]が有効になっていることを確認することが重要です。このオプションが有効になっている場合に限り、後で VRED でメッシュ密度を繰り返し調整できるようになります。ここでも、家や街路のように非常に大きなジオメトリを読み込むためのヒントがあります。[テッセレーション品質]を[粗い]に設定し、[最大コード長]を 50000 (5 m に対応)に設定することができます。四角形を含むポリゴン データセットを読み込む場合は、Maya または任意のツールで事前に三角形化しておくことをお勧めします。また、ポリゴン データを読み込む場合は、常に .fbx 形式を使用することをお勧めします。.obj または .3ds と比べて最新形式の業界標準であり、ジオメトリだけでなく、カメラ、マテリアル、ライト、アニメーションを読み込む、または書き出すことができます。VRED に読み込まれた .fbx データは、読み込み時に既に最適化されています。.obj および .3ds データを使用する場合は、これらの最適化を手動で行う必要があります。これらの機能については後で説明します。
まず、概要をすばやく確認するために、統計情報をアクティブにして、グローバルなポリカウントを読み取ります。特定のノードを選択し、[情報]を右クリックしてシーンツリーでポリカウントを確認することもできます。パーツのテッセレーションが細かすぎてポリゴンを保存できない場合でも、読み込まれたデータに NURBS 情報が格納されていれば、対応するパーツを選択し、[シーン] > [ジオメトリ エディタ] > [ジオメトリ]を選択して他の設定をテストすることができます。ここでは、読み込む場合と同様な方法で、メッシュの密度を増減できます。最後に、ジオメトリを正しく表現するために必要な数だけポリゴンを作成します。このチュートリアル シリーズの最初のパートで説明したように、唯一の例外は頂点ベースのイルミネーション モードです。
実際のところ、ポリゴンの数が多くても、VRED では問題が発生しません。ハードウェアによっては、ポリカウントが 5,000 万以上でも、問題になならいことがあります。より重要なのは、NURBS ベースのデータセットです。基本的に、NURBS データを保存することは大きなメリットになりますが、リアルタイム プレゼンテーション中にモデルのパフォーマンスが低下する可能性があります。プレゼンテーションの前にモデルをポリゴンに変換できますが、事前にバックアップを作成しておいてください。
この小さな四角形領域の記号を使用して、NURBS データを識別できます。ポリゴン データを操作する場合は、この小さな三角形で識別できます。データを変換するには、目的のノードを選択し、シーンツリー内で右クリックして、[編集] > [サーフェス] > [メッシュに変換]を選択します。ただし、変換する前に、NURBS データを含むファイルを保存してください。
データを読み込み、テッセレーションを実行した後で、シーンの構造を確認することをお勧めします。基本的に、構造を常に整理しておくと、ワークフローがスムーズになります。シーンツリーが整理されていると、同僚も作業しやすくなります。つまり、階層ができるだけフラットになるようにし、読み込むときに作成された不要なグループまたはマテリアル グループは削除する必要があるということです。さらに、可能であれば、同じグループに属するパーツを結合する必要があります。この操作を行うには、ショートカットの[Ctrl]+[Shift]+[M]キーを使用するか、シーンツリー内の選択したジオメトリを右クリックして、[編集] > [ジオメトリ] > [ジオメトリを結合]を選択します。最適化モジュールを使用することもできますが、最適化モジュールで操作を元に戻すことはできないため、少なくとも、手動で元に戻す方法を知っておく必要があります。ところで、事前に設定されたショートカットを確認する場合は、[ビュー] > [ショートカットを表示]を使用してリストを表示できます。
シーンツリーに戻ります。階層を最適化する最も簡単で、すばやく実行できる方法は、最適化モジュールと呼ばれています。最適化モジュールを呼び出すには、[シーン] > [最適化]を使用するか、シーンツリー内で右クリックして、[編集] > [モジュールの最適化を表示]を選択します。シーン全体を最適化することも、単一グループを選択して最適化することもできます。既定の設定でパフォーマンスが向上する可能性があります。これらの設定は[ファイル] > [シーンを最適化]にも保存されていて、ファイル全体を最適化できます。
ここで、最適化モジュールの最も重要な機能について説明します。まず、不要なグループをすべて削除します。この場合、[グループ ノードのクリーンアップ]をアクティブにします。子ノード数が 2 未満のすべてのグループが削除されます。[マテリアル グループ ノードのフラッシュ]をアクティブにして同じ操作を行い、読み込まれたすべてのマテリアル グループを削除します。これらは手動で削除することもできます。
さらに、前述のように関連する可能性のあるパーツを結合して、ノードの数を減らすことができます。短い Python コマンドを使用してノード数を読み取ることができます。VRED ターミナルに print len(getAllNodes())
コマンドを入力するだけで、すべての子ノードと親ノードの総数が表示されます。この値が小さいほど、効率的です。
最後に、不要になったトランスフォーム ノードをすべて削除できます。トランスフォーム ノードは、グループ アイコンではなく、この小さなピボット アイコンで認識できます。[トランスフォーム ノードをフラッシュ]をアクティブにすると、それぞれのノードの座標とスケールが 0 または 1 にリセットされ、ジオメトリ自体の位置が維持されます。注: この関数は、ノードが参照されてもすぐには使用できない、いわゆる共有ノードです。多数の共有ノードが使用されているため、数秒後に港のシーンに戻ります。
約束したとおり、.fbx データと類似した .obj または .3ds データを読み込んで最適化する方法についての簡単なヒントを紹介します。最適化モジュールを開き、16 ビットの長さと 16 ビットのインデックスがアクティブになっているかどうかを確認し、[頂点を統一]、[インデックスを最適化]、および[インデックスの並べ替え]をアクティブにします。また、[フィルタ]の[無効なテクスチャ座標を削除]と[縮退ポリゴンを削除]をアクティブにできます。この情報は、どこにも記載されていません。VRED のフォーラムで確認できます。ただし、グローバルな最適化設定にはこの設定が保存されていると思われます。
海岸のシーンに戻り、VRED で呼び出されたインスタンスまたは共有ジオメトリが表示されました。共有ジオメトリは、まったく同じジオメトリ構造を持つ、シーン内に複数存在するジオメトリです。ポリゴン数を節約するために、シーン内で同じジオメトリが複数回使用されます。一般的な例は、ネジ、サイド ミラー、リム、タイヤです。ただし、このシーンでは、これらのコンテナを使用するプロセスを示します。現在、異なるコンテナは 2 つだけです。グレーで表示される 40 フィートのバリアントと、黄色で表示される 20 フィートのバリアントです。ジオメトリをクリックすると、シーンツリー内に下線付きのノードが表示されることから、これがインスタンスであることがわかります。このマテリアルを簡単に割り当てられることについても説明します。
現在、参照オブジェクトを操作しています。参照オブジェクトは、それ自体が便利です。ここで、参照オブジェクトがパフォーマンスに影響するかどうかを見てみましょう。この操作を行うには、右クリックして[編集] > [サブツリーの共有解除]を選択し、シーンツリー内のグループ全体の参照を削除します。この処理には少し時間がかかります。フレーム レートが低下することはわかっていますが、シーンに視覚的な違いは見られません。ジオメトリを再び参照するには、最適化モジュールに戻ります。シーンツリー内で右クリックして[モジュールの最適化を表示]を選択し、[共有]で[ジオメトリ]をオンにします。この操作が機能するか確認するには、階層を少し展開して、対応するノードに下線が付いているかどうかを再確認します。この場合、オクルージョン カリングなどのレンダリング設定は利用できないことに注意してください。
これで、ジオメトリの最適化に関するトピックを終了し、マテリアルとテクスチャの確認方法について見てみましょう。前回のチュートリアルで、HDRI マップの解像度が 8 ~ 16K であれば、ほとんどの場合十分であることをお話ししました。モーション ブラーを使用して静止画をレンダリングする場合などでは、4K を使用することもできます。ここで、環境マテリアルの光沢品質を調整するという、比較的新しい機能について説明します。知っておく必要があるのは、設定値を大きくすると表示品質は向上するが、計算時間は長くなるということだけです。この点について個別に確認し、高品質の設定にしても付加価値があるかどうか検討することをお勧めします。
それでは、引き続きテクスチャを使用してみましょう。基本的に、使用されるテクスチャの数とサイズは、グラフィックス カードのメモリの負荷に大きく影響します。テクスチャがアクティブか非アクティブかは問題ではありません。VRED からテクスチャを削除した場合にのみ、占有メモリは解放されます。最初の概要を把握するには、VRAM の使用状況を確認することをお勧めします。この情報はどんなときでも役立ちます。マテリアルとテクスチャの数、およびメモリ使用量は、[マテリアル] > [ファイル] > [統計情報]で確認することもできます。
最適化をすばやく、手軽に行う場合は、マテリアル エディタで[編集] >[未使用のマテリアルを削除]または[マテリアルを最適化]を選択して、マテリアル エディタをクリーン アップすることもできます。
ただし、さまざまなジオメトリ最適化を行ってもグラフィックス カードがメモリ不足になる場合は、手動でマテリアルを修正することをお勧めします。2 つの異なる方法を試したり、これらを組み合わせることができます。1 つの方法として、テクスチャの解像度を下げることができます。シーン全体で 8K のテクスチャが必要かどうか、または 4K で十分かどうかなどを確認してください。4K テクスチャであれば、クローズアップしたときも適切に表示されます。最も簡単な方法は、Photoshop などでスケールを小さくし、VRED に再ロードすることです。2 の累乗になることご注意ください。使用されるテクスチャは、1,024 ピクセル、2,048 ピクセル、4,096 ピクセルのようになります。
各テクスチャのサイズを小さくしても目的の結果が得られない場合は、すべてのテクスチャ チャネルが本当に必要かどうかを確認してください。近距離にあるマテリアルが表示されない場合は、別のテクスチャ チャネルを確認することをお勧めします。この障壁を例にとると、[バンプ]、[粗さ]、[光沢のあるテクスチャ]のいずれも、効果はほとんどないか、まったくないことがわかります。[光沢のあるカラー]自体を調整したり、テクスチャを削除することもできます。
VRED の既定では、すべてのテクスチャが .vpb ファイルにインラインで配置されることにも注意してください。この設定を変更してテクスチャのリンクのみを行う場合は、[編集] > [基本設定] > [読み込み/書き出し] > [ファイル タイプ] > [OSB/VPB] > [書き出し]の順に選択して、インライン化されたテクスチャの使用を無効にすることができます。
マテリアルの最適化について少し説明します。VR ゴーグルを使用する場合などでは、いくつかの設定がパフォーマンスに影響する可能性があります。これらの設定には、バンプなどのプロシージャ シェーダ エフェクトなどが含まれますが、カーペイント マテリアルのクリアコートを設定する場合は、オレンジ ピールも含まれます。他のレンダリング エンジンと同様に、ディスプレイスメント マップを使用する場合も同じことが当てはまります。ほとんどの場合、フレーム レートはすぐに低下します。そのため、ジオメトリ全体をマテリアル グループに移動して、いくつかの重要なシェーダ パラメータがアクティブになっているか確認することをお勧めします。
それとは異なる、特別なケースもあります。プロシージャル織布シェーダを使用する場合も注意が必要です。マテリアルを作成する場合は、このシェーダの使用を避けて、テクスチャを使用してください。また、マルチパス マテリアルとレイヤ マテリアルの計算には非常に大きな負荷がかかるため、どうしても必要な場合にのみ使用する必要があります。アルファ チャネルを含むテクスチャでも同様です。手元のシーンは適切に最適化されているため、多くのマルチパス マテリアルがあっても問題になりません。
簡単にまとめると、ご覧いただいたように、シーンのパフォーマンスはいくつかのパラメータに依存し、通常は妥協する必要があります。したがって、次に示す注意事項では、別の基本コンポーネントである OpenGL のレンダリング設定について説明します。
基本的に、VRED でアンチエイリアシングを使用する方法は 2 つあります。インタフェースを介して標準の静止画アンチエイリアシング モードをトリガしたり、スペース バーのショートカットを使用することができます。また、リアルタイム アンチエイリアシングを使用して、アンチエイリアシングを永続的にアクティブにすることもできます。この設定は、[可視化] > [リアルタイム アンチエイリアシング]にあり、5 つのプリセットも用意されています。値が大きいほど、適切に表示されますが、フレーム レートが低下する可能性があります。どの設定の場合にパフォーマンスと品質のバランスが適切になるかテストしてください。
DLSS と呼ばれる新しいディープ ラーニング スーパーサンプリングを試すこともできます。通常のリアルタイム アンチエイリアシング設定を非アクティブにして、さまざまな設定をテストするだけです。
VR ゴーグルを使用している場合は、可変レート シェーディングをテストするか、[基本設定]の[バーチャル リアリティ]で[フォービエイテッド レンダリング]をアクティブにすることもお勧めします。
最後に、[可視化] > [高度な OpenGL 設定]の[バックフェース カリング]または[オクルージョン カリング]の設定を必ずテストしてください。バックフェース カリングを使用すると、VRED はカメラに位置合わせされたサーフェス法線のみをレンダリングします。オクルージョン カリングは、他のジオメトリで覆われているサーフェスをすべて無視するため、インスタンスがある場合は機能しません。
このトピックの最後に、パフォーマンスに影響する可能性のあるカメラ設定について簡単に説明します。まず、リアルタイム被写界深度の設定があります。[F ストップ]および[インタラクティブ被写界深度の品質]の設定に応じて、フレーム レートが低下します。そのため、被写界深度が実際には必要ない場合、非アクティブ化することをお勧めします。
また、リアルな値を使用することをお勧めします。つまり、実際のカメラ レンズによってイメージが生成される領域に、カメラの焦点距離と F ストップが収まるようにします。簡単なヒントを紹介します。右マウス ボタンをダブルクリックすると、焦点を設定できます。
カメラに関する他の重要なパラメータは、カメラの[イメージ処理]にあります。グロー、グレア、フォグ、レンズ フレアの効果は既定で無効になっていますが、使用するとフレームが消費されることがあります。これらの効果が必要かどうかを検討するか、シーンを表示する場合は無効にしてください。
これで、最初のチュートリアルの夜間のシーンがアクティブになりました。簡単にまとめると、シーンのパフォーマンスはさまざまなパラメータに依存する可能性があります。また、ファイルによって、最適化の機能に差が生じることがあります。したがって、最適化に意味がある場合を見分けることが重要になります。最適化とは不適切な妥協の産物であり、付加価値を付ける場合と比べてコストがかかりすぎます。基本的には、使用するノードを可能な限り少なくし、関連する領域を結合すると同時にポリカウントを減らし、必要な数のテクスチャのみをロードし、それらにも低解像度を選択する必要があります。
不明な点やご意見などがありましたら、コメントとしてお寄せください。関心をお寄せいただき、誠にありがとうございます。お楽しみいただけましたか。またお会いしましょう。