123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- // Pixel shader combines the bloom image with the original
- // scene, using tweakable intensity levels and saturation.
- // This is the final step in applying a bloom postprocess.
- sampler BloomSampler : register(s0);
- sampler BaseSampler : register(s1);
- float BloomIntensity;
- float BaseIntensity;
- float BloomSaturation;
- float BaseSaturation;
- // Helper for modifying the saturation of a color.
- float4 AdjustSaturation(float4 color, float saturation)
- {
- // The constants 0.3, 0.59, and 0.11 are chosen because the
- // human eye is more sensitive to green light, and less to blue.
- float grey = dot(color, float3(0.3, 0.59, 0.11));
- return lerp(grey, color, saturation);
- }
- float4 PixelShaderF(float2 texCoord : TEXCOORD0) : COLOR0
- {
- // Look up the bloom and original base image colors.
- float4 bloom = tex2D(BloomSampler, texCoord);
- float4 base = tex2D(BaseSampler, texCoord);
-
- // Adjust color saturation and intensity.
- bloom = AdjustSaturation(bloom, BloomSaturation) * BloomIntensity;
- base = AdjustSaturation(base, BaseSaturation) * BaseIntensity;
-
- // Darken down the base image in areas where there is a lot of bloom,
- // to prevent things looking excessively burned-out.
- base *= (1 - saturate(bloom));
-
- // Combine the two images.
- return base + bloom;
- }
- technique BloomCombine
- {
- pass Pass1
- {
- PixelShader = compile ps_2_0 PixelShaderF();
- }
- }
|