From eab96c08708aa3233dbe6275df06e6fa37845bd0 Mon Sep 17 00:00:00 2001 From: getdls Date: Mon, 19 Nov 2018 22:22:48 +0100 Subject: [PATCH] [ZU] AA fix, chromatic aberration config --- .../949069c3567f349d_0000000000000079_ps.txt | 56 +++++ .../ZombieU_Chromatic_aberration/rules.txt | 25 ++ .../9993b65e9eb6bb1d_0000000000000079_ps.txt | 218 ++++++++++++++++++ 3 files changed, 299 insertions(+) create mode 100644 Enhancements/ZombieU_Chromatic_aberration/949069c3567f349d_0000000000000079_ps.txt create mode 100644 Enhancements/ZombieU_Chromatic_aberration/rules.txt create mode 100644 Source/ZombieU_Resolution/9993b65e9eb6bb1d_0000000000000079_ps.txt diff --git a/Enhancements/ZombieU_Chromatic_aberration/949069c3567f349d_0000000000000079_ps.txt b/Enhancements/ZombieU_Chromatic_aberration/949069c3567f349d_0000000000000079_ps.txt new file mode 100644 index 00000000..753d0a36 --- /dev/null +++ b/Enhancements/ZombieU_Chromatic_aberration/949069c3567f349d_0000000000000079_ps.txt @@ -0,0 +1,56 @@ +#version 420 +#extension GL_ARB_texture_gather : enable +#extension GL_ARB_separate_shader_objects : enable +// shader 949069c3567f349d +// color grading / chromatic aberration +uniform ivec4 uf_remappedPS[1]; +layout(binding = 1) uniform sampler2D textureUnitPS1;// Tex1 addr 0xf4a8e000 res 1280x720x1 dim 1 tm: 4 format 0019 compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler1 ClampX/Y/Z: 2 2 2 border: 0 +layout(location = 0) in vec4 passParameterSem130; +layout(location = 0) out vec4 passPixelColor0; +uniform vec2 uf_fragCoordScale; +int clampFI32(int v) +{ + if( v == 0x7FFFFFFF ) + return floatBitsToInt(1.0); + else if( v == 0xFFFFFFFF ) + return floatBitsToInt(0.0); + return floatBitsToInt(clamp(intBitsToFloat(v), 0.0, 1.0)); +} +float mul_nonIEEE(float a, float b){return mix(0.0, a*b, (a != 0.0) && (b != 0.0));} +void main() +{ + vec4 R0f = vec4(0.0); + vec4 R1f = vec4(0.0); + float backupReg0f, backupReg1f, backupReg2f, backupReg3f, backupReg4f; + vec4 PV0f = vec4(0.0), PV1f = vec4(0.0); + float PS0f = 0.0, PS1f = 0.0; + vec4 tempf = vec4(0.0); + float tempResultf; + int tempResulti; + ivec4 ARi = ivec4(0); + bool predResult = true; + vec3 cubeMapSTM; + int cubeMapFaceId; + R0f = passParameterSem130; + R1f.x = (texture(textureUnitPS1, R0f.xy).x); + // 0 + backupReg0f = R1f.x; + R1f.x = backupReg0f; + R1f.x *= 4.0; + PV0f.z = R0f.x + -(0.5); + PV0f.w = R0f.y + -(0.5); + // 1 + R0f.x = (mul_nonIEEE(PV0f.z,intBitsToFloat(uf_remappedPS[0].x)*$redHz) + 0.5); // red + R0f.y = (mul_nonIEEE(PV0f.w,intBitsToFloat(uf_remappedPS[0].x)) + 0.5); + R0f.z = (mul_nonIEEE(PV0f.z,intBitsToFloat(uf_remappedPS[0].y)*$blueHz) + 0.5); // blur + R0f.w = (mul_nonIEEE(PV0f.w,intBitsToFloat(uf_remappedPS[0].y)) + 0.5); + R0f.y = (texture(textureUnitPS1, R0f.xy).y); + R0f.z = (texture(textureUnitPS1, R0f.zw).z); + // 0 + R1f.y = R0f.y; + R1f.y *= 4.0; + R1f.z = R0f.z; + R1f.z *= 4.0; + // export + passPixelColor0 = vec4(R1f.x, R1f.y, R1f.z, R1f.z); +} diff --git a/Enhancements/ZombieU_Chromatic_aberration/rules.txt b/Enhancements/ZombieU_Chromatic_aberration/rules.txt new file mode 100644 index 00000000..8d75e1e9 --- /dev/null +++ b/Enhancements/ZombieU_Chromatic_aberration/rules.txt @@ -0,0 +1,25 @@ +[Definition] +titleIds = 000500001010DD00,000500001010EF00,0005000010112300,000500001011A700,0005000E1010DD00,0005000E10112300 +path = "ZombieU/Enhancements/Chromatic aberration" +description = Changes the intensity of (horizontal) chromatic aberration (red green blue edges) +version = 3 + +[Preset] +name = CA Default +$redHz = 1.0 +$blueHz = 1.0 + +[Preset] +name = CA 0.75 +$redHz = 1.00125 +$blueHz = 1.0025 + +[Preset] +name = CA 0.5 +$redHz = 1.0025 +$blueHz = 1.005 + +[Preset] +name = CA mostly disabled +$redHz = 1.005 +$blueHz = 1.01 \ No newline at end of file diff --git a/Source/ZombieU_Resolution/9993b65e9eb6bb1d_0000000000000079_ps.txt b/Source/ZombieU_Resolution/9993b65e9eb6bb1d_0000000000000079_ps.txt new file mode 100644 index 00000000..b1490410 --- /dev/null +++ b/Source/ZombieU_Resolution/9993b65e9eb6bb1d_0000000000000079_ps.txt @@ -0,0 +1,218 @@ +#version 420 +#extension GL_ARB_texture_gather : enable +#extension GL_ARB_separate_shader_objects : enable +// shader 9993b65e9eb6bb1d +//aa +const float resXScale = float($width)/float($gameWidth); +const float resYScale = float($height)/float($gameHeight); +uniform ivec4 uf_remappedPS[2]; +layout(binding = 0) uniform sampler2D textureUnitPS0;// Tex0 addr 0xf4385000 res 1280x720x1 dim 1 tm: 4 format 0019 compSel: 0 1 2 3 mipView: 0x0 (num 0x1) sliceView: 0x0 (num 0x1) Sampler0 ClampX/Y/Z: 2 2 2 border: 0 +layout(location = 0) in vec4 passParameterSem130; +layout(location = 1) in vec4 passParameterSem134; +layout(location = 0) out vec4 passPixelColor0; +uniform vec2 uf_fragCoordScale; +int clampFI32(int v) +{ + if( v == 0x7FFFFFFF ) + return floatBitsToInt(1.0); + else if( v == 0xFFFFFFFF ) + return floatBitsToInt(0.0); + return floatBitsToInt(clamp(intBitsToFloat(v), 0.0, 1.0)); +} +float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; } +void main() +{ + vec4 R0f = vec4(0.0); + vec4 R1f = vec4(0.0); + vec4 R2f = vec4(0.0); + vec4 R3f = vec4(0.0); + vec4 R4f = vec4(0.0); + vec4 R5f = vec4(0.0); + vec4 R123f = vec4(0.0); + vec4 R125f = vec4(0.0); + vec4 R126f = vec4(0.0); + vec4 R127f = vec4(0.0); + float backupReg0f, backupReg1f, backupReg2f, backupReg3f, backupReg4f; + vec4 PV0f = vec4(0.0), PV1f = vec4(0.0); + float PS0f = 0.0, PS1f = 0.0; + vec4 tempf = vec4(0.0); + float tempResultf; + int tempResulti; + ivec4 ARi = ivec4(0); + bool predResult = true; + vec3 cubeMapSTM; + int cubeMapFaceId; + R0f = passParameterSem130; + R1f = passParameterSem134; + R2f.xyz = (texture(textureUnitPS0, R0f.zy).xyz); + R5f.xyz = (texture(textureUnitPS0, R1f.xy).xyz); + R4f.xyz = (texture(textureUnitPS0, R0f.xw).xyz); + R3f.xyz = (texture(textureUnitPS0, R0f.xy).xyz); + R0f.xyz = (texture(textureUnitPS0, R0f.zw).xyz); + // 0 + tempf.x = dot(vec4(R2f.x,R2f.y,R2f.z,-0.0),vec4(intBitsToFloat(0x3faaaa8f),intBitsToFloat(0x3faaaa8f),intBitsToFloat(0x3faaaa8f),0.0)); + PV0f.x = tempf.x; + PV0f.y = tempf.x; + PV0f.z = tempf.x; + PV0f.w = tempf.x; + R127f.z = 0.0; + PS0f = R127f.z; + // 1 + tempf.x = dot(vec4(R3f.x,R3f.y,R3f.z,-0.0),vec4(intBitsToFloat(0x3faaaa8f),intBitsToFloat(0x3faaaa8f),intBitsToFloat(0x3faaaa8f),0.0)); + PV1f.x = tempf.x; + PV1f.y = tempf.x; + PV1f.z = tempf.x; + PV1f.w = tempf.x; + R126f.z = tempf.x; + R127f.y = PV0f.x + intBitsToFloat(0x3b2aaab9); + PS1f = R127f.y; + // 2 + backupReg0f = R0f.x; + backupReg1f = R0f.y; + backupReg2f = R0f.z; + tempf.x = dot(vec4(backupReg0f,backupReg1f,backupReg2f,-0.0),vec4(intBitsToFloat(0x3faaaa8f),intBitsToFloat(0x3faaaa8f),intBitsToFloat(0x3faaaa8f),0.0)); + PV0f.x = tempf.x; + PV0f.y = tempf.x; + PV0f.z = tempf.x; + PV0f.w = tempf.x; + R126f.w = tempf.x; + R125f.z = intBitsToFloat(uf_remappedPS[0].w); + PS0f = R125f.z; + // 3 + tempf.x = dot(vec4(R5f.x,R5f.y,R5f.z,-0.0),vec4(intBitsToFloat(0x3faaaa8f),intBitsToFloat(0x3faaaa8f),intBitsToFloat(0x3faaaa8f),0.0)); + PV1f.x = tempf.x; + PV1f.y = tempf.x; + PV1f.z = tempf.x; + PV1f.w = tempf.x; + R127f.w = tempf.x; + R2f.w = 1.0; + PS1f = R2f.w; + // 4 + tempf.x = dot(vec4(R4f.x,R4f.y,R4f.z,-0.0),vec4(intBitsToFloat(0x3faaaa8f),intBitsToFloat(0x3faaaa8f),intBitsToFloat(0x3faaaa8f),0.0)); + PV0f.x = tempf.x; + PV0f.y = tempf.x; + PV0f.z = tempf.x; + PV0f.w = tempf.x; + R126f.y = R126f.z + -(PV1f.x); + PS0f = R126f.y; + // 5 + PV1f.x = PV0f.x + -(R127f.w); + PV1f.y = -(R126f.w) + R127f.w; + PV1f.z = -(R127f.y) + R127f.w; + R127f.w = -(R127f.y) + PV0f.x; + PV1f.w = R127f.w; + // 6 + tempf.x = dot(vec4(PV1f.x,R126f.y,R126f.y,-0.0),vec4(PV1f.z,PV1f.y,R127f.z,0.0)); + PV0f.x = tempf.x; + PV0f.y = tempf.x; + PV0f.z = tempf.x; + PV0f.w = tempf.x; + PS0f = PV1f.w + -(R126f.z); + // 7 + PV1f.x = PV0f.x + -(intBitsToFloat(0xbdcccccd)); + PV1f.y = R127f.w + R126f.z; + R126f.z = PS0f + R126f.w; + // 8 + R126f.y = PV1f.y + -(R126f.w); + PV0f.y = R126f.y; + R126f.w = PV1f.x * intBitsToFloat(0x41200000); + R126f.w = clamp(R126f.w, 0.0, 1.0); + PV0f.w = R126f.w; + // 9 + tempf.x = dot(vec4(R126f.z,PV0f.y,R125f.z,-0.0),vec4(R126f.z,PV0f.y,R125f.z,0.0)); + PV1f.x = tempf.x; + PV1f.y = tempf.x; + PV1f.z = tempf.x; + PV1f.w = tempf.x; + R125f.z = mul_nonIEEE(PV0f.w, PV0f.w); + PS1f = R125f.z; + // 10 + R123f.y = (-(2.0) * R126f.w + intBitsToFloat(0x40400000)); + PV0f.y = R123f.y; + tempResultf = 1.0 / sqrt(PV1f.x); + PS0f = tempResultf; + // 11 + backupReg0f = R126f.z; + PV1f.x = mul_nonIEEE(R125f.z, PV0f.y); + R126f.z = mul_nonIEEE(R126f.y, PS0f); + R126f.w = mul_nonIEEE(backupReg0f, PS0f); + // 12 + PV0f.w = PV1f.x * intBitsToFloat(0x3f99999a); + // 13 + R126f.y = mul_nonIEEE(R126f.z, PV0f.w); + PV1f.y = R126f.y; + R126f.z = mul_nonIEEE(R126f.w, PV0f.w); + PV1f.z = R126f.z; + // 14 + PV0f.x = max(PV1f.z, -(PV1f.z)); + PV0f.w = max(PV1f.y, -(PV1f.y)); + // 15 + PV1f.z = min(PV0f.x, PV0f.w); + // 16 + PV0f.y = PV1f.z + -(0.0); + // 17 + PV1f.x = PV0f.y * intBitsToFloat(0x3fb6db6e)/resXScale; + PV1f.x = clamp(PV1f.x, 0.0, 1.0); + // 18 + R123f.z = (-(2.0) * PV1f.x + intBitsToFloat(0x40400000)); + PV0f.z = R123f.z; + PV0f.w = mul_nonIEEE(PV1f.x, PV1f.x); + // 19 + R123f.y = (mul_nonIEEE(-(PV0f.w),PV0f.z) + intBitsToFloat(0x3f99999a)/resXScale); + PV1f.y = R123f.y; + // 20 + PV0f.x = mul_nonIEEE(R126f.z, PV1f.y); + PV0f.w = mul_nonIEEE(R126f.y, PV1f.y); + // 21 + PV1f.z = mul_nonIEEE(PV0f.x, intBitsToFloat(uf_remappedPS[0].x)); + PV1f.w = mul_nonIEEE(PV0f.w, intBitsToFloat(uf_remappedPS[0].y)); + // 22 + R127f.x = mul_nonIEEE(PV1f.z, intBitsToFloat(uf_remappedPS[1].w)); + PV0f.x = R127f.x; + R126f.y = mul_nonIEEE(PV1f.w, intBitsToFloat(uf_remappedPS[1].w)); + PV0f.y = R126f.y; + PV0f.z = mul_nonIEEE(PV1f.z, intBitsToFloat(uf_remappedPS[1].y)); + R126f.w = mul_nonIEEE(PV1f.w, intBitsToFloat(uf_remappedPS[1].y)); + PV0f.w = R126f.w; + // 23 + R4f.xyz = vec3(R1f.x,R1f.y,R1f.x) + vec3(PV0f.z,PV0f.w,PV0f.x); + R4f.w = R1f.y + PV0f.y; + R0f.x = R1f.x + -(PV0f.z); + PS1f = R0f.x; + // 24 + backupReg0f = R1f.x; + R1f.x = backupReg0f + -(R127f.x); + R0f.y = R1f.y + -(R126f.w); + R1f.z = R1f.y + -(R126f.y); + R3f.xyz = (texture(textureUnitPS0, R4f.xy).xyz); + R4f.xyz = (texture(textureUnitPS0, R4f.zw).xyz); + R0f.xyz = (texture(textureUnitPS0, R0f.xy).xyz); + R1f.xyz = (texture(textureUnitPS0, R1f.xz).xyz); + // 0 + PV0f.x = R3f.z + R4f.z; + PV0f.y = R3f.y + R4f.y; + PV0f.z = R3f.x + R4f.x; + // 1 + backupReg0f = R0f.y; + PV1f.y = R0f.z + PV0f.x; + PV1f.z = backupReg0f + PV0f.y; + PV1f.w = R0f.x + PV0f.z; + // 2 + PV0f.x = R1f.x + PV1f.w; + PV0f.z = R1f.z + PV1f.y; + PV0f.w = R1f.y + PV1f.z; + // 3 + PV1f.x = R5f.y + PV0f.w; + PV1f.y = R5f.x + PV0f.x; + PV1f.w = R5f.z + PV0f.z; + // 4 + PV0f.x = PV1f.w * intBitsToFloat(0x3f4ccccd); + PV0f.y = PV1f.x * intBitsToFloat(0x3f4ccccd); + PV0f.z = PV1f.y * intBitsToFloat(0x3f4ccccd); + // 5 + R2f.x = PV0f.z * 0.25; + R2f.y = PV0f.y * 0.25; + R2f.z = PV0f.x * 0.25; + // export + passPixelColor0 = vec4(R2f.x, R2f.y, R2f.z, R2f.w); +}