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

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

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

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

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

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

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

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

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

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

ジオメトリシェーダで輪郭線表示

ジオメトリシェーダを使って輪郭線を表示してみます。方法は法線方向への拡大&裏面描画ではなく、ポリゴンエッジに輪郭線をつけるかどうか判定し、エッジ(辺)に沿ってラインを描画します。

ジオメトリシェーダで輪郭線
ジオメトリシェーダで輪郭線

続きを読む ジオメトリシェーダで輪郭線表示

位置を共有している頂点のマージアルゴリズム

3Dモデルデータの最適化のために、ほぼ同じ位置にある頂点データを1つにまとめる(マージする)処理を作成します。総当たりで近い位置にあるか比較していけば簡単に実装できると思っていました……
これまでの経験では数千頂点程度のマージ処理だったので、それほど実行速度を気にすることはありませんでした。が、今回約70000頂点のマージを総当たり比較で処理したところ、処理時間1分間以上。違う方法を考えなければ。

続きを読む 位置を共有している頂点のマージアルゴリズム

頂点シェーダでスキニングと頂点ブレンド 可変長の定数バッファ

頂点シェーダでスキニングと頂点ブレンドを行います。基本的な原理などは多くの場所で公開されているので省略、DirectX11での実装について説明します。
ボーンウエイト付のモデルデータは自作できないので、入手しやすいPMD/VMDファイルを使用します。

PMD/VMDの表示再生
PMD/VMDの表示再生

続きを読む 頂点シェーダでスキニングと頂点ブレンド 可変長の定数バッファ

ID3D11ShaderReflectionでシェーダコード解析

CreateInputLayoutで入力レイアウト(ID3D11InputLayout)を作成する際、頂点シェーダが要求する入力パラメータが不足しているとエラーコード(E_INVALIDARG)を返します。ただ作成が失敗するだけならいいのですが、エラーログが出力されてしまうため、シェーダを解析して入力パラメータの不足を調べるようにします。

続きを読む ID3D11ShaderReflectionでシェーダコード解析

シェーダエフェクト 自作FXファイルフォーマット

前回、使用するシェーダ関数名やステートをソースコードに直接記述していたので、これらの情報を専用のファイルで定義するようにします。DirectX11はfxファイル(techniqueやpassの定義)に対応していないようなので、DirectX9のfxファイルを参考に独自のfxファイルを作成します。

左:きれいな半透明 中:アニメ調 右:汚い半透明
左:きれいな半透明 中:アニメ調 右:汚い半透明

続きを読む シェーダエフェクト 自作FXファイルフォーマット

シェーダエフェクト&マルチサンプルAA

ポリゴンメッシュの描画処理が揃ってきたので、最後にレンダリングステート系とマルチパス(同じメッシュを異なるシェーダやステートで複数回描画)を追加し、シェーダ関連の処理を整理、構造化します。その処理を使って輪郭線のある3Dモデルを表示してみます(法線方向拡大&裏面表示の輪郭線アルゴリズム)。表示させてみるとジャギーが酷かったので、マルチサンプルアンチエリアシング(MSAA)の対応も同時に行います。

アニメ調シェーダ
アニメ調シェーダ

続きを読む シェーダエフェクト&マルチサンプルAA