エフェクト動作テスト
では背景用アクセサリを読み込み、テストしてみましょう。
エフェクトファイルを更新した後、stage.xを読み込んだ状態です。一見何も表示されていないように見えれば成功です。背景画像がぴったりモデルに張りつけられているため、姿が消えているように見えるのです。
正しい意味ではこれで完璧な光学迷彩の完成ですが、これではモデルを非表示にしているのと大差ありません。なので先ほどの「歪み量」を使い、スクリーン座標を歪ませます。
//ピクセルシェーダ本体
float4 TestShader_PS(OutVS IN) : COLOR
{
//出力色
float4 Color;
//歪ませる量を計算
//法線が視点方向からずれている程歪む
float add = (1-dot(normalize(IN.Eye),normalize(IN.Normal)));
//---追加---//
//スクリーン座標を歪み値でずらす
IN.ScreenTex += add;
//----------//
//テスト用テクスチャを使ってスクリーン座標をチェックする
Color = tex2D(BackSampler,IN.ScreenTex);
//色を出力
return Color;
}
単純にスクリーン座標に歪み量を加算しています。この変更を反映すると次のようになります。
概ね予定通りの結果が得られていますが、addの中身に大きすぎる数値が入っているため、変化が急すぎて模様のようになっています。これを軽減するためにaddを小さくしてみましょう。
//スクリーン座標を歪み値でずらす IN.ScreenTex += add*0.1;
ちょうど良くなったでしょうか? 後は自分が気に入る程度まで数値を調節してみてください。これで今回のエフェクトは完成です。
最後に
HLSLは難しくない!
一見難しく見えるHLSLですが、Cなどの高級言語と比べると良くも悪くもできることが少なく、ほとんどのエフェクトが単純なコードであることがほとんどです。何か新しいエフェクトを作ろうとした時でも、配布されているエフェクトなどに処理の参考になる部分が見つかることも少なくありません。
まとめ
今回は、オブジェクトに適用する種類のエフェクトを作例に合わせて解説しました。次回からはポストエフェクトなど別の種類のエフェクトを作例と共に解説していきます。
参考資料
- wikipedia『光学迷彩』
- MSDNライブラリ 『HLSL のリファレンス』




