スクリーン座標の値の確認
tex2D関数を使い、すでに読み込んであるテスト用テクスチャを表示しています。
//ピクセルシェーダ本体
float4 TestShader_PS(OutVS IN) : COLOR
{
//出力色
float4 Color;
//歪ませる量を計算
//法線が視点方向からずれている程歪む
float add = (1-dot(normalize(IN.Eye),normalize(IN.Normal)));
/* 削除
//歪み量を色に代入する
Color = float4(add,0,0,1);
*/
//---追加---//
//テスト用テクスチャを使ってスクリーン座標をチェックする
Color = tex2D(BackSampler,IN.ScreenTex);
//----------//
//色を出力
return Color;
}
凹凸に関わらず、ピクセルのUV座標に従って色が出力されています。現在はテスト用テクスチャなので虹色のグラデーションが表示されています。後はこの画像に背景画像を入れてやることで背景が表示されるはずです。
背景画像(歪ませる元画像)の取得
それでは今回のシェーダの最も重要な部分、背景画像の取得を行います。エフェクトファイル最上部に記述されている
//背景画像テクスチャ
texture BackTex <
string ResourceName = "test_tex.png";
>;
となっている部分を下のように書き変えます。
texture BackTex: OFFSCREENRENDERTARGET <
string Description = "BackScreenDraw for Simple.fx";
float2 ViewPortRatio = {1.0,1.0};
float4 ClearColor = { 1, 1, 1, 1 };
float ClearDepth = 1.0;
bool AntiAlias = true;
string DefaultEffect =
"self = hide;"
;
>;
この設定では、メモリ上に画面と同じサイズのテクスチャを用意し、エフェクトを適用しているオブジェを除いたすべてのオブジェをMMD標準描画を行います。細かい設定についてはMME付属のREFERENCE.txtを参照してみてください。

