グラフィックス ピクセル履歴
Visual Studio のグラフィックス診断ツールの 1 つである [グラフィックス ピクセル履歴] は、ゲームやアプリの特定のフレームにおいて、特定のピクセルが Direct3D イベントの影響をどのように受けたかを理解するのに役立ちます。
[グラフィックス ピクセル履歴] ウィンドウを次に示します。
注意
Visual Studio 2013 Update 3 以降、グラフィックス診断ツールのウィンドウは、独立した Visual Studio シェルのコピー内でホストされます。グラフィックス分析と呼ばれるこのカスタマイズされたシェルでは、不要なメニューとオプションは表示されなくなりますが、その点を除けば、以前と同じピクセル履歴とワークフローが提供されます。この変更の詳細については、「グラフィックス診断の概要」を参照してください。
ピクセル履歴について
[グラフィックス ピクセル履歴] を使用すると、レンダー ターゲットの特定のピクセルが、特定のフレームにおいて Direct3D イベントの影響をどのように受けたかを分析できます。 ピクセルの最終的なカラー値が、後続のイベントまたは同じイベント内の後続のプリミティブによって変更された場合でも、レンダリングに関する問題の発生元である Direct3D イベントを正確に特定できます。 たとえば、ピクセルが正しくレンダリングされず、その色がフレームバッファー内で別の半透明ピクセルの色と混ざり合うことによって、あいまいになる場合があります。 レンダー ターゲットの最終的な内容だけを手がかりに、このような問題を診断することは困難です。
[グラフィックス ピクセル履歴] ウィンドウには、選択したフレームにおけるピクセルの完全な履歴が表示されます。 ウィンドウの上部にある [最終フレーム バッファー] には、フレームの最後でフレーム バッファーに書き込まれた色だけでなく、レンダリング元のフレームや画面座標など、ピクセルに関する追加情報が表示されます。 この領域には、[アルファの描画] チェック ボックスも含まれています。 このチェック ボックスがオンになっている場合、[最終フレーム バッファー] の色と中間のカラー値が、チェッカー ボード パターンを使用して透明に表示されます。 このチェック ボックスがオフの場合、カラー値のアルファ チャネルは無視されます。
ウィンドウの下部には、ピクセルの色に影響を与える可能性があったイベントと、フレーム バッファー内のピクセルの初期カラー値と最終カラー値を表す [初期] および [最終] 擬似イベントが表示されます。 初期カラー値は、ピクセルの色を変更した最初のイベントによって決定されます (通常は Clear イベント)。 ピクセル履歴には、他のイベントがそのピクセルに影響を与えなかった場合でも、これら 2 つの擬似イベントが常に含まれます。 他のイベントがピクセルに影響を与える可能性があった場合、それらは [初期] イベントと [最終] イベントの間に表示されます。 イベントを展開すると、それらの詳細を表示できます。 レンダー ターゲットをクリアするイベントなど、単純なイベントが影響を与えるのはカラー値だけです。 描画呼び出しなどのより複雑なイベントは、ピクセルの色に影響を与える可能性がある、1 つ以上のプリミティブを生成します。
イベントによって描画されたプリミティブは、それらのプリミティブ型とインデックス、およびオブジェクトの合計プリミティブ数によって識別されます。 たとえば、三角形 (1456) / (6214) のような識別子は、プリミティブが 6214 個の三角形で構成されるオブジェクトの 1456 番目の三角形に対応することを意味します。 各プリミティブ識別子の左側には、プリミティブがピクセルに与えた影響を要約するアイコンが表示されます。 ピクセルの色に影響を与えるプリミティブは、結果の色で塗りつぶされた角丸四角形で表されます。 ピクセルの色に影響を与えるプリミティブから除外されるプリミティブは、そのピクセルが除外された理由を示すアイコンで表されます。 これらのアイコンについては、この記事で後述する「Primitive exclusion」で説明されています。
各プリミティブを展開すると、ピクセル シェーダーの出力が、どのように既存のピクセルの色にマージされ、結果の色が作成されたかを調べることができます。 ここでは、プリミティブに関連付けられているピクセル シェーダーのコードを確認またはデバッグしたり、頂点シェーダー ノードをさらに展開して、頂点シェーダーの入力を確認したりすることもできます。
プリミティブの除外
プリミティブがピクセルの色に影響を与えるプリミティブから除外される場合、その除外の理由はさまざまです。 それぞれの理由は、次の表に記載されているアイコンで表されます。
アイコン |
除外の理由 |
---|---|
ピクセルは深度テストに失敗したため除外されました。 |
|
ピクセルはハサミ テストに失敗したため除外されました。 |
|
ピクセルはステンシル テストに失敗したため除外されました。 |
描画呼び出しの除外
描画呼び出し内のすべてのプリミティブが、テストに失敗したことが原因で、レンダー ターゲットに影響を与えるプリミティブから除外された場合、その描画呼び出しは展開できず、除外の理由に対応するアイコンが、描画呼び出しの横に表示されます。 描画呼び出しの除外の理由は、プリミティブの除外の理由と似ており、そのアイコンも似ています。
シェーダー コードの表示およびデバッグ
シェーダーに関連付けられているプリミティブの下にあるコントロールを使用すると、[頂点シェーダー]、[ハル シェーダー]、[ドメイン シェーダー]、[ジオメトリ シェーダー]、または [ピクセル シェーダー] のコードを表示できます。
シェーダーのソース コードを表示するには
- 表示するシェーダーに関連付けられているプリミティブの下から、シェーダーのタイトルを選択します。たとえば、[頂点シェーダー] を選択すると、頂点シェーダーのソース コードを表示できます。
シェーダーをデバッグするには
- デバッグするシェーダーに関連付けられているプリミティブの下で、シェーダーのタイトルの右側にある [デバッグ開始] を選択します。
グラフィックス オブジェクトへのリンク
ピクセル履歴のグラフィック イベントについて理解するために、イベントの発生時点におけるデバイスの状態や、そのイベントで参照されている Direct3D オブジェクトに関する情報が必要になる場合があります。 [グラフィックス ピクセル履歴] では、ピクセル履歴内のイベントごとに、その時点のデバイスの状態と関連オブジェクトへのリンクが提供されます。