Original Post
I've been trying to achieve bloom using a 8bit render target using rgbm but after I failed several times I've been wondering if it was even possible.
If i'm not mistaken the alpha contain the data about the intensity so when I doing the offset to do my Gaussian blur am I messing up the encode information ?
here's the code I'm using to encode and decode my image
float MaxRange = 6;
float3 DecodeRGBM(float4 rgbm)
{
return rgbm.rgb * (rgbm.a * MaxRange);
}
float4 EncodeRGBM(float3 rgb)
{
float maxRGB = max(rgb.x,max(rgb.g,rgb.b));
float M = maxRGB / MaxRange;
M = ceil(M * 255.0) / 255.0;
return float4(rgb / (M * MaxRange), M);
}
I'm able to encode and decode any image but when I try to blur the image doesn't look right. Highly saturated and lot of crazy color.
And here's my blur function
( taken from matt pettineo)
/ Performs a gaussian blue in one direction
float4 Blur(float2 texcoord, float2 texScale, float sigma)
{
float4 color = 0;
for (int i = -6; i < 6; i++)
{
float weight = CalcGaussianWeight(i, sigma);
float2 texCoord = texcoord;
texCoord += (i / size) * texScale;
float4 sample = tex2D(BloomMap, texCoord);
sample.rgb = DecodeRGBM(sample);
sample.a = 1;
sample*=sample;
color += sample * weight;
}
return color;
}
I also I'm using xna and I'm able to blur the image using hdrblendable but Id prefer to use an 8 bit image so I can use a filter on it. ( xna doesn't support filter anymore for many format).
If i'm not mistaken the alpha contain the data about the intensity so when I doing the offset to do my Gaussian blur am I messing up the encode information ?
here's the code I'm using to encode and decode my image
float MaxRange = 6;
float3 DecodeRGBM(float4 rgbm)
{
return rgbm.rgb * (rgbm.a * MaxRange);
}
float4 EncodeRGBM(float3 rgb)
{
float maxRGB = max(rgb.x,max(rgb.g,rgb.b));
float M = maxRGB / MaxRange;
M = ceil(M * 255.0) / 255.0;
return float4(rgb / (M * MaxRange), M);
}
I'm able to encode and decode any image but when I try to blur the image doesn't look right. Highly saturated and lot of crazy color.
And here's my blur function
( taken from matt pettineo)
/ Performs a gaussian blue in one direction
float4 Blur(float2 texcoord, float2 texScale, float sigma)
{
float4 color = 0;
for (int i = -6; i < 6; i++)
{
float weight = CalcGaussianWeight(i, sigma);
float2 texCoord = texcoord;
texCoord += (i / size) * texScale;
float4 sample = tex2D(BloomMap, texCoord);
sample.rgb = DecodeRGBM(sample);
sample.a = 1;
sample*=sample;
color += sample * weight;
}
return color;
}
I also I'm using xna and I'm able to blur the image using hdrblendable but Id prefer to use an 8 bit image so I can use a filter on it. ( xna doesn't support filter anymore for many format).