カテゴリー別アーカイブ: NVIDIA

GTC On-DemandでGTC 2017セッション動画が公開に

GTC On-DemandでGTC 2017セッション動画が公開になっています.

GTC On-Demand
http://on-demand-gtc.gputechconf.com/gtcnew/on-demand-gtc.php

GTC 2017セッション
http://on-demand-gtc.gputechconf.com/gtcnew/on-demand-gtc.php?searchByKeyword=&searchItems=&sessionTopic=&sessionEvent=2&sessionYear=2017&sessionFormat=&submit=&select=

NVIDIAのGDC 2017発表のスライドが公開

NVIDIAのGDC 2017発表のスライドが公開になっています.

GDC17 show guide from NVIDIA
https://developer.nvidia.com/gdc17

GDC Vaultでもすでにセッションは公開されていますが,動画ではなくスライドで公開されていますのでスライドだけ欲しいという方に便利かと思います.

それからこちでも動画が公開されるようですので,Vault会員でない方も良いかもしれません.

個別のセッションに関しては,今後の記事で取り上げるかもしれません.

GDC 2017セッション動画,スライドがGDC Vaultで公開

GDC 2017セッション動画,スライドの一部がGDC Vaultで公開で公開になっています.

http://gdcvault.com/browse/gdc-17/

GDC VaultはGDCのセッションの動画やスライドが公開されているデジタルライブラリで有料サービス(GDCのパスの種類によっては参加者は1年間閲覧可)ではありますが,無料で見れるものが多くあります.

GDCに行けなかった方も気になってたセッションが公開されている,ということがあるかもしれません.

個人的に気になるGDC 2017セッションメモ ver 0.1

2/27~3/3開催のGDC 2017のセッションが結構発表されてきているのですが,個人的に気になってるセッションを抜粋してメモしておきます.現地に行くことができなくてものちのちの資料公開などがあることが多いのでメモですね.

なお,まだ一か月以上ありますし,セッションの全部が公開されていないので定期的にアップデートしてversionを上げていきます.versionを上げる際には,この記事を更新するのではなく新規記事でたてます.

なお,今回はグラフィックスが中心でVRなどほかの分野は今後のバージョンで追加していきます.

グラフィックス

AAA

AAAタイトルのグラフィックス開発事例です.

‘Destiny’ Shader Pipeline

Natalya Tatarchuk氏はUnityに移ったのでどうなるのかわかりませんが,前世代機も含めたマルチプラットフォーム開発でどうやってるか気になるところですね.

http://schedule.gdconf.com/session/destiny-shader-pipeline

Efficient Texture Streaming in ‘Titanfall 2’

テクスチャストリーミングはなかなか自分では獲得できていない技術ですし,PBRになってテクスチャ枚数が増えてる状態でメモリは限られているのでチェックですね.

http://schedule.gdconf.com/session/efficient-texture-streaming-in-titanfall-2

‘Ghost Recon Wildlands’: Terrain Tools and Technology

ちょうどGDC会期中に近い時期に発売ですが,オープンワールドの技術ということでチェックですね.

http://schedule.gdconf.com/session/ghost-recon-wildlands-terrain-tools-and-technology

GPU-Based Run-Time Procedural Placement in ‘Horizon: Zero Dawn’

これも近いうちに出るタイトルですが,Horizon : Zero Dawnって植物とか画面の密度感あるなということでチェックです.

http://schedule.gdconf.com/session/gpu-based-run-time-procedural-placement-in-horizon-zero-dawn

Rendering Low LOD Cars at Lightning Speed in ‘Forza Motorsport 6’

http://schedule.gdconf.com/session/rendering-low-lod-cars-at-lightning-speed-in-forza-motorsport-6

Shoot for the Sky: The Ambitious HDR Time-Lapse Skies of ‘Forza Horizon 3’

http://schedule.gdconf.com/session/shoot-for-the-sky-the-ambitious-hdr-time-lapse-skies-of-forza-horizon-3

Film

ゲームではなく映画や映像系の事例.このタイプのセッションはVaultで公開されないし,撮影禁止が多いので現地で聴く意義が高いですね.

Realtime Rendering for Feature Film: Rogue One a Case Study

ローグワンのケーススタディですが,リアルタイムレンダリングというのが気になりますね.やっぱりイテレーションが大事ですので.たぶん,録画されず現地でしか聴けないセッションな気がします.

