วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการสร้าง shader (ดูรหัสด้านล่าง) วาดทุกอย่างไปยังเป้าหมายการเรนเดอร์จากนั้นใช้ shader เพื่อวาดที่บัฟเฟอร์ด้านหลังของคุณ
ในบันทึกรหัสเกมของคุณเมื่อผู้เล่นเสียชีวิตจากนั้นในภายหลังทำให้การแก้ไขพารามิเตอร์ shader ระหว่าง 1 (สีเต็ม) และ 0 (เต็มระดับสีเทา) ตาม
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();
}
}
เหตุผลที่ 0.3, 0.59 และ 0.11 นั้นเป็นเพราะสายตามนุษย์ไม่ได้ให้สีเท่ากันค่าเหล่านั้นให้ภาพเฉดสีเทาที่ดีกว่า