レンダリングを複数のフレームに分散する¶
レンダリングの作業負荷を複数のフレームに分散させることで、1つのフレーム全体をレンダリングするために必要な作業量と時間を削減できます。
レンダリングのワークロードを分散するために、次のことができます。
Progressive Rendering Viewport 2D ノードを使用して、レンダリングを複数のレンダーパス間で分散します。プログレッシブレンダリングビューポート2Dノードを使用する を参照してください。
Composition Target Render Pass のコンポジションターゲットの更新レートを設定します。コンポジションターゲットのレンダリングの分散 を参照してください。
Cubemap Render Pass によってレンダリングされるキューブマップ反射の更新レートを設定します。キューブマップ反射のレンダリングを分散する を参照してください。
プログレッシブレンダリングビューポート2Dノードを使用する¶
Progressive Rendering Viewport 2D ノードを使用して、レンダリングの作業負荷を複数のフレームに分散させ、1つのフレーム全体をレンダリングするために必要な作業量と時間を削減します。
Kanzi は、Progressive Rendering Viewport 2D ノードによってレンダリングされるすべてのコンテンツをnフレームごとに更新します。ここで、nは Progressive Rendering Viewport 2D ノードが使用するレンダーパスプレハブの子レンダーパスの数です。
例えば、Progressive Rendering Viewport 2D ノードが4つの子レンダーパスを持つ Group Render Pass レンダーパスプレハブを使用する場合、Kanzi は4フレームごとに Progressive Rendering Viewport 2D ノードによってレンダリングされるコンテンツを更新します。インタラクティブなコンテンツをレンダリングするために Progressive Rendering Viewport 2D ノードを使用する場合、これによりそのようなコンテンツの応答性が低下する可能性があります。
複雑でレンダリング負荷の高いコンテンツを均等な部分に分割する場合、Progressive Rendering Viewport 2D ノードを使用してアプリケーションのレンダリングパフォーマンスを向上させることができます。
Progressive Rendering Viewport 2D では、Kanzi は1フレームで1つのレンダーパスをレンダリングします。フレームレートの変動を防ぐために、Progressive Rendering Viewport 2D ノードが使用するレンダーパス間でレンダリングを均等に分配します。レンダリングを均等に分配するには、各レンダーパスが次のようにレンダリングすることを確認してください。
ほぼ同じ量のポリゴン
同様の複雑さを持つシェーダー
サイズが似ているテクスチャ
同様の数のテクスチャ
例えば、異なる更新頻度でコンテンツをレンダリングするために、Progressive Rendering Viewport 2D ノードを使用します。コンテンツの一部を60 fpsで、残りを30 fpsでレンダリングするには、すべてのコンテンツを合わせて16 ms以下でレンダリングする必要があります(1000 ms / 60 fps = 16.6 ms)。60 fpsのコンテンツをレンダリングするのに最長で10 msかかる場合、残りのコンテンツを30 fpsで表示するには:
30 fpsでレンダリングしたいコンテンツを2つまたは3つの部分に分割し、それぞれの部分が6 ms以下でレンダリングされるようにします。
60 fpsのコンテンツを毎フレーム60 fpsでレンダリングするには、60 fpsと30 fpsのコンテンツの合計レンダリング時間が16.6 msを超えてはなりません。
Progressive Rendering Viewport 2D ノードを使用して、30 fps のコンテンツをレンダリングします。
コンテンツを2つの部分に分割すると、Kanzi は30 fpsのコンテンツ全体を2フレームごとにレンダリングします。コンテンツを3つの部分に分割すると、Kanzi は30 fpsのコンテンツ全体を3フレームごとにレンダリングします。
ヒント
コンテンツを部分に分割する際、各部分のレンダリングにかかる時間を調べるには、
Performance HUD を表示するには、次のいずれかを行います。
Kanzi Studio Preview で、
をクリックして Analyze モードに入ります。
を右クリックして Performance HUD を選択します。プレビューでアプリケーションを分析する を参照してください。Kanzi Engine APIを使用する際は、
application.cfgファイルまたはApplication::onConfigure関数でPerformanceInfoLevelを設定します。PerformanceInfoLevel を参照してください。
レンダリングしたくないコンテンツを非表示にします。Node Tree の Kanzi Studio で、非表示にしたいノードを選択し、次のいずれかを行います。
Ctrl H を押してください。
Properties で、Node > Visible プロパティを追加して無効にします。
Progressive Rendering Viewport 2D ノードの使い方を学ぶには、チュートリアルを完了してください。チュートリアル: プログレッシブレンダリング を参照してください。
Progressive Rendering Viewport 2D ノードを使用するには、
Kanzi フィルタまたは Combine Object Source アイテムを使用して、レンダリングを複数のフレームに分散させたいノードを収集します。フィルタ と オブジェクトソース (Object Sources) を使用する を参照してください。
例えば、Tag Filter を使用してノードを収集するには:
Node Tree で、複数のフレームにわたってレンダリングしたいノードを選択します。Properties で、Tags プロパティを使用して、異なるレンダーパスでレンダリングするためのノードをマークします。タグの使用 を参照してください。
たとえば、レンダリングを2つの部分に分割するには、
最初のレンダーパスでレンダリングしたいノードにタグ Pass 1 を付けてください。
2回目のレンダーパスでレンダリングしたいノードにタグ Pass 2 を付けてください。
Library で、Alt を押しながら右クリック Rendering し、前のステップでノードにマークしたタグの数だけ Tag Filter フィルタを作成します。Properties で、Included Tags プロパティをその Tag Filter で収集したいタグに設定します。
例えば、最初の Tag Filter フィルタを Tag Filter Pass 1 と名付け、Properties で Included Tags プロパティを Pass 1 に設定します。
Library > Rendering で、Alt を押しながら右クリック Render Pass Prefabs を行い、Progressive Rendering Viewport 2D ノードがそのコンテンツをレンダリングするために使用する Group Render Pass レンダーパスプレハブを作成します。
Library で、前のステップで作成した Alt を押しながら右クリック Group Render Pass を選択し、次を作成します。
Clear Render Pass
最初のステップで作成した各ノードのコレクションに対して、Gather Lights Render Pass とその中に Draw Objects Render Pass を配置します。
Library で、前のステップで作成した各 Draw Objects Render Pass を選択します。Properties で、Object Source プロパティを、レンダーパスでレンダリングしたいノードを収集するフィルタまたは Combine Object Source アイテムに設定します。
例えば、最初の Draw Objects Render Pass を選択し、Object Source プロパティを Tag Filter Pass 1 に設定します。
Node Tree で、Progressive Rendering Viewport 2D ノードを作成します。Properties で、Render Pass Prefab プロパティを Group Render Pass に設定します。
Kanzi を設定して、Progressive Rendering Viewport 2D ノードを Group Render Pass レンダーパスプレハブを使用してレンダリングします。
Node Tree で、最初のステップで収集したコンテンツを Progressive Rendering Viewport 2D ノードに追加します。
Library の Clear Render Pass で、アルファチャンネルを含む画像でアルファチャンネルを色チャンネルにプリマルチプライ処理する場合は、意味のある色出力を生成するために Clear Color 0 プロパティを追加して設定します。
プログレッシブレンダリングでアニメーションを使用する¶
Progressive Rendering Viewport 2D ノード内のノードをアニメーション化するために、Animation Player またはステート遷移を使用することはできません。
プログレッシブレンダリングでアニメーションを使用するには:
Node Tree で、アニメーションを使用したい Progressive Rendering Viewport 2D ノードを選択します。
Properties で、使用したい Animation、Animation Clip、または Timeline Sequence に Timeline プロパティを設定します。
Progressive Rendering Viewport 2D ノードによってレンダリングされたコンテンツにアンチエイリアスを適用する¶
Progressive Rendering Viewport 2D ノードによってレンダリングされるコンテンツにアンチエイリアスを適用するには、Node Tree で Progressive Rendering Viewport 2D ノードを選択し、Properties で Multisample Level プロパティを追加し、使用したいアンチエイリアスサンプルの数に設定します。
Kanzi アプリケーションを実行したいデバイスのドキュメントを参照して、サポートされている値を確認してください。アンチエイリアスサンプルの数はデバイスに依存するためです。デバイスがサポートしていない値に Multisample Level プロパティを設定した場合、Kanzi Engine はその値をデバイスドライバがサポートする最大値にクランプします。
Progressive Rendering Viewport 2D プロパティタイプとメッセージ¶
Progressive Rendering Viewport 2D ノードで利用可能なプロパティタイプとメッセージのリストについては、Progressive Rendering Viewport 2D を参照してください。
コンポジションターゲットのレンダリングの分散¶
フレームごとのレンダリング作業量を減らすために、Kanzi が Composition Target Render Pass のコンポジションターゲットを更新する頻度を設定することができます。
コンポジションターゲットのレンダリングを分散するには:
Library > Rendering > Render Pass Prefabs で、コンポジションターゲットにコンテンツをレンダリングするために使用する Composition Target Render Pass を選択します。コンテンツを1つのコンポジションターゲットにレンダリングする、コンテンツを複数のコンポジションターゲットにレンダリングする、および テクスチャへのレンダリング (Rendering to texture) を参照してください。
Properties に追加して設定します。
Render Pass > Update Rate を、Composition Target Render Pass がレンダリングするコンテンツを更新したい速度に設定します。
コンテンツを毎フレーム更新するには、1に設定します。これがデフォルトの値です。
コンテンツを隔フレームで更新するには、2に設定し、4フレームごとに更新するには、4に設定します。
コンテンツを一度だけレンダリングするには、0に設定します。
Render Pass > Update Rate Offset をレンダリングレートをオフセットしたいフレーム数に設定します。
この方法により、複数のレンダーパスのレンダリングを異なるフレームに分散させることができます。
例えば、2つの Composition Target Render Pass レンダーパスがあり、その内容をフレームごとに更新する場合、そのレンダーパスの1つで Update Rate Offset を1に設定します。こうすることで、Kanzi はそれらのレンダーパスによってレンダリングされた内容を交互のフレームで更新します。
ヒント
同じレンダーパスプレハブを使用する複数の Viewport 2D ノードで Update Rate プロパティと Update Rate Offset プロパティを異なる値に設定するには、そのレンダーパスプレハブのインスタンスをカスタマイズできます。レンダーパスのインスタンスをカスタマイズする を参照してください。
キューブマップ反射のレンダリングを分散する¶
フレームごとのレンダリング作業量を減らすために、Kanzi の更新頻度を設定できます。
Cubemap Render Pass がレンダリングするコンテンツ。
キューブマップテクスチャ内の面に、Cubemap Render Pass がそのコンテンツをレンダリングします。
キューブマップ反射のレンダリングを分散するために
Library > Rendering > Render Pass Prefabs で、キューブマップ反射をレンダリングするために使用する Cubemap Render Pass を選択します。キューブマップレンダーパスを使用してキューブマップ反射を作成する を参照してください。
Properties に追加して設定します。
Render Pass > Update Rate を、Cubemap Render Pass がレンダリングするコンテンツを更新したい速度に設定します。
コンテンツを毎フレーム更新するには、1に設定します。これがデフォルトの値です。
コンテンツを隔フレームで更新するには、2に設定し、4フレームごとに更新するには、4に設定します。
コンテンツを一度だけレンダリングするには、0に設定します。
Cubemap Render Pass の Result Texture で1フレームに更新したいキューブマップフェイスの数に Face Update Rate を設定します。
Result Texture は、Cubemap Render Pass 自身とその子レンダーパスをレンダリングするキューブマップテクスチャを含んでいます。
デフォルトで、Kanzi は Update Rate プロパティで設定した速度で6つのキューブマップ面すべてを更新します。
例えば、Face Update Rate を3に設定し、Update Rate を2に設定すると、Kanzi はこのレートでキューブマップの面を更新します。
フレーム (Frame)
キューブマップの面 (Cubemap faces)
n
+x、-x、+y
n + 1
-
n + 2
-y, +z, -z
n + 3
-
n + 4
+x、-x、+y
n + 5
-
n + 6
-y, +z, -z
n + 7
-
Render Pass > Update Rate Offset をレンダリングレートをオフセットしたいフレーム数に設定します。
この方法により、複数のレンダーパスのレンダリングを異なるフレームに分散させることができます。
例えば、Update Rate Offset を 1 に設定すると、Kanzi はフレーム n + 1 で最初のキューブマップフェイスを更新します。