http://schedule.gdconf.com/session/realtime-rendering-for-feature-film-rogue-one-a-case-study

グラフィックステクニック

Geometry Caching Optimizations

ゲーム開発でもジオメトリキャッシュは活用されてきていますのでチェック.

http://schedule.gdconf.com/session/geometry-caching-optimizations

PBR Diffuse Lighting for GGX+Smith Microsurfaces

今までSpecularの話が多かったですが,Diffuseということで.

http://schedule.gdconf.com/session/pbr-diffuse-lighting-for-ggxsmith-microsurfaces

Subdiv for the PlayStation®4 (Presented by Sony Interactive Entertainment America)

限定的でもSubdivはそろそろゲームで使用できるのか?というのは気になっています.

http://schedule.gdconf.com/session/subdiv-for-the-playstation4-presented-by-sony-interactive-entertainment-america

Advanced Graphics Tech

Advanced Graphics Techのセッションシリーズは基本的にほとんど出るとは思います.

Direct3D12やVulkanネタの最新技術ですね.

Advanced Graphics Tech: “Async Compute: Deep Dive” & “Raster Ordered Views and Conservative Rasterization”

NVIDIAはPascalからAsync Compute対応しましたが,先行するAMDに比べて効果のほど,最適化のポイントがよくわかってないので気になりますね.あとRaster Ordered Viewsはできることはわかってますが,使えるのかいまいちわからん部分がありますね.活用事例が少なくて.

http://schedule.gdconf.com/session/advanced-graphics-tech-async-compute-deep-dive-raster-ordered-views-and-conservative-rasterization

Advanced Graphics Tech: “Cinematic Depth of Field” & “Advanced Particle Simulation in Compute”

http://schedule.gdconf.com/session/advanced-graphics-tech-cinematic-depth-of-field-advanced-particle-simulation-in-compute

Advanced Graphics Tech: “D3D12 and Vulkan Done Right” & “Wave Programming in D3D12 and Vulkan”

Waveプログラミングは今年のグラフィックスAPIのアップデートの大きなトピックなのでチェックですね.

http://schedule.gdconf.com/session/advanced-graphics-tech-d3d12-and-vulkan-done-right-wave-programming-in-d3d12-and-vulkan

Advanced Graphics Tech: Moving to DirectX 12: Lessons Learned

まだまだDirect3D11で,ってところは多いでしょうし移行中って多いでしょうからチェックですね.

http://schedule.gdconf.com/session/advanced-graphics-tech-moving-to-directx-12-lessons-learned

AMD

Advanced Shader Programming on GCN (Presented by AMD)

このセッションは,Vegaの世代のAMD GPUの話なので次のAMDのアーキテクチャ向けの業務やる人はチェックですね.あと,Wave level operationもHLSL 6.0の話題なのでチェック.

http://schedule.gdconf.com/session/advanced-shader-programming-on-gcn-presented-by-amd

Explicit DirectX 12 Multi GPU Rendering (Presented by AMD)

マルチGPUを相手にする機会はあまりないんですが,個人的にはGPUが分散した状態で1つのアプリケーションのレンダリングをやるということ自体は興味があります.

http://schedule.gdconf.com/session/explicit-directx-12-multi-gpu-rendering-presented-by-amd

Radeon ProRender and Radeon Rays in a Gaming rendering workflow (Presented by AMD)

こうしたトピックはゲーム向けじゃなさそうなのですが”Gaming rendering workflow”ということが気になりますね.

http://schedule.gdconf.com/session/radeon-prorender-and-radeon-rays-in-a-gaming-rendering-workflow-presented-by-amd

Real-Time Finite Element Method (FEM) and TressFX 4.0 (Presented by AMD)

AMDの髪向けライブラリのTressFXとリアルタイム有限要素法のセッション.

http://schedule.gdconf.com/session/real-time-finite-element-method-fem-and-tressfx-40-presented-by-amd

D3D12 & Vulkan: Lessons Learned

入門記事ですがチェックですね.

http://schedule.gdconf.com/session/d3d12-vulkan-lessons-learned

DirectX 12 Case Studies (Presented by NVIDIA)

http://schedule.gdconf.com/session/directx-12-case-studies-presented-by-nvidia

Frostbite

