diff --git a/hdr/crt-bang-olufsen-4k-hdr.slangp b/hdr/crt-bang-olufsen-4k-hdr.slangp index ada6155..817fbeb 100644 --- a/hdr/crt-bang-olufsen-4k-hdr.slangp +++ b/hdr/crt-bang-olufsen-4k-hdr.slangp @@ -1,12 +1,12 @@ /* -A shader that specifically tries to emulate Bang & Olufsen with a slot mask screen but with full brightness. +A shader that specifically tries to emulate Bang & Olufsen Beovision with a slot mask screen but with full brightness. The novel thing about this shader is that it transforms the image output by the 'console/arcade/computer' into HDR space first i.e brightens it first and then applies an slot mask afterwards which is kind of what a CRT would actually do - its kind of a kin to the electron beam (but nothing like it lol). My DisplayHDR 600 monitor does seem to get reasonably close to the brightness of my PVM - its not quite there but its close. I think DisplayHDR 1000 and above will be able to match. -Currently defaults towards a XXXX CRT MAKE MODEL XXXX. +Currently defaults towards a Bang & Olufsen Beovision MX8000. To use: Please Enable HDR in RetroArch 1.10+ @@ -34,3 +34,21 @@ mipmap_input0 = "false" alias0 = "" float_framebuffer0 = "false" srgb_framebuffer0 = "false" +RedConvergence = "0.000000" +GreenConvergence = "0.000000" +BlueConvergence = "0.000000" +RedScanlineMin = "0.650000" +RedScanlineMax = "0.900000" +RedScanlineAttack = "0.500000" +GreenScanlineMin = "0.650000" +GreenScanlineMax = "0.900000" +GreenScanlineAttack = "0.500000" +BlueScanlineMin = "0.650000" +BlueScanlineMax = "0.900000" +BlueScanlineAttack = "0.500000" +RedBeamSharpness = "1.600000" +RedBeamAttack = "1.7500000" +GreenBeamSharpness = "1.600000" +GreenBeamAttack = "1.750000" +BlueBeamSharpness = "1.600000" +BlueBeamAttack = "1.750000" diff --git a/hdr/crt-bang-olufsen-mx8000-4k-hdr.slangp b/hdr/crt-bang-olufsen-mx8000-4k-hdr.slangp new file mode 100644 index 0000000..669afed --- /dev/null +++ b/hdr/crt-bang-olufsen-mx8000-4k-hdr.slangp @@ -0,0 +1 @@ +#reference "crt-bang-olufsen-4k-hdr.slangp" diff --git a/hdr/crt-sony-pvm-20L4-4k-hdr.slangp b/hdr/crt-sony-pvm-20L4-4k-hdr.slangp index 2fc617e..eff6267 100644 --- a/hdr/crt-sony-pvm-20L4-4k-hdr.slangp +++ b/hdr/crt-sony-pvm-20L4-4k-hdr.slangp @@ -1,17 +1,20 @@ #reference "crt-sony-pvm-4k-hdr.slangp" -CRTResolution = "0.000000" -Contrast = "-0.300000" -HorizontalSharpness = "1.500000" -HorizontalAttack = "0.450000" -RedScanlineMin = "0.55000" -RedScanlineMax = "0.75000" -RedScanlineAttack = "0.650000" -RedConvergence = "-1.200000" -GreenScanlineMin = "0.65000" -GreenScanlineMax = "0.90000" -GreenScanlineAttack = "0.130000" +CRTResolution = "1.000000" +RedConvergence = "0.500000" GreenConvergence = "0.000000" -BlueScanlineMin = "0.72000" -BlueScanlineMax = "1.15000" -BlueScanlineAttack = "1.00000" -BlueConvergence = "-0.100000" +BlueConvergence = "0.000000" +RedScanlineMin = "0.250000" +RedScanlineMax = "0.400000" +RedScanlineAttack = "0.150000" +GreenScanlineMin = "0.250000" +GreenScanlineMax = "0.400000" +GreenScanlineAttack = "0.150000" +BlueScanlineMin = "0.250000" +BlueScanlineMax = "0.400000" +BlueScanlineAttack = "0.150000" +RedBeamSharpness = "2.000000" +RedBeamAttack = "1.0000000" +GreenBeamSharpness = "2.000000" +GreenBeamAttack = "1.000000" +BlueBeamSharpness = "2.000000" +BlueBeamAttack = "1.000000" \ No newline at end of file diff --git a/hdr/crt-sony-pvm-4k-hdr.slangp b/hdr/crt-sony-pvm-4k-hdr.slangp index 83ea4ef..bfb7855 100644 --- a/hdr/crt-sony-pvm-4k-hdr.slangp +++ b/hdr/crt-sony-pvm-4k-hdr.slangp @@ -34,3 +34,22 @@ mipmap_input0 = "false" alias0 = "" float_framebuffer0 = "false" srgb_framebuffer0 = "false" +RedConvergence = "-0.500000" +GreenConvergence = "0.000000" +BlueConvergence = "0.000000" +RedScanlineMin = "0.550000" +RedScanlineMax = "0.820000" +RedScanlineAttack = "0.650000" +GreenScanlineMin = "0.550000" +GreenScanlineMax = "0.900000" +GreenScanlineAttack = "0.130000" +BlueScanlineMin = "0.720000" +BlueScanlineMax = "1.000000" +BlueScanlineAttack = "0.650000" +RedBeamSharpness = "1.750000" +RedBeamAttack = "0.7200000" +GreenBeamSharpness = "1.600000" +GreenBeamAttack = "0.800000" +BlueBeamSharpness = "1.900000" +BlueBeamAttack = "0.450000" + diff --git a/hdr/shaders/include/developer_parameters.h b/hdr/shaders/include/developer_parameters.h index 347fa3c..0afd130 100644 --- a/hdr/shaders/include/developer_parameters.h +++ b/hdr/shaders/include/developer_parameters.h @@ -3,22 +3,23 @@ #pragma parameter DeveloperSettings "DEVELOPER SETTINGS:" 0.0 0.0 0.0 0.0 #pragma parameter CRTResolution " CRT Resolution: 600TVL/800TVL/1000TVL" 0.0 0.0 2.0 1.0 #pragma parameter DeveloperSettings0 " VERTICAL SETTINGS:" 0.0 0.0 0.0 0.0 -#pragma parameter RedScanlineMin " Red Scanline Min" 0.55 0.0 2.0 0.01 -#pragma parameter RedScanlineMax " Red Scanline Max" 0.82 0.0 2.0 0.01 -#pragma parameter RedScanlineAttack " Red Scanline Attack" 0.65 0.0 1.0 0.01 -#pragma parameter GreenScanlineMin " Green Scanline Min" 0.55 0.0 2.0 0.01 -#pragma parameter GreenScanlineMax " Green Scanline Max" 0.90 0.0 2.0 0.01 -#pragma parameter GreenScanlineAttack " Green Scanline Attack" 0.13 0.0 1.0 0.01 -#pragma parameter BlueScanlineMin " Blue Scanline Min" 0.72 0.0 2.0 0.01 +#pragma parameter RedScanlineMin " Red Scanline Min" 0.50 0.0 2.0 0.01 +#pragma parameter RedScanlineMax " Red Scanline Max" 1.00 0.0 2.0 0.01 +#pragma parameter RedScanlineAttack " Red Scanline Attack" 0.20 0.0 1.0 0.01 +#pragma parameter GreenScanlineMin " Green Scanline Min" 0.50 0.0 2.0 0.01 +#pragma parameter GreenScanlineMax " Green Scanline Max" 1.00 0.0 2.0 0.01 +#pragma parameter GreenScanlineAttack " Green Scanline Attack" 0.20 0.0 1.0 0.01 +#pragma parameter BlueScanlineMin " Blue Scanline Min" 0.50 0.0 2.0 0.01 #pragma parameter BlueScanlineMax " Blue Scanline Max" 1.00 0.0 2.0 0.01 -#pragma parameter BlueScanlineAttack " Blue Scanline Attack" 0.65 0.0 1.0 0.01 +#pragma parameter BlueScanlineAttack " Blue Scanline Attack" 0.20 0.0 1.0 0.01 #pragma parameter DeveloperSettings1 " HORIZONTAL SETTINGS:" 0.0 0.0 0.0 0.0 #pragma parameter RedBeamSharpness " Red Beam Sharpness" 1.75 0.0 5.0 0.05 -#pragma parameter RedBeamAttack " Red Beam Attack" 0.72 0.0 1.0 0.01 -#pragma parameter GreenBeamSharpness " Green Beam Sharpness" 1.60 0.0 5.0 0.05 -#pragma parameter GreenBeamAttack " Green Beam Attack" 0.80 0.0 1.0 0.01 -#pragma parameter BlueBeamSharpness " Blue Beam Sharpness" 1.90 0.0 5.0 0.05 -#pragma parameter BlueBeamAttack " Blue Beam Attack" 0.45 0.0 1.0 0.01 +#pragma parameter RedBeamAttack " Red Beam Attack" 0.50 0.0 2.0 0.01 +#pragma parameter GreenBeamSharpness " Green Beam Sharpness" 1.75 0.0 5.0 0.05 +#pragma parameter GreenBeamAttack " Green Beam Attack" 0.50 0.0 2.0 0.01 +#pragma parameter BlueBeamSharpness " Blue Beam Sharpness" 1.75 0.0 5.0 0.05 +#pragma parameter BlueBeamAttack " Blue Beam Attack" 0.50 0.0 2.0 0.01 + #if WHITE_BALANCE_CONTROL //#pragma parameter WhiteTemperature "White Temperature" 6500.0 0.0 13000.0 50.0 diff --git a/hdr/shaders/include/scanline_generation.h b/hdr/shaders/include/scanline_generation.h index bdbd826..c9ceb78 100644 --- a/hdr/shaders/include/scanline_generation.h +++ b/hdr/shaders/include/scanline_generation.h @@ -19,17 +19,26 @@ const vec4 kAttackControlPoints = vec4(0.0f, 1.0f, 1.0f, 1.0f); vec4 RedBeamControlPoints(const bool falloff) { - return falloff ? kFallOffControlPoints + vec4(0.0f, 0.0f, params.RedBeamAttack, 0.0f) : kAttackControlPoints - vec4(0.0f, params.RedBeamAttack, 0.0f, 0.0f); + float inner_attack = clamp(params.RedBeamAttack, 0.0f, 1.0); + float outer_attack = clamp(params.RedBeamAttack - 1.0f, 0.0f, 1.0); + + return falloff ? kFallOffControlPoints + vec4(0.0f, outer_attack, inner_attack, 0.0f) : kAttackControlPoints - vec4(0.0f, inner_attack, outer_attack, 0.0f); } vec4 GreenBeamControlPoints(const bool falloff) { - return falloff ? kFallOffControlPoints + vec4(0.0f, 0.0f, params.GreenBeamAttack, 0.0f) : kAttackControlPoints - vec4(0.0f, params.GreenBeamAttack, 0.0f, 0.0f); + float inner_attack = clamp(params.GreenBeamAttack, 0.0f, 1.0); + float outer_attack = clamp(params.GreenBeamAttack - 1.0f, 0.0f, 1.0); + + return falloff ? kFallOffControlPoints + vec4(0.0f, outer_attack, inner_attack, 0.0f) : kAttackControlPoints - vec4(0.0f, inner_attack, outer_attack, 0.0f); } vec4 BlueBeamControlPoints(const bool falloff) { - return falloff ? kFallOffControlPoints + vec4(0.0f, 0.0f, params.BlueBeamAttack, 0.0f) : kAttackControlPoints - vec4(0.0f, params.BlueBeamAttack, 0.0f, 0.0f); + float inner_attack = clamp(params.BlueBeamAttack, 0.0f, 1.0); + float outer_attack = clamp(params.BlueBeamAttack - 1.0f, 0.0f, 1.0); + + return falloff ? kFallOffControlPoints + vec4(0.0f, outer_attack, inner_attack, 0.0f) : kAttackControlPoints - vec4(0.0f, inner_attack, outer_attack, 0.0f); } float Bezier(const float t0, const vec4 control_points) diff --git a/hdr/shaders/include/user_parameters.h b/hdr/shaders/include/user_parameters.h index 8c7698a..93bb6f9 100644 --- a/hdr/shaders/include/user_parameters.h +++ b/hdr/shaders/include/user_parameters.h @@ -18,6 +18,6 @@ #pragma parameter LCDSubpixel " Display's Subpixel Layout: RGB/BGR" 0.0 0.0 1.0 1.0 #pragma parameter Contrast " Contrast" -0.3 -3.0 3.0 0.05 #pragma parameter ExpandGamut " Original/Vivid" 0.0 0.0 1.0 1.0 -#pragma parameter RedConvergence " Red Convergence" -0.50 -10.0 10.0 0.05 +#pragma parameter RedConvergence " Red Convergence" 0.00 -10.0 10.0 0.05 #pragma parameter GreenConvergence " Green Convergence" 0.00 -10.0 10.0 0.05 #pragma parameter BlueConvergence " Blue Convergence" 0.00 -10.0 10.0 0.05 \ No newline at end of file