| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- ///-------------------------------------------------------------------------------------------------
- /// <remarks>
- /// Charles Humphrey, 12/07/2025.
- /// Fixes for DX implementation.
- /// </remarks>
- ///-------------------------------------------------------------------------------------------------
- #include "PPVertexShader.fxh"
- // 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, float4(0.3, 0.59, 0.11, 0.0));
- return lerp(grey, color, saturation);
- }
- ///-------------------------------------------------------------------------------------------------
- /// <summary> Function now uses correct vertex input structure for both OGL and DX </summary>
- ///
- /// <remarks> Charles Humphrey, 12/07/2025. </remarks>
- ///-------------------------------------------------------------------------------------------------
- float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
- {
- // Look up the bloom and original base image colors.
- float4 bloom = tex2D(BloomSampler, input.TexCoord);
- float4 base = tex2D(BaseSampler, input.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_SHADERMODEL PixelShaderFunction();
- }
- }
|