Frositteの関連セッションは数があるので,1つのジャンルでいいかと思います.UnityやUE4と違いFrostbiteはEA DICEが中心に開発して,EAの傘下スタジオで使われるインハウスエンジンなのでインハウスで大規模タイトルをやってるところの励みになりますね.

4K Checkerboard in ‘Battlefield 1’ and ‘Mass Effect Andromeda’

昨年末から家庭用も徐々に4K対応が必要になってきたわけですが,GPUのそのまま解像度を上げる…というのはなかなか大変なのでレンダリングの工夫がいるわけですが,その中でCheckerboardレンダリングは流行っています.

もとは,GDC 2016のRainbow SIx SiegeのこれはFrostbiteでの実装事例ですね.

http://schedule.gdconf.com/session/4k-checkerboard-in-battlefield-1-and-mass-effect-andromeda

FrameGraph: Extensible Rendering Architecture in Frostbite

個人的に注目度高いのですが,FrostGraphというレンダリングの拡張の仕組みの話ですね.グラフベースでレンダリングパイプライン構築できれば…と思う人は多いですよね.

http://schedule.gdconf.com/session/framegraph-extensible-rendering-architecture-in-frostbite

High Dynamic Range Color Grading and Display in Frostbite

昨年からHDR TV(BT.2020)対応始まりましたが,Frostbiteの実装事例ですね.

http://schedule.gdconf.com/session/high-dynamic-range-color-grading-and-display-in-frostbite

Microsoft

D3D12 Performance Tuning and Debugging with PIX and GPU Validation (Presented by Microsoft)

先日,Windows 10向けのPIX出ましたがそのセッションですね.

http://schedule.gdconf.com/session/d3d12-performance-tuning-and-debugging-with-pix-and-gpu-validation-presented-by-microsoft

Game Mode and the Evolution of Cross-Platform UWP Game Development (Presented by Microsoft)

Windows 10のCreator UpdateのGame ModeとUWPの話のようですね.

http://schedule.gdconf.com/session/game-mode-and-the-evolution-of-cross-platform-uwp-game-development-presented-by-microsoft

Windows Holographic Rendering: One SDK to target VR and AR ecosystems (Presented by Microsoft)

Windows Holographicsの開発セッション.VRとARのSDKを1つの統合したもので提供するようですね.GDC 2017の中でも注目度が高いのではないかと思います.

http://schedule.gdconf.com/session/windows-holographic-rendering-one-sdk-to-target-vr-and-ar-ecosystems-presented-by-microsoft

NVIDIA

D3D Async Compute for Physics: Bullets, Bandages, and Blood (Presented by NVIDIA)

ほかのセッションのところでも書いてますが,Pascal世代のGeForcedでのAsync Computeの活用方法はちゃんと聞いておきたいですね.

http://schedule.gdconf.com/session/d3d-async-compute-for-physics-bullets-bandages-and-blood-presented-by-nvidia

NVIDIA Vulkan Update (Presented by NVIDIA)

VK_NVX_device_generated_commandsはAPIの標準になってほしい拡張ですね.

http://schedule.gdconf.com/session/nvidia-vulkan-update-presented-by-nvidia

Photogrammetry for Games: Art, Technology and Pipeline Integration for Amazing Worlds (Presented by NVIDIA)

NVIDIAのセッションというのが驚きましたが,フォトグラメトリーはデータ作成として一般化してきましたね.

http://schedule.gdconf.com/session/photogrammetry-for-games-art-technology-and-pipeline-integration-for-amazing-worlds-presented-by-nvidia

Real-Time Rendering Advances from NVIDIA Research (Presented by NVIDIA)

NVIDIA Reserchの最近の研究トピックが1セッションでいろいろと聞けるのはよさそうですね.

http://schedule.gdconf.com/session/real-time-rendering-advances-from-nvidia-research-presented-by-nvidia

Unity

The Future of Rendering in Unity (Presented by Unity Technologies)

Unityの将来のレンダリングの話ですね.セッションのスピーカーがTBDですが,先日移籍したNatalya Tatarchuk氏でしょうか?

http://schedule.gdconf.com/session/the-future-of-rendering-in-unity-presented-by-unity-technologies

Unreal Engine 4

Stylized Character Creation in UE4 Mobile Games

モバイルでやるということが気になりますね.

