「シェーダ」タグのついた投稿

今回は、前回に引き続きHLSLを使って画面の色を反転する方法で紹介した処理を少しだけ変更し、違うエフェクトを作る方法を紹介します。

 

今回は前回実装したモノクロ処理に少しだけ処理を追加して、画面をセピア調に変更します。

 

まず、ピクセルの色を白黒からセピア調へ変更する際に使う色を.fxファイル内の上部に宣言します。

float4 sepiaTone = float4( 1.0f, 0.8f, 0.0f, 1.0f );  /ピクセルの調整値。

次に、ピクセルシェーダー内での処理で、前章同様白黒の色を計算し、その色に上記の色を掛けます。

float4 Sepia(PS_INPUT p) : COLOR0

{

// テクスチャアから現在の座標の色を獲得する

float4 col = tex2D( samplerState, p.TextureCoord.xy );

// 色を白黒化する

float tempPixel = ( col.r + col.g + col.b ) * 0.3333f;

//セピア調の色を計算する

col = tempPixel * sepiaTone;

return col;

}

これで後は、関数を呼ぶのを忘れないようにするだけです。

technique Flip

{

pass Pass0

{

PixelShader = compile ps_2_0 Sepia(); // Monotone, Negative()から変更

}

}

 

結構前のメモや、前回の物をそのまま使用した場合、これだけで動きます。

このメモでは、結構前のメモで紹介した色を反転させる処理を少しだけ変更し、画面の色を白黒に変える処理を紹介します。

 

このメモでの処理は、前回のコードを1行だけ変更すれば実装できるので、同じ説明でスペースと時間を無駄にしないため変更部分だけを解説します。なので、このメモを読む前に前のメモを読むことを強くオススメします。

 

では実装に入ります。前回の処理と違うのは、ピクセルシェーダー内で画面の色を変更する時の計算方法だけです。前回は[1 – colour.rgb]の式を使用して色を反転させましたが、今回はRGB値の平均を計算することで、白黒化した色を獲得できます。

 

.fxファイル内の、ピクセルシェーダーの関数は前章のから以下の用に変更されます。

float4 Monotone(PS_INPUT p) : COLOR0

{

// テクスチャアから現在の座標の色を獲得する

float4 col = tex2D( samplerState, p.TextureCoord.xy );

// 色を白黒化する

col.rgb = ( col.r + col.g + col.b ) * 0.3333f;

// 白黒の色を返す

return col;

}

これで後は、関数を呼ぶのを忘れないようにするだけです。

technique Flip

{

pass Pass0

{

PixelShader = compile ps_2_0 Monotone(); // Negative()から変更

}

}