プレビューでアプリケーションを分析する¶
Preview で、アプリケーションのパフォーマンスと内部構造を分析するために
をクリックします。
Preview Analyze モードに加えて、Kanzi はアプリケーションを分析するための他の方法を提供します。アプリケーションのパフォーマンスのトラブルシューティング と ベストプラクティス を参照してください。
Analyze モードのとき、Preview メインメニューを使用するか、
を右クリックして、Preview が Analyze モードのときに分析したいアイテムの種類を選択します。
Selection は選択されたノードをハイライトします。Preview でアプリケーションを編集する を参照してください。
Debug objects を表示:
ライト、カメラ、レイアウトノードなどのビジュアライゼーションノード。
カスタム 3D ノード用に作成したデバッグビジュアライゼーション。このようなビジュアライゼーションの例については、Node3D プラグインの例 を参照してください。
Allocated layout は、レイアウトの下にあるアイテムに割り当てられたスペースのバウンディングボックスを表示します。レイアウトコントロール (Layout control) ノード を参照してください。
Actual layout は、レイアウトの下でアイテムが使用するスペースのバウンディングボックスを表示します。レイアウトコントロール (Layout control) ノード を参照してください。
Grid cells は Grid Layout 2D ノードのセルを表示します。Grid Layout ノードを使用する を参照してください。
Rulers and guides は、アプリケーション内の要素を配置するのに役立つルーラーとガイドを表示します。ルーラーとガイドの使用 を参照してください。
Borders of 2D nodes は、2Dノードの境界をストライプの線で示します。
3D Grid は Scene ノードで地面のグリッドを表示します。
Bounding volumes は閉じたボリューム内のメッシュを表示します。
Framebuffer objects は、テクスチャにレンダリングされ、フレームバッファオブジェクトの切り替えを引き起こすノードを半透明の黄色の動くストライプでマークします。
レンダリングのベストプラクティス を参照してください。
Undrawn area は、アプリケーション画面外の領域とレンダリングされていないコンテンツのある領域の更新を示します。
Transparency は透明なノードを半透明の青い動くストライプでマークします。効率的なレンダリングのためのノードの設定 を参照してください。
Overdraw のビジュアライゼーションは、Kanzi が同じピクセルに複数回レンダリングされる領域を示します。より明るい緑色は、オーバードローの量が多いことを示しています。
Sorting Filter でオーバードローを防ぐ を参照してください。
Wireframe はすべてのコンテンツをワイヤーフレームモードで描画し、メッシュのジオメトリを表示します。
Kanzi はコンテンツにワイヤーフレームモードをグローバルに適用することを念頭に置いてください。例えば、このモードは、ポストプロセッシングエフェクトや、レンダーパスを使用して画面にブリットするコンテンツもワイヤーフレームとしてレンダリングします。
Vertex normals はメッシュ頂点の法線をRGBカラーとして視覚化します。
メッシュのローカル空間における法線方向ベクトルのx、y、zの値は、赤、緑、青の各色チャンネルの値を表します。Kanzi は、次の式に従って、対応する方向ベクトル成分の値から各色チャンネルの値を計算します。
\[ColorChannel = 0.5 + 0.5 * VectorComponent\]Performance HUD は、Kanzi アプリケーションの過去500フレームにおける全体的なパフォーマンス指標を示します。
Frame Duration (ms) は、最後のフレームをレンダリングするのにかかった時間をミリ秒単位で表示し、平均、最高、および最低の時間を示します。
Frame Duration (ms) グラフの上部の値は最長時間を示し、下部の値は最後の500フレーム中にフレームをレンダリングするのにかかった平均時間を示しています。
この情報を使用して、Kanzi アプリケーションのパフォーマンスボトルネックを特定します。たとえば、レンダリングを複数のフレームに分散させることで、アプリケーションのパフォーマンスを向上させる方法を見つけることができます。レンダリングを複数のフレームに分散する を参照してください。
Frames Per Second は、1秒あたりにレンダリングされるフレーム数を示します。
Animation Duration (μs) は、アプリケーション内のすべてのアニメーションを最後のフレームで実行するのにかかる時間をマイクロ秒単位で示し、平均、最高、最低の時間も表示します。
Batch Count は、個々のドローコールが何回実行されたかを示します(
glDrawElementsとglDrawArrays)。Kanzi Engine APIを使用して
Renderer::getBatchCountを呼び出すことで、バッチ数にアクセスできます。Batch Count グラフの上部の値は、直近の500フレームでのバッチの最大数を示し、下部の値は最後のフレームでのバッチの数を示します。
Triangle Count は、フレーム中に合計で描画された個々の三角形の数を示します。
Kanzi Engine APIで
Renderer::getTriangleCountを呼び出すことにより、三角形の数にアクセスできます。Texture Switches は、新しいテクスチャがGPUにバインドされた回数を示します。
Kanzi Engine APIで
Renderer::getTextureSwitchCountを呼び出すことにより、テクスチャスイッチのカウントにアクセスできます。FBO Switches は、GPUにバインドされたフレームバッファオブジェクトの数を示します。レンダリングのベストプラクティス を参照してください。
Kanzi Engine APIで
Renderer::getFramebufferSwitchCountを呼び出すことにより、バッファスイッチカウントにアクセスできます。Shader は、新しく適用されたバッチに対して新しいシェーダーがバインドされた回数と、最後のフレームに送信された個々のシェーダーユニフォームの数を示します。シェーダースイッチの削減 を参照してください。
Kanzi Engine APIで
Renderer::getShaderSwitchCountを呼び出すことにより、シェーダースイッチのカウントにアクセスできます。Kanzi Engine APIで送信されたユニフォームには、
Renderer::getUniformSendCountを呼び出すことでアクセスできます。Buffer Switches は、GPUにバインドされた頂点、インデックス、およびユニフォームバッファオブジェクトの数を示します。
Kanzi Engine APIで
Renderer::getBufferSwitchCountを呼び出すことにより、バッファスイッチカウントにアクセスできます。Buffer and Texture Data Updates は、新しい頂点バッファまたはテクスチャデータがGPUにアップロードされた回数を示します。同じバッファが書き込みおよび読み取り操作にアクセスされる場合、これらの重い操作はGPUの実行に遅延を引き起こす可能性があります。理想的な値は0です。
例えば、この値はテキストグリフキャッシュが頻繁に更新される必要がある場合に増加することがあります。この場合、グリフキャッシュの更新を減らすために、Text Block ノードの Font Size プロパティの値を減らしてください。
Kanzi Engine APIで
Renderer::getHeavyweightCallCountを呼び出すことで、これにアクセスできます。View Camera は、アプリケーション内でシーンを表示するために使用される Camera ノードの名前を示します。
Resource Memory Use は、Kanzi アプリケーションが使用するローカルGPUメモリ(VRAM)と非ローカルGPUメモリ(RAM)の推定量を表示します。
Performance HUD が Kanzi Studio Preview に表示する値と、ターゲットデバイスで Kanzi アプリケーションを実行したときに表示される値が異なるのは、Kanzi Studio がアプリケーション内のすべてのリソースをロードしてメモリに保持するためです。
Timers は
MainLoopSchedulerに登録されているタイマーハンドラーの数を示します。タイマーハンドラーが多すぎると、アプリケーションのパフォーマンスが低下する可能性があります。タイマーの追加 を参照してください。Kanzi Engine APIで
MainLoopScheduler::getTimersCountを呼び出すことにより、タイマーサブスクリプションの数にアクセスできます。Recurring Tasks は、メインループスケジューラーのステージに追加されたタスクの総数を示します。Kanzi Engine はデフォルトでいくつかのタスクを追加します。反復タスクの追加 を参照してください。
Kanzi Engine APIで
MainLoopScheduler::getTasksTotalCountを呼び出すことにより、反復タスクの数にアクセスできます。Animations は、Kanzi アプリケーション内のアクティブなアニメーションとすべてのアニメーションの数を表示します。
Kanzi Engine APIでアニメーションの数にアクセスできます。
アクティブなアニメーションの数を取得するには、
TimelineClock::getActiveTimelinePlaybackCountを使用します。すべてのアニメーションの数を取得するには、
TimelineClock::getTimelinePlaybackCountを使用します。
Frame time HUD は、過去500フレームの間における Kanzi アプリケーションのこれらのフレームタイムインジケーターを表示します。
Frame Duration (ms) は、最後のフレームをレンダリングするのにかかった時間をミリ秒単位で表示し、平均、最高、および最低の時間を示します。
Frames Per Second は、1秒あたりにレンダリングされるフレーム数を示します。
Animation Duration (μs) は、アプリケーション内のすべてのアニメーションを最後のフレームで実行するのにかかる時間をマイクロ秒単位で示し、平均、最高、最低の時間も表示します。
ヒント
Kanzi Studio が Analyze モードで異なるタイプのアイテムを表示する方法をカスタマイズするには、Edit > User Preferences を選択し、Preview タブでアイテムの色と線の太さを設定します。
Preview ログファイル¶
Kanzi Studio は Preview のログメッセージを %USERPROFILE%\AppData\Local\Temp\KanziStudioLogs\KanziPreview.log ファイルに保存します。
ログの詳細レベルを設定するには、<KanziInstallation>\Studio\Bin\KanziPreview.exe.config ファイルで logLevel キーの値を設定します。
NORMALは Kanzi Studio を設定して、エラーや例外を含む通常の Kanzi Studio Preview フローをログに記録します。VERBOSEは Kanzi Studio を設定して、Kanzi Studio と Preview の間のすべての低レベル通信をミリ秒単位の精度で記録します。ログレベルを
VERBOSEに設定すると、大量のログメッセージが Kanzi Studio のパフォーマンスを低下させる可能性があります。NONEは Kanzi Studio を設定して、KanziPreview.logファイルにメッセージを記録しないようにします。
例えば、Kanzi Studio と Preview の間のすべての通信を記録するには、テキストエディタで KanziPreview.exe.config ファイルを開き、次のように設定します。
<add key="logLevel" value="VERBOSE"/>
KanziPreview.exe.config に変更を適用するには、KanziPreview.exe.config ファイルを保存し、Ctrl F8 を押して Preview を再起動します。Preview の制御 を参照してください。
Preview を再起動するたびに、Kanzi Studio は KanziPreview.log ファイルの内容を上書きします。