http://schedule.gdconf.com/session/stylized-character-creation-in-ue4-mobile-games

OpenGLでReversed-Zに切り替える行うチュートリアル記事

最近,UnityがDepth Bufferの方針をReversed-Zに変えたことで話題になりましたが,OpenGLでReversed-Zに切り替える行うチュートリアル記事を公開している人がいました.

Reversed-Z in OpenGL
https://nlguillemot.wordpress.com/2016/12/07/reversed-z-in-opengl/

Reversed-Zに関しては,ゲームコンソールにGPUが搭載されたぐらいのころからいろいろと議論があったとは思いますが,かなり前なのでなかなかまとまった資料が現在見つけにくくなってる(古くて消えてる)ところがありますが,NVIDIAのDepth Precision Visualizedは振り返るのによいと思います.

Depth Precision Visualized
https://developer.nvidia.com/content/depth-precision-visualized

NVIDIAのVulkan Device-Generated Commands拡張のサンプルと記事

以前,NVIDIAのVulkan Device-Generated Commands拡張について記事を書きました(以前の記事)が,サンプルと解説記事が公開されています.

Driver and New Sample for VK_NVX_device_generated_commands
https://developer.nvidia.com/driver-and-new-sample-vknvxdevicegeneratedcommands

ソース
https://github.com/NVIDIAGameWorks/GraphicsSamples/tree/master/samples/vk10-kepler/BasicDeviceGeneratedCommandsVk

ドキュメント
http://nvidiagameworks.github.io/GraphicsSamples/DeviceGeneratedCommandsVulkanSample.htm

 

Vulkanでデバッグマーカーを打つ方法

前回,VulkanのプログラムでNsightでキャプチャする話を書きましたが,Vulkanでプロファイラを使用する際のデバッグマーカーの打ち方について書き忘れていたのでこちらの記事で取り上げます.

Vulkanのサンプル書いてる人がRenderDocへの対応の話で記事を書いていました.

OFFLINE DEBUGGING IN VULKAN WITH VK_EXT_DEBUG_MARKER AND RENDERDOC
http://www.saschawillems.de/?page_id=2017

Vulkanではツールなど向けにVK_EXT_debug_markerという拡張を用意しています.これを使うとツール上でとれるイベントマーカーやオブジェクト(BufferやImage)への名前付けやタグ付けができるようですね.

上の記事の著者によるサンプルもGitHubにありました.

debugmarker
https://github.com/SaschaWillems/Vulkan/tree/master/debugmarker

これをNsightでキャプチャしてみます.

debugmarker001

Scrubber見ているとPerfMarksがついてるのがわかります.

debugmarker002

Reouscesでは一部のImageについては名前がついているのがわかります.

debugmarker003

ちゃんとマーカーが使えたので,Vulkanでは,VK_EXT_debug_markerでよさそうですね.

NVIDIA Nsight Visual Studio Edition 5.2 RC1を見ていく~Vulkan編

はじめに

先日の「NVIDIA Nsight Visual Studio Edition 5.2 RC1を見ていく~Direct3D12編」の記事に続いてVulkan編です.Vulkanへの対応に関してはまだ開発途上のようなので一部の機能に限られるようですが,現状サポートされているものを見ていきます.

今回キャプチャ対象のVulkanのプロジェクトは定番のサンプルを使っていきましょう.

https://github.com/SaschaWillems/Vulkan

Vulkanのプログラムのキャプチャ

まずはキャプチャ対象のプログラムをビルドしておきます.

VulkanのプログラムのキャプチャもDirect3D12の時と同じくVisual StudioからNsightメニューStart Graphics Debuggingをします.

vulkan001

ひとまずshadowmappingサンプルを起動してみました.

vulkan002

どうもほかのグラフィックスAPIの時と違ってCtrl + ZでHUDが出てこないのでVisual StudioのNsightメニューのPause and Capture Frameします.

vulkan003

これでキャプチャはできました.

vulkan004

Vulkan向けにサポートしている機能

Nsightで見れるものというのは,基本的にはNsightのWindowsのところ以下にあるものなのでそれを見ていきます.

vulkan005

Gprahics Debug FoucusやShader ListはほかのグラフィックスAPIにもあるようなものですね(System InfoはVulkanのデバッグに関連しないので割愛).以下がサポートしているものですね.

  • API Inspector
  • API Statics
  • Current Target
  • Events
  • Geometry
  • Memory Pool
  • Resources
  • Scrubber

