Dolphin, the GameCube and Wii emulator - Forums

Full Version: Modified bad_bloom shader
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

GlassHalfAwesome

Hey,

I modified the bad_bloom shader because while I loved what it did to the colors I wasn't a huge fan of the aggressive blurring. I spent around an hour tinkering with the shader and I settled with only a couple minor changes:

* 7% increased brightness
* 33% reduced blur/distortion

no shader vs bad_bloom (default shader)

http://i.imgur.com/Lw1sgdb.jpg

no shader vs less_bloom (modified shader)

http://i.imgur.com/oJn5zYV.jpg

bad_bloom vs less_bloom

http://i.imgur.com/U9EebYF.jpg

I've also attached a less_bloom_no_blur that has the increased bloom brightness but almost entirely eliminates the blur/distortion. It's a nice alternative if you like a crisp looking UI but still want the bright colors.

bad_bloom vs less_bloom vs less_bloom_no_blur

http://i.imgur.com/mTfX4xE.jpg

Installation instructions:

1. Download the .txt files and save them to the Shaders folder in your Dolphin folder (Dolphin-x64\Sys\Shaders)
2. Rename the .txt file extension to .glsl
3. Open Dolphin and select the shader in Graphics > Enhancements (tab) > Post-Processing Effect (drop-down menu)

If you don't rename the .txt files to .glsl they won't show up in the drop-down menu.
Thanks for this. less_bloom_no_blur looks especially good to me.

Perengano

perdón no hablo inglés xD
Creo que he reparado el sombreador a lo que queríamos :v

Google Translation: sorry I don't speak English xD
I think I have fixed the shader to what we wanted: v

Code:
float2 position;
float4 bloom(float4 v, float2 radius);
float4 sum(float2 v, float2 radius);
float4 sum(float2 v, float2 radius){
float4 powSample = SampleLocation(position + v * radius);
return max((powSample-0.8)*5,float4(0,0,0,0));
}
float4 bloom(float4 v, float2 radius){
v += sum(float2(0.4, 0.9), radius);
v += sum(float2(0.7, 0.7), radius);
v += sum(float2(0.9, 0.4), radius);
v += sum(float2(1, 0), radius);
v += sum(float2(0.9, -0.4), radius);
v += sum(float2(0.7, -0.7), radius);
v += sum(float2(0.4, -0.9), radius);
v += sum(float2(0, -1), radius);
v += sum(float2(-0.4, -0.9), radius);
v += sum(float2(-0.7, -0.7), radius);
v += sum(float2(-0.9, -0.4), radius);
v += sum(float2(-1, 0), radius);
v += sum(float2(-0.9, 0.4), radius);
v += sum(float2(-0.7, 0.7), radius);
v += sum(float2(-0.4, 0.9), radius);
v += sum(float2(0, 1), radius);
return v;
}
void main()
{
float4 c_center = Sample();
float2 InvResolution = GetInvResolution();
float4 bloom_sum = float4(0.0, 0.0, 0.0, 0.0);
position = GetCoordinates() + float2(0.3, 0.3) * InvResolution;
float2 radius = 4 * InvResolution;
bloom_sum = bloom(bloom_sum,radius);
radius = 6.5 * InvResolution;
bloom_sum = bloom(bloom_sum,radius);
radius = 9 * InvResolution;
bloom_sum = bloom(bloom_sum,radius);
radius = 12.5 * InvResolution;
bloom_sum = bloom(bloom_sum,radius);
radius = 16 * InvResolution;
bloom_sum = bloom(bloom_sum,radius);
radius = 20.5 * InvResolution;
bloom_sum = bloom(bloom_sum,radius);
radius = 25 * InvResolution;
bloom_sum = bloom(bloom_sum,radius);
bloom_sum *= 0.0089;// 1/112
bloom_sum *= 1 - c_center;
bloom_sum = max(bloom_sum, float4(0.0, 0.0, 0.0, 0.0));
bloom_sum = min(bloom_sum, float4(1, 1, 1, 1));
SetOutput(c_center + bloom_sum);
}

Perengano

Cometí un error con position, lo puse como variable global xD arreglar eso y ya estaría solucionado, soy nuevo en esto.

Google Translation: I made a mistake with position, I put it as global variable xD fix that and it would be fixed by now, I am new to this.

Perengano

Code:
float4 bloom(float4 v, float2 radius, inout float2 pos);
float4 sum(float2 v, float2 radius, inout float2 pos);
float4 sum(float2 v, float2 radius, inout float2 pos){
float4 powSample = SampleLocation(pos + v * radius);
return max((powSample-0.8)*5,float4(0,0,0,0));
}

float4 bloom(float4 v, float2 radius, inout float2 pos){


v += sum(float2(0.4, 0.9), radius,pos);
v += sum(float2(0.7, 0.7), radius,pos);
v += sum(float2(0.9, 0.4), radius,pos);
v += sum(float2(1, 0), radius,pos);

v += sum(float2(0.9, -0.4), radius,pos);
v += sum(float2(0.7, -0.7), radius,pos);
v += sum(float2(0.4, -0.9), radius,pos);
v += sum(float2(0, -1), radius,pos);

v += sum(float2(-0.4, -0.9), radius,pos);
v += sum(float2(-0.7, -0.7), radius,pos);
v += sum(float2(-0.9, -0.4), radius,pos);
v += sum(float2(-1, 0), radius,pos);

v += sum(float2(-0.9, 0.4), radius,pos);
v += sum(float2(-0.7, 0.7), radius,pos);
v += sum(float2(-0.4, 0.9), radius,pos);
v += sum(float2(0, 1), radius,pos);


return v;
}


void main()
{
float2 pos;
float4 c_center = Sample();
float2 InvResolution = GetInvResolution();
float4 bloom_sum = float4(0.0, 0.0, 0.0, 0.0);
pos = GetCoordinates() + float2(0.3, 0.3) * InvResolution;


float2 radius = 4 * InvResolution;
bloom_sum = bloom(bloom_sum,radius,pos);

radius = 6.5 * InvResolution;
bloom_sum = bloom(bloom_sum,radius,pos);

radius = 9 * InvResolution;
bloom_sum = bloom(bloom_sum,radius,pos);

radius = 12.5 * InvResolution;
bloom_sum = bloom(bloom_sum,radius,pos);

radius = 16 * InvResolution;
bloom_sum = bloom(bloom_sum,radius,pos);

radius = 20.5 * InvResolution;
bloom_sum = bloom(bloom_sum,radius,pos);

radius = 25 * InvResolution;
bloom_sum = bloom(bloom_sum,radius,pos);


bloom_sum *= 0.0089;// 1/112

bloom_sum *= 1 - c_center;

float minv = 1;
bloom_sum = max(bloom_sum, float4(0.0, 0.0, 0.0, 0.0));
bloom_sum = min(bloom_sum, float4(minv, minv, minv, minv));
SetOutput(c_center + bloom_sum);
}
This is an English language forum. Please use English or include a translation below your text. I have edited your prior posts in this thread to include translations from Google.

Traducción: Este es un foro en inglés. Utilice el inglés o incluya una traducción debajo de su texto. He editado sus publicaciones anteriores en este hilo para incluir traducciones de Google.