1 テクニックとパス
1.1 構成
エフェクトファイルは、以下のような、テクニックとパスによる階層構造になっている。
/**********************************/
パラメータ宣言1
パラメータ宣言2
...
technique テクニック1 {
pass パス1 {
VertexShader = …
PixelShader = …
}
pass パス2 {
VertexShader = …
PixelShader = …
}
…
}
technique テクニック2 {
pass パス1 {
VertexShader = …
PixelShader = …
}
pass パス2 {
VertexShader = …
PixelShader = …
}
…
}
/**********************************/
テクニックは1つ以上のパスから構成される。1つのパスは1回のレンダリング処理に対応しており、テクニックが複数のパスから構成されている場合は、そのテクニックがマルチパスレンダリングを使用することを意味している。
テクニックとパスには、アノテーションと呼ばれる設定値を記述することができる。アノテーションは、以下のように、テクニック名・パス名の後ろに、"<"と">"で囲むようにして記述する。なお、アノテーション名の大文字小文字の違いは無視される。
/******************************************************/
technique Tech1 < string Subset = "1-6,8"; > {
pass Pass1 < string Script = "Draw=Buffer;"; > {
...
}
pass Pass2 {
...
}
}
/******************************************************/
また、テクニックとパスには、スクリプトと呼ばれる特殊なアノテーションを指定することができる。これについては、3.スクリプトで説明する。
1.2 テクニックのアノテーション
テクニックのアノテーションには、そのテクニックをどの場面の描画に使用するかの条件を記述する。
この条件には、以下のものを指定できる。
- オブジェクトのサブセット番号(≒オブジェクトのマテリアルの番号)
- 描画対象(オブジェクト本体/影/輪郭/セルフシャドウ用Z値プロット)
- 描画フラグ(テクスチャ使用ON/OFF、スフィアマップ使用ON/OFF、トゥーンレンダリング使用ON/OFF)
条件の照合は、エフェクトファイルに書かれている順に行われるため、複数のテクニックで使用条件が重なっている場合は、エフェクトファイル上で先に記述されているものが優先される。条件に合致するテクニックがエフェクトファイル上に存在しない場合、MMD標準のシェーダが使用される。
○アノテーション
- string Subset
そのテクニックを適用するサブセットの番号を指定する。PMDモデルの場合、これはモデルの材質番号に対応する。
アノテーション省略時には、全てのサブセットが適用対象となる。
"0,3,5"のように、カンマ区切りで番号を列挙することで、複数の番号を指定できる。また、"6-10"などのように、番号をハイフンでつなぐことで、範囲指定ができる。"12-"のように、範囲の開始番号のみを指定した場合は、それ以降の全ての番号が対象となる。
例:
string Subset = "0-6,8";
- string MMDPass
そのテクニックを適用する描画対象を指定する。以下のうちいずれかを指定する。この区分は、MMDの描画手順に由来する。
- "object" : オブジェクト本体(セルフシャドウOFF)
- "zplot" : セルフシャドウ用Z値プロット
- "object_ss" : オブジェクト本体(セルフシャドウON)
- "shadow" : 影(セルフシャドウではない単純な影)
- "edge" : 輪郭(PMDモデルのみ)
アノテーション省略時には、"object"を指定したとみなされる。
例:
string MMDPass = "object";
- bool UseTexture
テクスチャ使用の有無を指定する。そのテクニックが、テクスチャを使用するサブセットのみを対象とする場合には、trueを指定する。逆に、テクスチャを使用しないサブセットのみを対象とする場合には、falseを指定する。
アノテーション省略時には、テクスチャの有無は無視される。
例:
bool UseTexture = true;
- bool UseSphereMap
スフィアマップ使用の有無を指定する。そのテクニックが、スフィアマップを使用するサブセットのみを対象とする場合には、trueを指定する。(PMXモデルにおいて、スフィアモードにサブテクスチャを指定した場合も含む)逆に、スフィアマップを使用しないサブセットのみを対象とする場合には、falseを指定する。
アノテーション省略時には、スフィアマップの有無は無視される。
例:
bool UseSphereMap = false;
- bool UseToon
トゥーンレンダリング使用の有無を指定する。そのテクニックが、トゥーンレンダリングを使用するオブジェクト(=PMDモデル)を対象とする場合には、trueを指定する。逆に、トゥーンレンダリングを使用しないオブジェクト(=アクセサリ)を対象とする場合には、falseを指定する。
アノテーション省略時には、トゥーンレンダリング使用の有無は無視される。
例:
bool UseToon = true;
○使用例
//セルフシャドウがONの場合、サブセットのNo.0~6とNo.8には、Tech1が適用され、
//サブセットのNo.7とNo.9~には、Tech2が適用される。
//セルフシャドウがOFFの場合、Tech3が適用される。
technique Tech1 <
string MMDPass = "object_ss";
string Subset = "0-6,8";
> {
...
}
technique Tech2 <
string MMDPass = "object_ss";
string Subset = "7,9-";
> {
...
}
technique Tech3 <
string MMDPass = "object";
> {
...
}
○補足
- 妥当でないテクニックは除外される。 http://msdn.microsoft.com/ja-jp/library/bb206324(v=VS.85).aspx
- MMDPass="object","object_ss"以外のテクニックでは、UseTexture,UseSphereMap,UseToonは正しく機能しない。