Cara termudah untuk melakukan ini adalah membuat shader untuknya (Lihat kode di bawah). Gambar semuanya ke target render, lalu gunakan shader untuk menggambar itu ke buffer belakang Anda
Dalam catatan kode permainan Anda saat pemain meninggal, maka dalam render berikutnya, sisipkan parameter shader antara 1 (warna penuh) dan 0 (skala abu-abu penuh) sesuai dengan
CurrentTime-DeadTime / FadeTime
float ColourAmount;
Texture coloredTexture;
sampler coloredTextureSampler = sampler_state
{
texture = <coloredTexture>;
};
float4 GreyscalePixelShaderFunction(float2 textureCoordinate : TEXCOORD0) : COLOR0
{
float4 color = tex2D(coloredTextureSampler, textureCoordinate);
float3 colrgb = color.rgb;
float greycolor = dot(colrgb, float3(0.3, 0.59, 0.11));
colrgb.rgb = lerp(dot(greycolor, float3(0.3, 0.59, 0.11)), colrgb, ColourAmount);
return float4(colrgb.rgb, color.a);
}
technique Grayscale
{
pass GreyscalePass
{
PixelShader = compile ps_2_0 GreyscalePixelShaderFunction();
}
}
Alasan untuk 0,3, 0,59 dan 0,11 adalah karena mata manusia tidak memperlakukan warna secara sama, nilai-nilai tersebut memberikan citra skala abu-abu yang lebih baik.