上から順に説明をしていきたいところですが,Scrubberは何かと単語として出てくるのでこれだけ先に説明します.

Scrubber

Scrubberは前回の記事でも紹介しましたが,Command QueueやCommnad Lists,Draw CallやClearなどをタイムラインで並べたものです.青いのがDrawですね.

vulkan008

このScrubberはparallaxmappingサンプルをキャプチャしたものですが,結構Drawが多いのですが,見てみると画面に描画してるテキストが1文字単位で1Drawという感じのようですね.

vulkan007

API Inspector

API InspectorはDrawコールなどの呼び出し時のシェーダやバインドされたリソース,Pipelineなどがわかります.

たとえば,parallaxmappingのキャプチャのEventID 13のDrawが画面の石の描画をやっているのですが,そのPipelineは下記ですね.PipelineではDirect3D12でいうとRoot Signatureにあたる箇所やDescriptor Set (Direct3D12だとDescriptor Table)みたいなものが見れます.下記ではシェーダステージに割り当てるUniform BufferやSamplerがわかりますね.

vulkan009

次のRender Passも開いてみます.RenderPassはDirect3D12にはない概念ではあるのですが,レンダーターゲットのフォーマットやClear Colorなどがまとまったものですね.

vulkan010

1つ1つ見ていくと大変なので次はFS,Fragment Shaderを見てみます.FSではテクスチャColorとNormal mapがバインドされているのはわかりました.

vulkan011

あとは,RasterやPix OpsなどはRasterizerやBlendのステートがわかります.

API Statistic

API StatisticはVulkanのvkではじまるAPIの呼び出し回数や平均,合計時価などがわかります.

vulkan012

Current Target

Current Targetは現在選択しているDrawまでのRender TargetやDepthやStencilを見れます.Depth Targetも見れるのでShadow mapなどのデバッグは現状でも大丈夫そうですね.

vulkan013

vulkan014

Events

EventsはVulkanのAPIのイベントを順番に表示したものですね.Scrubberではピンポイントに選択しにくいとかにはいいかもしないですね.フィルタもあるのでDrawとかBindとかの単語で絞ったりできますし.

vulkan015

Geometry

Geometryが現在選択しているDrawの頂点データなどを見ることができます.Graphicalならメッシュの形状が見ることができますし,Memoryなら頂点データの数値を見れます.

vulkan016

vulkan017

Memory Pool

Memory Poolはテクスチャとかバッファなどリソースの値をメモリ上に配置された状態でみれるようですね.テクスチャなどは画像のような形でグラフィカルに見たい場合は,次に説明するResoucesで見ます.

FlagsなどでそのリソースがDevice LocalだったりHost VisibleだったりとかがわかるのでCPUから読み書きが可能とかGPUでの読み出しのみとかそのあたりはわかりますね.このあたりは設定を間違うと速度減につながるので遅い処理のリソースは間違いがないかチェックするのに使えますね.

vulkan019

Resources

ResourcesはImage(テクスチャなど)とかバッファ,Frame Buffer Objectなどのリソースが見れます.カテゴリ単位で絞り込んだりはできるようですね.あとフィルタ機能もあるようですね.リソースにちゃんと名前を付けていれば活用できそうですね.

vulkan018

Scrubberは最初に説明したので,以上までが現状サポートしている機能のようですね.

おわりに

ひとまずざっとNsightのVulkan向けの機能がわかりました.現状,ベンダー非依存であればRenderDocが対応していますし,AMDならCodeXLも対応していますがNVIDIA GPU向け開発者としてはRenderDoc以外の選択肢ができたのはよいですね.

あと,現状はパフォーマンス分析関連の機能はあまり強くないのでそこは課題になりそうですね.

そのあたりの機能がほかのAPI向け並みにそろってくるとVulkan開発では便利にはなりそうですね.

NVIDIA Nsight Visual Studio Edition 5.2 RC1を見ていく~Direct3D12編

はじめに

先にリリースに関する記事を書きましたが,Nsight Visual Studio Edition 5.2 RC1が公開になりました.今回のアップデートを実際に試したのですが,なかなか新機能などがよくなっていたのでちょっと取り上げて行きたいと思います.

