Advertisement Jump to content
  • Advertisement
  • entries
  • comments
  • views

Image Quality

Sign in to follow this  


So, back on the HDRI stuff again...

Thanks to Ysaneya's comment to one of my previous entries, I realised that trying to "roll my own" filtering algorithm was a nice learning exercise, but not really useful. So I got rid of it and put a simple bilinear filtering function in:
//g_rcp_bloom_tex_w is a float constant indicating the reciprocal of the width
//g_rcp_bloom_tex_h is a float constant indicating the reciprocal of the height
// -----
float xWeight = frac( t.x / g_rcp_bloom_tex_w ) - 0.5;
float xDir = xWeight;
xWeight = abs( xWeight );
xDir /= xWeight;
xDir *= g_rcp_bloom_tex_w;

float yWeight = frac( t.y / g_rcp_bloom_tex_h ) - 0.5;
float yDir = yWeight;
yWeight = abs( yWeight );
yDir /= yWeight;
yDir *= g_rcp_bloom_tex_h;

// sample the bloom texture for the 4 relevant pixels
float4 b = ((1.0f - xWeight) * (1.0f - yWeight)) * tex2D( tex2, t );
b += (xWeight * (1.0f - yWeight)) * tex2D( tex2, t + float2( xDir, 0.0f ) );
b += (yWeight * (1.0f - xWeight)) * tex2D( tex2, t + float2( 0.0f, yDir ) );
b += (xWeight * yWeight) * tex2D( tex2, t + float2( xDir, yDir ) );

It's based on a couple of articles - one at (deceased [sad]) flipcode and one from wikipedia - that showed the correct weights to use. The rest of the implementation I cooked up on my own - so there could well be something better kicking around [grin]

I'm very happy with the results:
Sign in to follow this  


Recommended Comments

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!