フォト

Google AdSense

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

« 2017年8月 | トップページ

2017.09.20

GTC 2017 : ADVANCES IN REAL-TIME GRAPHICS AT PIXARの動画

ここ数年はPixarも結構リアルタイムレンダリング(とは言ったもののゲームにおけるリアルタイムととらえ方は違うけど)するツールを結構作ってますのでチェックしたいところですね。

http://on-demand.gputechconf.com/gtc/2017/video/s7482-david-yu-advances-in-real-time-graphics-at-pixar_POLJEREMIASVILA_1.mp4

SIGGRAPH ASIA 2017の論文が結構わかってきてる

SIGGRAPH ASIA 2017の論文が結構わかってきてますね。

http://kesen.realtimerendering.com/siga2017Papers.htm

まずはRemedyの人のが気になるところ。

Real-time Global Illumination by Precomputed Local Reconstruction
from Sparse Radiance Probes
https://users.aalto.fi/~silvena4/Projects/RTGI/index.html

2017.09.18

OpenEXRの使用機会が増えてきたので

最近、OpenEXRの使用機会が増えてきたのでメモです。

DirectXTexのテクスチャコンバータをOpenEXR対応にする手順のメモ
http://www.shader.jp/?page_id=2055

2017.09.14

GPD Pocketでゲームするためにゲームパッド購入

GPD PocketはGPD Winと違って本体にゲームパッドの機能がないので、ゲームパッドどうしようかと探してみたけど、BluetoothでXInput互換のゲームパッドがあったので購入しました。

このサイズなら一緒に持ち運んでも問題なさそうですね。

Unity 2017.2のGPUスキニング

現在、βのUnity 2017.2のリリースノートを見ていたんですが、

Graphics: Added GPU Skinning via compute on Vulkan, D3D12, PS4 and Xbox One.

と言うことで、Vulkan、Direct3D12、コンソールの2機種がGPUスキニングがComputeになるようですね。

https://unity3d.com/jp/unity/beta/unity2017.2.0b11

2017.09.13

HLSL 6.0のWave Operationのサンプルを動かしてみた

HLSL 6.0の目玉(?)Wave処理のサンプルを動かしてみました & 動かし方ですね。VulkanだとSubgroups処理ですね。

Shader Model 6 Wave Intrinsicsサンプル
http://www.shader.jp/?p=2036

標準機能化することで新しいアルゴリズムを生み出す余地があるのがいいですね。

HDR時代のテクスチャ

前の記事のスライドの22ページ目見てたらHDRでのイメージアセットで何を使うかいいかという話がありますね。

Texture

とりあえず、ランタイムではBC6Hを使えばよさそうですね。ただし、αチャンネルないのが注意ですね。

それから、PC上でのオーサリングのフォーマットはJPEG XRを勧められてますね。浮動小数点フォーマット、αチャンネル、ロスレス対応でSDRでもsRGBでうまく機能するみたいですね。

そのほかに、OpenEXRやJPEG w/ICC profileなどがあがってますね。この二つだとツールの対応でOpenEXRでしょうかね。

とりあえず、JPEG XRについてはちょっと調べないと。

2017.09.12

Build 2017のセッションLighting up HDR and advanced color in DirectX

Build 2017のセッションLighting up HDR and advanced color in DirectXが公開されていますが、これは見落としてました。

まだまだWindows 10 Creators UpdateのHDR10関連は手探りなので見ていかないと。

スライド

動画

GPUスキニングをCompute Shaderで実行するサンプル

Skinning in a Compute Shader
https://turanszkij.wordpress.com/2017/09/09/skinning-in-compute-shader/amp/

GPUスキニングをCompute Shaderで実行するというのは、今では結構やっているところが多い(さらにBlendShapeなんかも)と思うのですが、その入門的な記事がありますね。

GPUスキニングをCompute Shaderで実行する背景としては、現在のレンダリングパイプラインでは1つのスキニングするモデルを影のパス、Z-prepass、G-bufferパス、ライティングパスなど何度もDrawにつっこむようなケースで毎回頂点シェーダでスキニングを計算するのは無駄が多いというところにあります。

Direct3D10が登場したときは、Geometry ShaderとSteam Outputを駆使してスキニングをキャッシングして再利用する手法が生まれました(OpenGLならTransform Feedback)。

ただ、Geometry Shaderのパフォーマンス的なペナルティ(頂点シェーダも回るし)やSteam Outputをの使いにくさ(トライアングルストリップにされる)などが使い勝手が悪い部分でした。

Direct3D11になって登場した、Compute Shaderではそのあたりが、解消されてトライアングルリストでインデックスバッファなしで行けますね。