なおこの記事ではまずは,Direct3D12に関して取り上げていきますが,のちほどVulkanに関しての記事も用意します(基本的に機能は同じでVulkanが少ないだけなのでDirect3D12とVulkanに詳しい方であれば応用が利きます).

Nsight Visual Studio Edition 5.2 release candidate is now available for download!
https://developer.nvidia.com/nsight-visual-studio-edition-52-release-candidate-now-available-download

リリースノート:Nsight Visual Studio Edition 5.2 New Features
https://developer.nvidia.com/nsight-visual-studio-edition-5_2-new-features

すべての機能を網羅するのはなかなか大変ですので気になったものを中心に紹介していきます.特にDirect3D12向けの下記のあたりを扱おうかと思ってますが,Dynamic shader editing is now available(シェーダの動的な編集)だけちょっと割愛します.

  • Graphics profiling is now supported
  • Dynamic shader editing is now available
  • Improvements have been made to the scrubber for multi-threaded applications
  • Source code serialization of a frame is now supported

まずはDirect3D12アプリケーションキャプチャの手順を紹介していきますが,MicrosoftのサンプルのMiniEngineがある程度描画のフィーチャーが入ったサンプルなのでこれを中心にやっていきますが,一部の機能確認(複数のCommand Queueを使用していない)には適切ではないので他にn-Body Gravity Sampleなども使用します.

https://github.com/Microsoft/DirectX-Graphics-Samples

NsightでDirect3D12プログラムをキャプチャする

キャプチャしたいプログラムのビルドが終わったら(ビルド済みの実行ファイルに対するキャプチャも可能ですが今回は割愛します),Visual StudioのNsightメニューのStart Graphics Debuggingのからを選択します.

nsight

Start Graphics Debuggingを押すとプログラムが起動しますので,Ctrl + ZをしてNsightのHUDを出します.

nsight001

ウィンドウ右上にHUDが出たので,アイコンの一番下のを選択(?の下)すると下記のようにウィンドウ下部にタイムラインやHUDのアイコンが増えたりします.

nsight002

この画面が出たらVisual Studioの方を見ます.無事にキャプチャできました.

2016-08-18 (4)

このほかにキャプチャの方法としてVisual StudioのNsightメニューのPause and Capture Frameからもできます.

Scrubberを見ていく

Scrubberはなんて日本語に訳すのが適切か不明なのでそのまま行きますが,Visual Studioで上部の方で表示されてるタイムラインになります.

nsight003

Scrubberでは,グラフィックスのコマンドの実行状況が可視化されてわかりやすく並べられています.今回キャプチャしたMiniEngineはMicrosoftのサンプルで丁寧に作られているのでグラフィックスの処理の単位でマーカーが打ち込まれているので,階層的に表示され,処理がタイムラインで表示されます.こうしたマーカーの打ち方については後述の「自分のコードを分析しやすくするために…」で説明します.

Scrubberの上の方のAll Eventから適当なDrawコマンドを選択してみます.選択後にScrubberの下の段のタブをAPI InspectorにしてみるとDrawの中のシェーダステージや固定機能の確認ができます.下図の例ではPSを見てみた例ですね.RenderColorのDrawCallなのでShaderResouceViewにモデルのテクスチャがバインドされてるのがわかりますね.基本的なDrawCallに付随する情報など見れますね.

nsight006

とりあえず,API Inspectorとの組み合わせでデバッグはできそうですね.

Scrubberでは,Queueやスレッドなどの観点から描画コマンドの表示を変えたり,階層型をやめてフラットに表示するなどができます.

Range Profiler – グラフィックスのプロファイル機能周りを見ていく

グラフィックスのプロファイル機能で,個人的に良いと思ったのがRange Profilerですね.これはDirect3D12向けの新機能ではなくほかのグラフィックスAPI(Direct3D11やOpenGL, Vulkan)などにも対応した機能です.

デフォルトでは表示されていないのでNsightメニューのWindowsから呼び出します.

nsight007

Range Profilerの画面を下記にピックアップしてみました.

nsight008

Range ProfilerはScrubberと似た画面ですが,CommandListsの実行の部分で処理時間が表示されるようになっています.適切にマーカーを打っておけば処理ごとの処理時間が表示されるので自分たちが想定しているバジェットに収まってるかということを判断しやすいと思います.

