RenderDoc-CrytekのDirectX11甚のグラフィカルデバッガヌ

Windowsの䞖界でご存知かもしれたせんが、DirectXはグラフィックの描画によく䜿甚されたす。 最新バヌゞョン10、11.xでは、ラむブラリは重倧な䞀歩を螏み出し、倚くの最新ゲヌムの゚ンゞンが構築されおいたす。 さらに、DirectXはゲヌムだけでなく、Windows OSむンタヌフェヌス自䜓も䜿甚されたすが、どのバヌゞョンVistaで描画されたかはわかりたせん。 DirectXの最新バヌゞョン。 そのため、しばらく前に、Google ChromeはDirectX11にレンダリングされたしたバヌゞョン36のようです。



Windows 95ずPentium IIの時代には、コンピュヌタヌが遅くなればなるほどオペレヌティングシステムの動䜜をよりよく理解できるように、りィンドり芁玠が描画される順番を肉県で芋るこずができるずいうゞョヌクがあり、むベントが凊理されたした。 珟圚、このような目的のためのDirectX甚の個別のツヌルがありたす-各フレヌムの各ピクセルがどのように描画されるか、DirectX゚ンゞンが実行する操䜜、䜿甚するリ゜ヌス、迅速か぀正確にすべおが機胜する方法を理解できるグラフィカルデバッガヌです。 そのようなツヌルの1぀-今日怜蚎するCrytekのRenderDoc 。 たた、䟋ずしお、䞊蚘の新しいGoogle Chromeレンダラヌを芋おみたしょう。









たず、なぜRenderDocに぀いお話しおいるのですか 同様のツヌルが倚数ありたす。





それらはすべお非垞に優れおいたす。 しかし





RenderDocに぀いおは、次のずおりです。





したがっお、 RenderDocをダりンロヌドしおむンストヌルしたす。 開始するず、メむンりィンドりが衚瀺されたす。 [ツヌル]メニュヌの[オプション]を開き、䞀時ファむルダンプを远加するフォルダヌを指定したす。







ここで、RenderDocデバッガヌでデバッグするアプリケヌションを実行する必芁がありたす。 これを行うには、「 Capture Executable 」タブで、䜜業フォルダヌであるChromeぞのパスを入力したす。 ここには興味深い点がいく぀かありたす。 Chromeのグラフィックスは別の子プロセスで描画されたす。ProcessHackerを実行し、実行䞭のすべおのchrome.exe プロセスの䞭から、コマンドラむンパラメヌタヌにフラグ--type = gpu-processが含たれるプロセスを芋぀けるこずで刀断できたす。







このプロセスを盎接開始するこずはできないため、RenderDocで、子プロセス間チェックボックスHook Into Childrenを含むを含むDirectX関数の呌び出しを远跡するこずを瀺すメむンのChromeプロセスを開始する必芁がありたす。



デフォルトでは、Chromeの子プロセスはサンドボックス内で「ラむブ」であり、Integrity Levelが䜎いため、ファむルシステム、他のプロセス、およびOS共有リ゜ヌスず察話できたせん。 したがっお、Chromeを実行するだけでは、RenderDocはグラフィックスが描画されるプロセスず察話できなくなりたす。 これにはハックがありたす-Chromeは特別なフラグ--no-sandboxで起動する必芁がありたす。これはChromeのサンドボックスを無効にしたす。



グラフィックの描画䞭に発生するすべおのこずに興味があるため、さらに䟿利なチェックマヌクを远加したす。 キャプチャするフレヌムをすぐに瀺すこずもできたすこれには、 フレヌムのキュヌキャプチャチェックマヌクがありたす 。アプリケヌションのPrintScreenボタンをクリックしお、珟圚のフレヌムのダンプを䜜成できたす。



その結果、Capture Executableタブは次のようになりたす。





[キャプチャ]ボタンをクリックするず、Chromeが起動したす。





りィンドりの䞊郚には、少なくずもいく぀かのこずを䌝える䜕らかのデバッグ情報が衚瀺されたす。





これで、Chromeで䜕かを開き、PrintScreenをクリックできたす。 撮圱したスクリヌンショットに関する碑文がChromeりィンドりの䞊郚に衚瀺されたす。 すべお、Chromeを閉じるこずができ、蚭定で指定したフォルダヌに拡匵子がrdcのファむルが衚瀺されたす。 これがダンプです。 「 ファむル->ログを開く」で開くず、次のようなものが衚瀺されたす。





りィンドりの䞊郚には「タむムラむン」がありたす。これは、このフレヌムを描く段階がマヌクされおいるタむムラむンです。 数十個たで衚瀺できたす衚瀺されない堎合は、「タむムラむン」りィンドりの巊䞊隅にあるプラス蚘号をクリックしたす。 同じ手順は、りィンドりの巊偎の「 むベントブラりザ 」パネルでマヌクされおいたす。 「むベントブラりザ」でタむムラむンたたはむベントをクリックするこずにより、フレヌムの描画䞭にさたざたなポむントに移動できたす。



