カテゴリー別アーカイブ: グラフィック

表示関連のプログラミング

DX11エフェクトシステム作成 Part3 変数情報取得

コンパイルしたシェーダバイナリコードから使用されている変数の情報を取得します。ただしEffects11のような複雑(詳細)な情報ではなく必要最小限の情報のみ扱います。

続きを読む DX11エフェクトシステム作成 Part3 変数情報取得

DX11エフェクトシステム作成 Part2 コンパイラ作成

FXファイルのコンパイラを作成します。ただし一部の仕様のみに対応した簡易コンパイラです。複雑な構文解析は行わないので、文字列によって処理を分岐させる程度のプログラムになります。

続きを読む DX11エフェクトシステム作成 Part2 コンパイラ作成

DX11エフェクトシステムの作成 Part1 FXファイル解析

DirectX11ではEffect関連の機能が削除されていて、使用するには別途公開されているEffects11ソースコードが必要なります。しかし、その説明には古いコードの移植支援とあるため、あまり推奨されているものではないようです。
そこで、EffectのFXファイルを使用した独自のエフェクトシステムを作成してみます。
まず最初はFXファイル(HLSL)の字句解析と構文解析を行い必要な情報を取得できるようにします。

続きを読む DX11エフェクトシステムの作成 Part1 FXファイル解析

ライトプリパスレンダリング Part3 アンチエイリアス

アンチエイリアス処理を行います。MSAAによるAAを試しましたがうまくいかなかったため、ポストプロセス処理のAAであるSMAA(Enhanced Subpixel Morphological Antialiasing)を実装してみました。かなりいい感じです。ただ、輪郭線処理との相性が悪いため輪郭線描画は無効にしています。
ライトプリパスレンダリングのプログラム作成は、ここで一旦終了します。

SMAA 1x
SMAA 1x

続きを読む ライトプリパスレンダリング Part3 アンチエイリアス

ライトプリパスレンダリング Part2 光源計算&最適化

光源計算の処理と最適化を行います。点光源などの影響範囲が限定されている場合、計算が必要なピクセルを検出することで処理時間を短縮します。

左上:法線 右上:Specular 左下:最終結果 右下:Diffuse
左上:法線 右上:Specular 
左下:最終結果 右下:Diffuse

続きを読む ライトプリパスレンダリング Part2 光源計算&最適化

ライトプリパスレンダリング Part1

ライトプリパスレンダリングの基本的な処理を作成します。ジオメトリバッファの作成、光源計算、最終レンダリングの3つのパスでレンダリングします。それとこれまでに作成した、輪郭線とステンシルシャドウも組み込んでみます。

左上:法線 右上:Specular 左下:最終結果  右下:Diffuse
左上:法線 右上:Specular
左下:最終結果 右下:Diffuse&Shadow

続きを読む ライトプリパスレンダリング Part1

ライトプリパスレンダリング Part0

準備期間を終えて正式スタート。最初の課題は「ライトプリパスレンダリング」です。まずは、必要になりそうな処理、MRT(マルチレンダーターゲット)、G(ジオメトリ)バッファの生成、レンダリング結果をテクスチャとして使用、などを調査検証してみる。

左上:法線 右上:デプス⇒ワールド座標 左下:Diffuse 右下:輪郭線(赤)&影(青)
左上:法線 右上:デプス⇒ワールド座標
左下:Diffuse 右下:輪郭線(赤)&影(青)

続きを読む ライトプリパスレンダリング Part0

ID3D11QueryでGPUパフォーマンス測定

GPUが描画したポリゴン数や処理した頂点数などをID3D11Queryを使用して測定してみます。並列動作しているGPUの処理結果を取得するため、結果取得にちょっとした工夫が必要になります。単純な取得ではCPUとGPUの並列動作を止めてしまい、プログラムのパフォーマンスが悪化します。

続きを読む ID3D11QueryでGPUパフォーマンス測定

DirectXTKでフォント表示、日本語対応

デバッグ用の情報を表示するためにフォント表示を実装します。DirectX10まではフォント表示機能がありましたが、DirectX11にはないため、DirectXTKのフォント表示を使ってみます。それと日本語に対応していないようなので(バグかも)、DirectXTKを改造して無理やり日本語に対応させます。かなりいい加減な日本語対応だけどデバッグ用なので気にしない。
ss_dx11DirectXTKFont

続きを読む DirectXTKでフォント表示、日本語対応

ジオメトリシェーダでステンシルシャドウ&最適化

ジオメトリシェーダでステンシルシャドウを実装してみます。以前(DX9など)はシャドウボリュームの生成が面倒でしたが、ジオメトリシェーダを使うことによって簡単にできそうです。それと、単純な実装ではピクセルシェーダの負荷が大きすぎるため、できるだけシャドウボリュームの描画を減らす最適化も同時に行います。

ステンシルシャドウ
ステンシルシャドウ

続きを読む ジオメトリシェーダでステンシルシャドウ&最適化