それからRange Profilerはハードウェア的な部分も見ていけるようでDrawCallの処理におけるシェーダステージや固定機能の処理割合の算出やL2などの使用具合などを出してくれるようでボトルネック検出がVisual Studio 2015のグラフィックス診断よりも踏み込んだものになっています(その代わりNVIDIA GPU向けのベンダー依存な部分ありますが).

この機能は,下記の図のように適当なDrawを選択して(赤丸)で中段のPipeline OverviewをSummaryからRange Detailsに変えるとみることができます.緑丸でMemoryのところをRange Details見るとメモリ面のネックを探すのによさそうですね.テクスチャのキャッシュヒットなどもわかるようです.

nsight009

Range Profilerをきっかけにパフォーマンス分析と問題点を見つけるあたりのとっかかりにはなりそうですね.

複数Command Queueを使用したプログラムのキャプチャをしてみる

NVIDIA GeForce 10シリーズからAsync ComputeがサポートされたGPUがあるので複数のCommand Queueを使ったプログラムの開発を行う機会が増えていると思いますが,そういった場合のキャプチャもしてみます.MiniEngineは低スペック環境などをサポートしている関係であまりマルチスレッドやマルチCommand Queueを使用していないのでここではn-Body Gravity Sampleをキャプチャします.

2016-08-18

Scrubberを切り抜いてみたのが下記です.

scrubber002

複数のCommand Queue使ったプログラムではCommand Queueの処理待ちでリソースのやり取りや依存関係がある場合にSignalやWaitを使用しますが,Nsightではその様子が可視化されているのがわかります.

その他のDirect3D12向け機能

Descriptor Heap確認機能

これは以前のバージョンからあったかもしれないですが,Descriptor Heapの確認機能もちゃんとついているのでリソースの積み具合は確認できます.

この機能はVisual StudioのNsightメニューのWindowsからDescriptor Heapsを選択で開きます.

nsight010

見たところDescriptor Heapとその中でバインドされてるリソースがわかります.キャプチャしたプログラム側でリソースに対して名前が付けてあれば名前付きで見れるため確認が楽になります.名前の付け方については後述の「自分のコードを分析しやすくするために…」で説明します.

Root Parameter確認機能

Root Parametersの確認機能も付いています.この機能はVisual StudioのNsightメニューのWindowsからRoot Parametersを選択で開きます.

この機能は現在選択しているDrawCallなどにバインドされたRoot Parameters(Cbufferや定数,リソース)やDescriptor Tablesなどの内容や各リソースがDescriptor HeapsのEntity(Heapの中のどこにあるか)がわかります.

nsight011

自分のコードを分析しやすくするために…

これはNSightの機能ではないのですが,ここまでの話でMicrosoftのサンプルコードはキャプチャした際にScrubberやRange ProfilerでのデバッグがしやすいようにCommand Listsの一定の処理の単位にマーカーを打ったり, Descriptor Heap確認機能ではリソースにちゃんと名前がついたりしています.

Command Listsの一定の処理の単位にマーカーを打つのは下記の「アプリのユーザー定義イベントのマーク付け」のあたりに記載があります.

https://msdn.microsoft.com/ja-jp/library/hh873200.aspx

一部記事が切れていて,わからない部分があるのですがpix.h(Windows 10 SDKに入っています)を#includeして

#include <pix.h>

PIXBeginEvent()とPIXEndEvent()などでマーカーを付ける区間をくくることでイベントに名前を付けられます.

一方リソースに名前を付けたりするにはID3D12Object::SetNameで名前を付けることができます.ID3D12ResouceなどはID3D12Objectを継承しているのでSetNameで名前を付けることができます(製品のデータをぶっこぬかれる際のヒントを与えるのを防止のためReleaseでは使わない方がいいかもしれません).

ID3D12Object::SetName
https://msdn.microsoft.com/ja-jp/library/windows/desktop/dn788701.aspx

フレームのソースコードシリアライゼーション

新機能の”Source code serialization of a frame is now supported”に関してはシリアライゼーション?と思ったのですが,ドキュメントを読んでいくと1フレームのキャプチャを再現するためのソースコードを出力するようですね.Direct3D12になってCommandLists方式に変わったのでこういうことがしやすくなったと思われます.