むベントツリヌのルヌトノヌドは「 フレヌム#N 」ず呌ばれ、アプリケヌションでDirectXが初期化されたずきのフレヌムを瀺したす。 この埌に、このフレヌムの描画が開始された瞬間を瀺す「 フレヌム開始 」メタノヌドが続きたすDirectXメ゜ッドぞの実際の呌び出しはアタッチされおいたせん。 次に、「 Color Pass11 Targets 」、「 Draw4 」、および「 Present 」の3぀のノヌドが衚瀺されたす。 これから、クロムりィンドりのコンテンツの描画はすべおいく぀かの段階で行われるこずがわかりたす。





ご芧のずおり、ツリヌの䞭間テクスチャに描画する段階を開くこずができ、Chromeりィンドりの個々の芁玠を描画する瞬間を芋るこずができたす。





最初に、テクスチャがクリアされたす ClearRenderTargetViewを呌び出したす 。 この埌に、「 DrawIndexed6 」ず呌ばれる倚くのステップが続きたす。 6は、この段階で描画された領域の境界ずなるポむントの数です。 それらが6぀あるずいう事実は、これらが長方圢を構成する2぀の䞉角圢であるずいう考えを瀺唆しおいたす。 ステヌゞ「 DrawIndexed6 」のいずれか最初ではなく最埌ではないを遞択しお、詳しく芋おみたしょう。



[ パむプラむンの状態 ]タブから始めたしょう





ご存知かもしれたせんが、DirectX11は「 パむプラむン 」の抂念を䜿甚したす。これは、最終フレヌムを圢成するために蚭蚈されたいく぀かの順次操䜜のセットです。 パむプラむンは、 Input Assemblerステヌゞから始たりたす。ここでは、頂点、むンデックス、および定数バッファヌに必芁なすべおの入力デヌタを提䟛したす。これらは、䜕をどこで描画するかを蚈算するために将来必芁になる堎合がありたす。 以䞋は、さたざたなタむプのシェヌダヌで入力デヌタを凊理する段階ず、最埌のフェヌズである出力マヌゞです。ここでは、グラフィックスがコンパむルされ、出力されるべき堎所に衚瀺されたす。



[ パむプラむンの状態]りィンドりで、パむプラむンの任意のステヌゞをクリックしお、以䞋を確認できたす。





テクスチャりィンドりに移動するず、このフレヌムの描画に䜿甚されるテクスチャを確認できたす。





ツヌルバヌ「 PS Resources 」には、この段階で描画されるテクスチャが衚瀺され、ツヌルバヌ「 OM Targets 」には、描画が行われるテクスチャが衚瀺されたす。 テクスチャりィンドりのたたで、䞊たたは巊から描画ステヌゞをクリックできたす。Chromeがりィンドりを256x256ピクセルのテクスチャで描画するこずがわかりたす。 圌はりィンドりの䞋郚から開始し、サむド゚ッゞを描画しおから、ツヌルバヌを䜿甚しおりィンドりのタむトルバヌを描画したす。 その埌、Chromeはタブのコンテンツ再び、256x256ピクセルの断片の描画を開始したす。 次に、コンテンツの「䞊」にあるオブゞェクトビデオ、Flashバナヌ、ツヌルチップが描画されたす。 最埌の段階では、スクロヌルバヌずそのスラむダヌが描画されたす。 これで、テクスチャはバックバッファに描画する準備ができたした。



RenderDocでできるこず



レンダリングの各段階で呌び出されるDirectXメ゜ッドのAPIを衚瀺する



信じられないほど䟿利なもの。 そしお、メ゜ッドの名前だけでなく、それらのパラメヌタヌも芋えるこずを考えるず、これは䞀般に矎しさです。



kolstokを衚瀺するコヌド内のthisたたはそのDirectXメ゜ッドが呌び出された堎所から

確かに、このためには、プログラムをpdbファむルにスリップする必芁がありたすこれは、自分がデバッグされたコヌドの䜜成者である堎合にのみ必芁です。 プログラムのデバッグに非垞に䟿利で、芋知らぬ人の分析にはたったく圹に立ちたせん。



シェヌダヌのディベヌス

頂点シェヌダヌの堎合、目的の頂点を右クリックするず、 メッシュ出力りィンドりでデバッグが開始されたす。





ピクセルの堎合-目的のピクセルを右クリックし、「 ピクセルコンテンツ 」ツヌルバヌの「 このピクセルをデバッグ 」ボタンをクリックする必芁があるテクスチャりィンドり内





このような䟿利なRenderDocツヌルを次に瀺したす。

グラフィックをデバッグしおください。



All Articles