レンダリングのベストプラクティス¶
レンダリングパフォーマンスを最適化すると、アプリケーションのパフォーマンスが大幅に改善する可能性があります。
Kanzi はノードを次のようにレンダリングします:
画面の外部のノードがレンダリングおよび変換されます。
Blend Intensity プロパティが0に設定されている3Dノードがレンダリングされます。
Visible プロパティが無効になっている 3D ノードとその子ノードはレンダリングされませんが、変換されます。
Visible プロパティが無効になっている Scene ノードとその子ノードは、レンダリングも変換もされません。
Opacity プロパティが0に設定されている2Dノードはレンダリングされず、その子ノードもレンダリングされませんが、変換されます。
Visible プロパティが無効になっている 2D ノードはレンダリングされず、その子ノードもレンダリングされませんが、変換されます。
Visible プロパティが無効になっている Viewport 2D ノードの 3D コンテンツは、レンダリングも変換もされません。
アプリケーションのレンダリングパフォーマンスの最適化¶
アプリケーションのレンダリングパフォーマンスを最適化するには:
フラグメントベースの計算を多数含むシェーダーが、レンダリングで最も「重い」部分となる可能性があります。フラグメントシェーダーの最適化 を参照してください。
シーンの変更により生じるレイアウトの再計算が原因で、CPU のパフォーマンスが低下する可能性があります。レイアウトのレンダリングを最適化する を参照してください。
プロパティタイプに Affect Layout が有効になっていて、そのプロパティの値がノードで変更されると、Kanzi はそのノードのレイアウトを再計算します。必要な場合にのみレイアウトを再計算するようにしてください。例えば、毎フレームレイアウトを再計算すると、アプリケーションのパフォーマンスが低下します。Affect Layout は、レイアウトに影響を与える場合にのみ Kanzi に付属するプロパティで有効になります。カスタムプロパティタイプの場合、レイアウトに影響を与えるかどうかを設定できます。プロパティタイプを作成する を参照してください。
1 つのフレーム全体のレンダリングにかかる処理量と時間を削減するには、レンダリングワークロードを複数のフレームに分散します。レンダリングを複数のフレームに分散する を参照してください。
オーバードローが過剰になると、フィルレートが増加して GPU のパフォーマンスが劣化する可能性があります。Sorting Filter でオーバードローを防ぐ を参照してください。
不透明なコンテンツをレンダリングするときには、常に前から後ろの順にレンダリングします。特別な理由がある場合にのみ、後ろから前にレンダリングしてください。
透明ノードの可視化では、ブレンド式を正しく解決するための適切なデータが背後にあることが重要なので、透明ノードを正しくレンダリングするには、後面から前面の順にレンダリングする必要があります。部分的に透過的なノードをレンダリングする を参照してください。
シェーダープログラム間の過剰なスイッチングが必要になるような順序でノードが提示されると、レンダリング速度が低下する可能性があります。シェーダースイッチの削減 を参照してください。
各レンダーターゲットの最初の Viewport ノードのレンダーパスを設定して、すべてのバッファをクリアします。
すべてのレンダーターゲットを複数回クリアしないようにしてください。
レンダーターゲットの色、デプス、ステンシルを複数回クリアしないでください。
重なり合うバックグラウンドブラシを削除します。たとえば、RootNode ノードとその子ノードの両方にバックグラウンドブラシが設定されている場合は、RootNode ノードからバックグラウンドブラシを削除します。
アニメーションアイテムが移動中は低品質でレンダリングします。パフォーマンスが向上しますが、品質が低下します。
Text Block ノード内のテキストのサイズを動的に変更するには、Font Size プロパティではなく、Render Transformation プロパティまたは Layout Transformation プロパティの Scale プロパティフィールドを使用します。例えば、Text Block ノード内のテキストのサイズをアニメーション化する場合にこの方法を使用します。Font Size プロパティを使用してテキストを動的にスケーリングすると、Kanzi はフォントサイズごとに複数のテクスチャを作成し、フォントサイズごとにグリフメトリクスを保持し、それらをメモリから解放しません。
不必要なフィル操作を使用しないようにします。たとえば以下の操作は行わないでください。
3Dプレーンで画面を埋める。例えば、コーナーにアルファ0のテクスチャを使用して円形のオブジェクトを描画する場合、フォームの周りのメッシュをカットすると、フィルレートの影響により、ほとんどの場合レンダリングが速くなります。
アルファを 0 に設定して 3D をレンダリングする。これによりフィルが発生しますが、視覚的な効果はありません。
エフェクトをリアルタイムでレンダリングする代わりに、エフェクトをテクスチャにベイクします。例えば、影や被写界深度をシミュレートするテクスチャを作成します。パフォーマンスが向上しますが、メモリ消費も増加します。
テクスチャにレンダリングされるノードの表示¶
フレームバッファオブジェクトの切り替えは、一部のプラットフォームでパフォーマンスの大幅な低下を引き起こす可能性があります。Kanzi がノードをテクスチャにレンダリングする条件は複雑になることがあります。例えば、回転、スケール、または不透明度が原因でテクスチャへのレンダリングが発生することがあります。
ノードがテクスチャにレンダリングされ、フレームバッファオブジェクトの切り替えを引き起こしているかどうかを確認するには、Preview で
をクリックして Analyze モードに入り、
を右クリックして Framebuffer objects を選択します。Preview は、透明なオレンジ色のストライプでテクスチャにレンダリングされているレイヤーをハイライトします。