http://docs.nvidia.com/nsight-visual-studio-edition/5.2/Nsight_Visual_Studio_Edition_User_Guide.htm#Save_Captures.htm?Highlight=serialization

これを使うとDirect3D12でグラフィックスデバッグしたい1フレームのCommand Listやバインドされたリソースやシェーダなどをそのままパックして後ほど検証用に再現できるようですね.

ゲーム開発をしていると大規模なアセットの読みこみやゲーム内の様々な処理を経てるわけですが,これを使うとピンポイントで問題のフレームのグラフィックス処理だけ切り出せるのでデバッグして検証するのが楽になるかもしれません.

手順としては,NsightのHUD上で保存をすれば自動的にVisual Studio向けのプロジェクトを出力してくれるようです.保存ボタンは,キャプチャ後に増えたアイコンにあります.下図の赤丸で囲った場所ですね.

nsight004

これを押すとデフォルトの設定だと下記にキャプチャ結果が出力されます.

C:\Users\ユーザー名\Documents\NVIDIA Nsight\Captures

nsight005

 

これを再度開くと該当フレームのグラフィックスの状態を再現したものをデータから再現するプロジェクトができるのでビルドして実行して,Nsightで再キャプチャするだけですね.

試しに,キャプチャ元のプログラムとシリアライゼーションから再現したものをキャプチャしたものを並べておきます.キャプチャ再現の方では一部の準備処理で全く同じというわけではないのですが,再現できているようです.再現版でも各DrawCallのパイプラインのリソースやシェーダのバインド状況などみることもできました.簡単に使用できるので,Nsight + Direct3D12が使える環境がある方は試してみるとよいと思います.

nsight003
元のキャプチャ

nsight012
シリアライズして再現キャプチャ

ちなみに,Range Profilerを比較して見たのですが,各処理の実行時間はさすがに一致しないようです(若干,シリアライズ再現の方が軽量のようです).ただ,処理の内訳や傾向はあまり変わらないようなので,シリアライズして再現したものでも重い処理は元の処理でも重いといえるとは思います.

おわりに

簡単ですが,NVIDIA Nsight Visual Studio Edition 5.2 RC1のDirect3D12向けの便利そうな機能を紹介していきました.5.2になってキャプチャが簡単になり,画面も見やすくなったのでかなり日常的に使っていきたいと思うようなプロファイラになっていますね.

今回はVisual Studio 2015からの呼び出しですが,ソースコードシリアライゼーションなどはVisual Studioを経ない環境から保存ができる体制ができると描画上のエラーなどがあった際のデバッグがはかどるんではないかと思います.パフォーマンス分析に関しても一定のフレームレート落ちの際に保存,みたいな体制が取れるとキャプチャしたあとにRange Profilerでネックを追うということもできると思います.

それから今回は自作プログラムが前提ですが,UnityやUnreal Engine 4などのDirect3D12ビルドした実行ファイルを追う方法なども確立すると便利という場面は多いかもしれませんね.

今回はDirect3D12ですが,Vulkanのデバッグや分析環境はまだまだ貧弱なので,Nsightの機能はまだ少ないですが,便利ということは多いと思います.Vulkanに関しては近いうちに新しく記事を書いておきたいと思います.

あと,前の記事で書き忘れていましたがOculus向けアプリケーション向けのデバッグ機能も充実させたようですが,残念ながらCV1持っていないのでちょっと紹介はできなさそうですね.

Nsight Visual Studio Edition 5.2 RC1公開

Nsight Visual Studio Edition 5.2 RC1が公開になっています.

Nsight Visual Studio Edition 5.2 release candidate is now available for download!
https://developer.nvidia.com/nsight-visual-studio-edition-52-release-candidate-now-available-download

リリースノート:Nsight Visual Studio Edition 5.2 New Features
https://developer.nvidia.com/nsight-visual-studio-edition-5_2-new-features

今回は,グラフィックス関連ではDirect3D12関連の機能が大幅強化とVulkanのサポートが入っています.Vulkanに関してはまだほかのAPIに比べると機能的には少ないですが,APIのトレースやDrawCallに関連したリソースのチェックなどはできました.

Direct3D12に関してはVisual Studio 2015のグラフィックス診断よりも便利な部分もあってよい更新なので後ほど記事を公開します(Vulkanに関しても).