レンダリングのベストプラクティス

レンダリングパフォーマンスを最適化すると、アプリケーションのパフォーマンスが大幅に改善する可能性があります。

Kanzi はノードを次のようにレンダリングします:

  • 画面の外部のノードがレンダリングおよび変換されます。

  • Blend Intensity プロパティが0に設定されている3Dノードがレンダリングされます。

  • Visible プロパティが無効になっている 3D ノードは、レンダリングや変換が行われません。

  • Opacity プロパティが0に設定されている2Dノードはレンダリングされず、その子ノードもレンダリングされませんが、変換されます。

  • Visible プロパティが無効になっている 2D ノードはレンダリングされず、その子ノードもレンダリングされませんが、変換されます。

アプリケーションのレンダリングパフォーマンスの最適化

アプリケーションのレンダリングパフォーマンスを最適化するには:

  • フラグメントベースの計算を多数含むシェーダーが、レンダリングで最も「重い」部分となる可能性があります。フラグメントシェーダーの最適化 を参照してください。

  • シーンの変更により生じるレイアウトの再計算が原因で、CPU のパフォーマンスが低下する可能性があります。レイアウトのレンダリングを最適化する を参照してください。

  • プロパティタイプに Affect Layout が有効になっていて、そのプロパティの値がノードで変更されると、Kanzi はそのノードのレイアウトを再計算します。必要な場合にのみレイアウトを再計算するようにしてください。例えば、毎フレームレイアウトを再計算すると、アプリケーションのパフォーマンスが低下します。Affect Layout は、レイアウトに影響を与える場合にのみ Kanzi に付属するプロパティで有効になります。カスタムプロパティタイプの場合、レイアウトに影響を与えるかどうかを設定できます。プロパティタイプを作成する を参照してください。

  • 1 つのフレーム全体のレンダリングにかかる処理量と時間を削減するには、レンダリングワークロードを複数のフレームに分散します。レンダリングを複数のフレームに分散する を参照してください。

  • オーバードローが過剰になると、フィルレートが増加して GPU のパフォーマンスが劣化する可能性があります。Sorting Filter でオーバードローを防ぐ を参照してください。

  • 不透明なコンテンツをレンダリングするときには、常に前から後ろの順にレンダリングします。特別な理由がある場合にのみ、後ろから前にレンダリングしてください。

  • 透明ノードの可視化では、ブレンド式を正しく解決するための適切なデータが背後にあることが重要なので、透明ノードを正しくレンダリングするには、後面から前面の順にレンダリングする必要があります。部分的に透過的なノードをレンダリングする を参照してください。

  • シェーダープログラム間の過剰なスイッチングが必要になるような順序でノードが提示されると、レンダリング速度が低下する可能性があります。シェーダースイッチの削減 を参照してください。

  • 互換性のある多数のメッシュのレンダリングによって大量のドローコールが発生する場合は、動的バッチ処理を使用してドローコールの数を減らします。動的バッチ処理ではバッチの再構築時に CPU 処理が増えるため、オブジェクトが頻繁に作成または破棄される場合は、ターゲットのシーンをプロファイリングしてください。ダイナミックバッチングの使用 を参照してください。

  • 各レンダーターゲットの最初の Viewport ノードのレンダーパスを設定して、すべてのバッファをクリアします。

  • すべてのレンダーターゲットを複数回クリアしないようにしてください。

  • レンダーターゲットの色、デプス、ステンシルを複数回クリアしないでください。

  • 重複する背景ブラシを削除します。例えば、RootPage ノードに背景ブラシが設定されていて、その子ノードにも背景ブラシが設定されている場合、RootPage ノードから背景ブラシを削除します。

  • アニメーションアイテムが移動中は低品質でレンダリングします。パフォーマンスが向上しますが、品質が低下します。

  • Text Block ノード内のテキストのサイズを動的に変更するには、Font Size プロパティの代わりに、Render Transformation または Layout Transformation プロパティの Scale プロパティフィールドを使用します。例えば、Text Block ノード内のテキストのサイズをアニメーション化したい場合にこのアプローチを使用します。Font Size プロパティを使用してテキストを動的にスケールすると、Kanzi は異なるフォントサイズの複数のテクスチャを作成し、それらをメモリから解放しません。

  • 不必要なフィル操作を使用しないようにします。たとえば以下の操作は行わないでください。

    • 3Dプレーンで画面を埋める。例えば、コーナーにアルファ0のテクスチャを使用して円形のオブジェクトを描画する場合、フォームの周りのメッシュをカットすると、フィルレートの影響により、ほとんどの場合レンダリングが速くなります。

    • アルファを 0 に設定して 3D をレンダリングする。これによりフィルが発生しますが、視覚的な効果はありません。

  • エフェクトをリアルタイムでレンダリングする代わりに、エフェクトをテクスチャにベイクします。例えば、影や被写界深度をシミュレートするテクスチャを作成します。パフォーマンスが向上しますが、メモリ消費も増加します。

テクスチャにレンダリングされるノードの表示

フレームバッファオブジェクトの切り替えは、一部のプラットフォームでパフォーマンスの大幅な低下を引き起こす可能性があります。Kanzi がノードをテクスチャにレンダリングする条件は複雑になることがあります。例えば、回転、スケール、または不透明度が原因でテクスチャへのレンダリングが発生することがあります。

ノードがテクスチャにレンダリングされ、フレームバッファオブジェクトの切り替えを引き起こしているかどうかを確認するには、Preview で analyze-off-1 をクリックして Analyze モードに入り、analyze-on-1 を右クリックして Framebuffer objects を選択します。Preview は、透明なオレンジ色のストライプでテクスチャにレンダリングされているレイヤーをハイライトします。

関連項目

フラグメントシェーダーの最適化

レイアウトのレンダリングを最適化する

効率的なレンダリングのためのノードの設定

レンダリングを複数のフレームに分散する

Sorting Filter でオーバードローを防ぐ

2Dノードのキャッシング

部分的に透過的なノードをレンダリングする

シェーダースイッチの削減

アプリケーションのパフォーマンスのトラブルシューティング