ところで、上記の記事では頂点バッファの各要素がByteAddressBuffer になっていますが、これはDirect3D11.0の制約ですね。Direct3D11.0ではStructured Bufferを頂点バッファにできないので、Direct3D12なんかだとこれがもうちょっと楽になるんじゃないかと思います。あとは、Async Computeにスキニングを投げることもできますね。

そのほかに、Direct3D11.1であれば、Compute Shaderではなく頂点シェーダだけで実行して、UAVに出力するという手もなくはないですね。これは元の頂点を読みだす点でパフォーマンスで有利かもしれません。ただ、これはAsync Computeに投げたりはできないですね。

2017.09.05

ディスプレイ情報の取得がDXGI 1.5でなくDXGI 1.6を必要とする理由

DXGIにおけるHDRのサンポートはDXGI 1.5で入りました。

High Dynamic Range and Wide Color Gamut参照
https://msdn.microsoft.com/en-us/library/windows/desktop/mt661818(v=vs.85).aspx

しかし、今回のディスプレイ情報の取得がDXGI 1.5でなくDXGI 1.6(Creators Update)を必要とする理由はディスプレイ情報のDescを取得できるIDXGIOutput6のサンポートがDXGI 1.6からなんですよね。

IDXGIOutput6
https://msdn.microsoft.com/en-us/library/windows/desktop/mt825240(v=vs.85).aspx

…ということでCreators Updateの機能って感じですね。

ディスプレイごとの色域表示への道

Di2thkaueaa9y0o

上記の画像は、HDR10対応のディスプレイUP2718Qで例ですね。カタログスペックでは1,000cd/m2ですが、たしかに最大輝度(Max Luminance)が1,000nits超える感じです。

ところで、世の中にはRec. 2020の色空間をすべてカバーするディスプレイはないようなので、カバー率はカタログを見る必要があります(上の機種ではRec. 2020 76.9%とのこと)。

昨日のプログラムについて、Twitterなどでいろいろとフィードバックをもらって、次はどうしようかと考えていたのですが、色域を表示したいと思います。実は昨日の実装中に必要なパラメータは取得できていました。

DXGI_OUTPUT_DESC1
https://msdn.microsoft.com/en-us/library/windows/desktop/mt825228(v=vs.85).aspx

以下のメンバから色域は判別できるようですね。これらはそれぞれ2次元の座標になっています。

FLOAT RedPrimary[2];
FLOAT GreenPrimary[2];
FLOAT BluePrimary[2];
FLOAT WhitePoint[2];

何に対する座標かというとCIE 1931色空間の座標で、図中のX、Yに対応します。

CIE 1931 color space
https://en.wikipedia.org/wiki/CIE_1931_color_space#CIE_RGB_color_space

下記の記事なんかを読んでいるとCIE 1931色空間で原色の座標RedPrimary、GreenPrimary、BluePrimaryがRec.2020のフルの色域のようですね。

RedPrimary 0.708, 0.292
GreenPrimary 0.170, 0.797
WhitePoint 0.131, 0.046

Rec. 2020(ページ右上に色域の三角形がある)
https://en.wikipedia.org/wiki/Rec._2020#System_colorimetry

これに対して、DXGIのAPIから取得したRedPrimary、GreenPrimary、BluePrimaryで三角形を描けば、ディスプレイの色域がわかりますね。

さらに、Rec.2020のフルの色域の三角形とディスプレイの色域の三角形の面積からカバー率なども求まると思います。

とりあえず、次の段階としてはディスプレイごとの色域を色空間に対して可視化するところをやってみようかと思います。

2017.09.03

Windows 10 Creators Updateでディスプレイの輝度、色空間取得方法サンプル

CEDECの時にWindows 10 Creators Updateでディスプレイの輝度や色空間などの情報がとれるようになったという話題をしたのですが、起動するとその情報をコマンドラインに表示するだけのサンプルを公開します。

https://github.com/shaderjp/DisplaySpecCheck

※ビルド済み実行ファイルも添付しているので試すだけならexeあればOKです。

Screenshot

パネルディスカッションでは、HDR10対応(BT.2020)環境の話題がメインでしたが、このプログラム自体はSDRのモニタでも使用可能です。例として、あげているのはDellのSDRの4KモニタP2715Q です。

このあたりの情報は、DXGI_OUTPUT_DESC1構造体より取得できます。

DXGI_OUTPUT_DESC1
https://msdn.microsoft.com/en-us/library/windows/desktop/mt825228(v=vs.85).aspx

HDR10かどうかを判断する場合、DXGI_OUTPUT_DESC1のメンバのColorSpaceをチェックします。

輝度値は、MaxLuminance、MinLuminance、MaxFullFrameLuminanceあたりですが、単位はnitsです。

このサンプルでは、DXGIやスワップチェーンの初期化をやっていますが、自分ですでに生成済み環境であればGetDisplayInformation関数にIDXGISwapChain4を入れればOKです。

« 2017年8月 | トップページ