Still cant figure this out, i have a gaussian blur in the code below
float4 BilateralFiltering(VertexOut input) : SV_Target
{
const float pixel = 1.0f/500.0f; // my image is 500x500
float4 centralColor;
float gaussianWeightTotal;
float4 sum;
float4 sampleColor;
float distanceFromCentralColor;
float gaussianWeight;
float distanceNormalizationFactor = 1.0;
centralColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(0,0));
gaussianWeightTotal = 0.18;
sum = centralColor * 0.18;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(-pixel,-pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.05 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(-pixel,0));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.09 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(-pixel,pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.12 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(0,-pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.15 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(0,pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.15 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(pixel,-pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.12 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(pixel,0));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.09 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(pixel,pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.05 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
return sum / gaussianWeightTotal;
Icant find nothing on bilateral blurring!
What are the steps in doing a bilateral blur?
I'm wondering if I can do a bilateral blur by taking the center pixel and a nearby pixel and using a if statement to test Color Intensity(or color average). Then, if the color goes from one color to another, it will not blur and will preserve the edges (which what bilateral blurring is).
??