mirror of
https://github.com/cemu-project/cemu_graphic_packs.git
synced 2024-12-27 02:11:50 +01:00
[BOTW] Shrine reflections blur fix (#99)
* Added resolution independent FXAA for BotW * Renamed to give FXAA priority over base graphics packs * Updated FXAA implementation. Integrated Contrasty. * Moved some defines to make more readable/editable * Sharper detail settings, to make it look better at native res. * Native AntiAliasing Restoration. * Antialiasing restoration, removed unnecessary files. * Edited Contrasty to be disabled by default * [BotW] Fixed upscaled blur pixelation for reflections on shrine walls
This commit is contained in:
parent
f97fd45530
commit
bd4f6cc09e
@ -0,0 +1,43 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader f0a615c0f6a37661 // vertical blur 2880 for reflections on shrine walls, floors and probably other
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf51d3000 res 320x180x1 dim 1 tm: 4 format 001a compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
|
||||
float data = passParameterSem0.z - passParameterSem0.w;
|
||||
float h = data / 1.38461538 * uf_fragCoordScale.y;
|
||||
|
||||
uniform float o_weight[] = float[]( 0.29411765, 0.35294118 );
|
||||
uniform float o_offset[] = float[]( 0.00000000, 1.33333333 );
|
||||
|
||||
uniform float weight[] = float[]( 0.11011604, 0.20071416, 0.13842356, 0.07060718, 0.02643049, 0.00717399, 0.00138786, 0.00018683, 0.00001693, 0.00000098 );
|
||||
uniform float offset[] = float[]( 0.00000000, 1.47169811, 3.43396226, 5.39622642, 7.35849057, 9.32075472, 11.28301887, 13.24528302, 15.20754717, 17.16981132 );
|
||||
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
|
||||
|
||||
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
|
||||
for (int i=1; i<10; i++) {
|
||||
R1f += texture( textureUnitPS0, R0f + vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
R1f += texture( textureUnitPS0, R0f - vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
}
|
||||
|
||||
vec4 R2f = texture( textureUnitPS0, R0f ) * o_weight[0];
|
||||
for (int i=1; i<2; i++) {
|
||||
R2f += texture( textureUnitPS0, R0f + vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
R2f += texture( textureUnitPS0, R0f - vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
}
|
||||
|
||||
passPixelColor0 = ( (uf_fragCoordScale.y == 1.0) ? R2f : R1f );
|
||||
|
||||
//alpha boost and clamp, according to original shader
|
||||
passPixelColor0.w = mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].x), passPixelColor0.w);
|
||||
passPixelColor0.w = clamp(passPixelColor0.w, 0.0, 1.0);
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader f0a615c0f6a37661 // vertical blur 4320 for reflections on shrine walls, floors and probably other
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf51d3000 res 320x180x1 dim 1 tm: 4 format 001a compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
|
||||
float data = passParameterSem0.z - passParameterSem0.w;
|
||||
float h = data / 1.38461538 * uf_fragCoordScale.y;
|
||||
|
||||
uniform float o_weight[] = float[]( 0.29411765, 0.35294118 );
|
||||
uniform float o_offset[] = float[]( 0.00000000, 1.33333333 );
|
||||
|
||||
uniform float weight[] = float[]( 0.08679764, 0.16377778, 0.12975631, 0.08523885, 0.04634210, 0.02079453, 0.00767262, 0.00231673, 0.00056902, 0.00011284, 0.00001790, 0.00000225, 0.00000022, 0.00000002 );
|
||||
uniform float offset[] = float[]( 0.00000000, 1.48235294, 3.45882353, 5.43529412, 7.41176471, 9.38823529, 11.36470588, 13.34117647, 15.31764706, 17.29411765, 19.27058824, 21.24705882, 23.22352941, 25.20000000 );
|
||||
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
|
||||
|
||||
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
|
||||
for (int i=1; i<14; i++) {
|
||||
R1f += texture( textureUnitPS0, R0f + vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
R1f += texture( textureUnitPS0, R0f - vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
}
|
||||
|
||||
vec4 R2f = texture( textureUnitPS0, R0f ) * o_weight[0];
|
||||
for (int i=1; i<2; i++) {
|
||||
R2f += texture( textureUnitPS0, R0f + vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
R2f += texture( textureUnitPS0, R0f - vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
}
|
||||
|
||||
passPixelColor0 = ( (uf_fragCoordScale.y == 1.0) ? R2f : R1f );
|
||||
|
||||
//alpha boost and clamp, according to original shader
|
||||
passPixelColor0.w = mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].x), passPixelColor0.w);
|
||||
passPixelColor0.w = clamp(passPixelColor0.w, 0.0, 1.0);
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader f0a615c0f6a37661 // vertical blur 5760 for reflections on shrine walls, floors and probably other
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf51d3000 res 320x180x1 dim 1 tm: 4 format 001a compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
|
||||
float data = passParameterSem0.z - passParameterSem0.w;
|
||||
float h = data / 1.38461538 * uf_fragCoordScale.y;
|
||||
|
||||
uniform float o_weight[] = float[]( 0.29411765, 0.35294118 );
|
||||
uniform float o_offset[] = float[]( 0.00000000, 1.33333333 );
|
||||
|
||||
uniform float weight[] = float[]( 0.05842515, 0.11378184, 0.10229613, 0.08445599, 0.06401931, 0.04454418, 0.02843975, 0.01665463, 0.00894132, 0.00439816, 0.00198084, 0.00081621, 0.00030743, 0.00010575, 0.00003318, 0.00000949, 0.00000247, 0.00000058, 0.00000013, 0.00000002 );
|
||||
uniform float offset[] = float[]( 0.00000000, 1.49197861, 3.48128342, 5.47058824, 7.45989305, 9.44919786, 11.43850267, 13.42780749, 15.41711230, 17.40641711, 19.39572193, 21.38502674, 23.37433155, 25.36363636, 27.35294118, 29.34224599, 31.33155080, 33.32085561, 35.31016043, 37.29946524 );
|
||||
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
|
||||
|
||||
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
|
||||
for (int i=1; i<20; i++) {
|
||||
R1f += texture( textureUnitPS0, R0f + vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
R1f += texture( textureUnitPS0, R0f - vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
}
|
||||
|
||||
vec4 R2f = texture( textureUnitPS0, R0f ) * o_weight[0];
|
||||
for (int i=1; i<2; i++) {
|
||||
R2f += texture( textureUnitPS0, R0f + vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
R2f += texture( textureUnitPS0, R0f - vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
}
|
||||
|
||||
passPixelColor0 = ( (uf_fragCoordScale.y == 1.0) ? R2f : R1f );
|
||||
|
||||
//alpha boost and clamp, according to original shader
|
||||
passPixelColor0.w = mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].x), passPixelColor0.w);
|
||||
passPixelColor0.w = clamp(passPixelColor0.w, 0.0, 1.0);
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader f0a615c0f6a37661 // vertical blur 1080 for reflections on shrine walls, floors and probably other
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf51d3000 res 320x180x1 dim 1 tm: 4 format 001a compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
|
||||
float data = passParameterSem0.z - passParameterSem0.w;
|
||||
float h = data / 1.38461538 * uf_fragCoordScale.y;
|
||||
|
||||
uniform float o_weight[] = float[]( 0.29411765, 0.35294118 );
|
||||
uniform float o_offset[] = float[]( 0.00000000, 1.33333333 );
|
||||
|
||||
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
|
||||
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
|
||||
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
|
||||
|
||||
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
|
||||
for (int i=1; i<4; i++) {
|
||||
R1f += texture( textureUnitPS0, R0f + vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
R1f += texture( textureUnitPS0, R0f - vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
}
|
||||
|
||||
vec4 R2f = texture( textureUnitPS0, R0f ) * o_weight[0];
|
||||
for (int i=1; i<2; i++) {
|
||||
R2f += texture( textureUnitPS0, R0f + vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
R2f += texture( textureUnitPS0, R0f - vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
}
|
||||
|
||||
passPixelColor0 = ( (uf_fragCoordScale.y == 1.0) ? R2f : R1f );
|
||||
|
||||
//alpha boost and clamp, according to original shader
|
||||
passPixelColor0.w = mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].x), passPixelColor0.w);
|
||||
passPixelColor0.w = clamp(passPixelColor0.w, 0.0, 1.0);
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader f0a615c0f6a37661 // vertical blur 1080 for reflections on shrine walls, floors and probably other
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf51d3000 res 320x180x1 dim 1 tm: 4 format 001a compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
|
||||
float data = passParameterSem0.z - passParameterSem0.w;
|
||||
float h = data / 1.38461538 * uf_fragCoordScale.y;
|
||||
|
||||
uniform float o_weight[] = float[]( 0.29411765, 0.35294118 );
|
||||
uniform float o_offset[] = float[]( 0.00000000, 1.33333333 );
|
||||
|
||||
uniform float weight[] = float[]( 0.18571429, 0.28870130, 0.10363636, 0.01480519 );
|
||||
uniform float offset[] = float[]( 0.00000000, 1.42105263, 3.31578947, 5.21052632 );
|
||||
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
|
||||
|
||||
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
|
||||
for (int i=1; i<4; i++) {
|
||||
R1f += texture( textureUnitPS0, R0f + vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
R1f += texture( textureUnitPS0, R0f - vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
}
|
||||
|
||||
vec4 R2f = texture( textureUnitPS0, R0f ) * o_weight[0];
|
||||
for (int i=1; i<2; i++) {
|
||||
R2f += texture( textureUnitPS0, R0f + vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
R2f += texture( textureUnitPS0, R0f - vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
}
|
||||
|
||||
passPixelColor0 = ( (uf_fragCoordScale.y == 1.0) ? R2f : R1f );
|
||||
|
||||
//alpha boost and clamp, according to original shader
|
||||
passPixelColor0.w = mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].x), passPixelColor0.w);
|
||||
passPixelColor0.w = clamp(passPixelColor0.w, 0.0, 1.0);
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader f0a615c0f6a37661 // vertical blur 1440 for reflections on shrine walls, floors and probably other
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf51d3000 res 320x180x1 dim 1 tm: 4 format 001a compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
|
||||
float data = passParameterSem0.z - passParameterSem0.w;
|
||||
float h = data / 1.38461538 * uf_fragCoordScale.y;
|
||||
|
||||
uniform float o_weight[] = float[]( 0.29411765, 0.35294118 );
|
||||
uniform float o_offset[] = float[]( 0.00000000, 1.33333333 );
|
||||
|
||||
uniform float weight[] = float[]( 0.16122494, 0.26575540, 0.12180456, 0.02865990, 0.00316767 );
|
||||
uniform float offset[] = float[]( 0.00000000, 1.44000000, 3.36000000, 5.28000000, 7.20000000 );
|
||||
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
|
||||
|
||||
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
|
||||
for (int i=1; i<5; i++) {
|
||||
R1f += texture( textureUnitPS0, R0f + vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
R1f += texture( textureUnitPS0, R0f - vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
}
|
||||
|
||||
vec4 R2f = texture( textureUnitPS0, R0f ) * o_weight[0];
|
||||
for (int i=1; i<2; i++) {
|
||||
R2f += texture( textureUnitPS0, R0f + vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
R2f += texture( textureUnitPS0, R0f - vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
}
|
||||
|
||||
passPixelColor0 = ( (uf_fragCoordScale.y == 1.0) ? R2f : R1f );
|
||||
|
||||
//alpha boost and clamp, according to original shader
|
||||
passPixelColor0.w = mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].x), passPixelColor0.w);
|
||||
passPixelColor0.w = clamp(passPixelColor0.w, 0.0, 1.0);
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader f0a615c0f6a37661 // vertical blur 1440 for reflections on shrine walls, floors and probably other
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf51d3000 res 320x180x1 dim 1 tm: 4 format 001a compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
|
||||
float data = passParameterSem0.z - passParameterSem0.w;
|
||||
float h = data / 1.38461538 * uf_fragCoordScale.y;
|
||||
|
||||
uniform float o_weight[] = float[]( 0.29411765, 0.35294118 );
|
||||
uniform float o_offset[] = float[]( 0.00000000, 1.33333333 );
|
||||
|
||||
uniform float weight[] = float[]( 0.16122494, 0.26575540, 0.12180456, 0.02865990, 0.00316767 );
|
||||
uniform float offset[] = float[]( 0.00000000, 1.44000000, 3.36000000, 5.28000000, 7.20000000 );
|
||||
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
|
||||
|
||||
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
|
||||
for (int i=1; i<5; i++) {
|
||||
R1f += texture( textureUnitPS0, R0f + vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
R1f += texture( textureUnitPS0, R0f - vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
}
|
||||
|
||||
vec4 R2f = texture( textureUnitPS0, R0f ) * o_weight[0];
|
||||
for (int i=1; i<2; i++) {
|
||||
R2f += texture( textureUnitPS0, R0f + vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
R2f += texture( textureUnitPS0, R0f - vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
}
|
||||
|
||||
passPixelColor0 = ( (uf_fragCoordScale.y == 1.0) ? R2f : R1f );
|
||||
|
||||
//alpha boost and clamp, according to original shader
|
||||
passPixelColor0.w = mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].x), passPixelColor0.w);
|
||||
passPixelColor0.w = clamp(passPixelColor0.w, 0.0, 1.0);
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader f0a615c0f6a37661 // vertical blur 1800 for reflections on shrine walls, floors and probably other
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf51d3000 res 320x180x1 dim 1 tm: 4 format 001a compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
|
||||
float data = passParameterSem0.z - passParameterSem0.w;
|
||||
float h = data / 1.38461538 * uf_fragCoordScale.y;
|
||||
|
||||
uniform float o_weight[] = float[]( 0.29411765, 0.35294118 );
|
||||
uniform float o_offset[] = float[]( 0.00000000, 1.33333333 );
|
||||
|
||||
uniform float weight[] = float[]( 0.13583460, 0.23632042, 0.13504024, 0.04857179, 0.01068579, 0.00136997, 0.00009448 );
|
||||
uniform float offset[] = float[]( 0.00000000, 1.45714286, 3.40000000, 5.34285714, 7.28571429, 9.22857143, 11.17142857 );
|
||||
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
|
||||
|
||||
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
|
||||
for (int i=1; i<7; i++) {
|
||||
R1f += texture( textureUnitPS0, R0f + vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
R1f += texture( textureUnitPS0, R0f - vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
}
|
||||
|
||||
vec4 R2f = texture( textureUnitPS0, R0f ) * o_weight[0];
|
||||
for (int i=1; i<2; i++) {
|
||||
R2f += texture( textureUnitPS0, R0f + vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
R2f += texture( textureUnitPS0, R0f - vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
}
|
||||
|
||||
passPixelColor0 = ( (uf_fragCoordScale.y == 1.0) ? R2f : R1f );
|
||||
|
||||
//alpha boost and clamp, according to original shader
|
||||
passPixelColor0.w = mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].x), passPixelColor0.w);
|
||||
passPixelColor0.w = clamp(passPixelColor0.w, 0.0, 1.0);
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader f0a615c0f6a37661 // vertical blur 2160 for reflections on shrine walls, floors and probably other
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf51d3000 res 320x180x1 dim 1 tm: 4 format 001a compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
|
||||
float data = passParameterSem0.z - passParameterSem0.w;
|
||||
float h = data / 1.38461538 * uf_fragCoordScale.y;
|
||||
|
||||
uniform float o_weight[] = float[]( 0.29411765, 0.35294118 );
|
||||
uniform float o_offset[] = float[]( 0.00000000, 1.33333333 );
|
||||
|
||||
uniform float weight[] = float[]( 0.12537086, 0.22251971, 0.13786547, 0.05769140, 0.01602539, 0.00287352, 0.00031864, 0.00002045 );
|
||||
uniform float offset[] = float[]( 0.00000000, 1.46341463, 3.41463415, 5.36585366, 7.31707317, 9.26829268, 11.21951220, 13.17073171 );
|
||||
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
|
||||
|
||||
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
|
||||
for (int i=1; i<8; i++) {
|
||||
R1f += texture( textureUnitPS0, R0f + vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
R1f += texture( textureUnitPS0, R0f - vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
}
|
||||
|
||||
vec4 R2f = texture( textureUnitPS0, R0f ) * o_weight[0];
|
||||
for (int i=1; i<2; i++) {
|
||||
R2f += texture( textureUnitPS0, R0f + vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
R2f += texture( textureUnitPS0, R0f - vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
}
|
||||
|
||||
passPixelColor0 = ( (uf_fragCoordScale.y == 1.0) ? R2f : R1f );
|
||||
|
||||
//alpha boost and clamp, according to original shader
|
||||
passPixelColor0.w = mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].x), passPixelColor0.w);
|
||||
passPixelColor0.w = clamp(passPixelColor0.w, 0.0, 1.0);
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
// shader f0a615c0f6a37661 // vertical blur 2160 for reflections on shrine walls, floors and probably other
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf51d3000 res 320x180x1 dim 1 tm: 4 format 001a compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 1
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
|
||||
float data = passParameterSem0.z - passParameterSem0.w;
|
||||
float h = data / 1.38461538 * uf_fragCoordScale.y;
|
||||
|
||||
uniform float o_weight[] = float[]( 0.29411765, 0.35294118 );
|
||||
uniform float o_offset[] = float[]( 0.00000000, 1.33333333 );
|
||||
|
||||
uniform float weight[] = float[]( 0.12537086, 0.22251971, 0.13786547, 0.05769140, 0.01602539, 0.00287352, 0.00031864, 0.00002045 );
|
||||
uniform float offset[] = float[]( 0.00000000, 1.46341463, 3.41463415, 5.36585366, 7.31707317, 9.26829268, 11.21951220, 13.17073171 );
|
||||
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 R0f = vec2(passParameterSem0.x, passParameterSem0.w);
|
||||
|
||||
vec4 R1f = texture( textureUnitPS0, R0f ) * weight[0];
|
||||
for (int i=1; i<8; i++) {
|
||||
R1f += texture( textureUnitPS0, R0f + vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
R1f += texture( textureUnitPS0, R0f - vec2(0.0, offset[i]*h) ) * weight[i];
|
||||
}
|
||||
|
||||
vec4 R2f = texture( textureUnitPS0, R0f ) * o_weight[0];
|
||||
for (int i=1; i<2; i++) {
|
||||
R2f += texture( textureUnitPS0, R0f + vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
R2f += texture( textureUnitPS0, R0f - vec2(0.0, o_offset[i]*h) ) * o_weight[i];
|
||||
}
|
||||
|
||||
passPixelColor0 = ( (uf_fragCoordScale.y == 1.0) ? R2f : R1f );
|
||||
|
||||
//alpha boost and clamp, according to original shader
|
||||
passPixelColor0.w = mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].x), passPixelColor0.w);
|
||||
passPixelColor0.w = clamp(passPixelColor0.w, 0.0, 1.0);
|
||||
}
|
Loading…
Reference in New Issue
Block a user