フォト

Google AdSense

  • AdSense
無料ブログはココログ

« Open Problems in Real-Time Renderingのコース資料 | トップページ | GPD Pocket使ってみて »

2017.08.09

MicrosoftのDX12サンプルなどのHDR10動作について~PBRサンプルをHDR10出力にする

HDR Lighting and Displays
https://blogs.msdn.microsoft.com/chuckw/2017/08/08/hdr-lighting-and-displays/

上記記事を読んでいたんですが、結構MicrosoftのサンプルがHDR10対応してたんですね。まぁ、Xbox One Sとかは結構早くからしてましたからねぇ。

とりあえず、いろいろと試し足りコードを見てみましたがDirectXTK12のToneMap.fxにはちゃんと変換のシェーダが入っていますね。

https://github.com/Microsoft/Xbox-ATG-Samples/blob/master/Kits/DirectXTK12/Src/Shaders/ToneMap.fx

では、SimplePBR12で動かしてみようと試みてみました。

変更箇所は、SimplePBRUWP12.cppの21行目のm_deviceResources の初期化箇所ですね。

https://github.com/Microsoft/Xbox-ATG-Samples/blob/master/UWPSamples/Graphics/SimplePBR12/UWP/SimplePBRUWP12.cpp

一番最初の記事に戻りますが、DeviceResourcesクラスが対応ということなので見てみましたが、

m_deviceResources = std::make_unique(GetBackBufferFormat(), GetDepthFormat());

とあるコードを以下のように初期化すれば良いようです。最後の引数がポイントですね(それ以外はデフォルトの引数のまま)。これで内部でHDR10で動かす初期化コードが走ります。内部でディスプレイやGPUのサポートをチェックしてるので、このコードにしてもsRGB環境でクラッシュなどはないです。

m_deviceResources = std::make_unique(GetBackBufferFormat(), GetDepthFormat(), 2, D3D_FEATURE_LEVEL_11_0, DX::DeviceResources::c_EnableHDR);

これで無事に動作しました。グラフィックス診断でもTonemapのシェーダが呼ばれておりました。これは下記のコードの223行目のPIXBeginEvent(commandList, PIX_COLOR_DEFAULT, L"Tonemap HDR to SDR backbuffer");あたりのところですね。

https://github.com/Microsoft/Xbox-ATG-Samples/blob/master/UWPSamples/Graphics/SimplePBR12/Shared/SharedSimplePBR.cpp

« Open Problems in Real-Time Renderingのコース資料 | トップページ | GPD Pocket使ってみて »

Programming」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« Open Problems in Real-Time Renderingのコース資料 | トップページ | GPD Pocket使ってみて »