Merge pull request #224 from MajorPainTheCactus/hdr_3_1

V3.1 Sony PVM 4K HDR Shader
This commit is contained in:
hizzlekizzle 2022-02-07 21:41:08 -06:00 committed by GitHub
commit e77a603ad2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 85 additions and 34 deletions

View file

@ -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 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). 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. 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: To use:
Please Enable HDR in RetroArch 1.10+ Please Enable HDR in RetroArch 1.10+
@ -34,3 +34,21 @@ mipmap_input0 = "false"
alias0 = "" alias0 = ""
float_framebuffer0 = "false" float_framebuffer0 = "false"
srgb_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"

View file

@ -0,0 +1 @@
#reference "crt-bang-olufsen-4k-hdr.slangp"

View file

@ -1,17 +1,20 @@
#reference "crt-sony-pvm-4k-hdr.slangp" #reference "crt-sony-pvm-4k-hdr.slangp"
CRTResolution = "0.000000" CRTResolution = "1.000000"
Contrast = "-0.300000" RedConvergence = "0.500000"
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"
GreenConvergence = "0.000000" GreenConvergence = "0.000000"
BlueScanlineMin = "0.72000" BlueConvergence = "0.000000"
BlueScanlineMax = "1.15000" RedScanlineMin = "0.250000"
BlueScanlineAttack = "1.00000" RedScanlineMax = "0.400000"
BlueConvergence = "-0.100000" 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"

View file

@ -34,3 +34,22 @@ mipmap_input0 = "false"
alias0 = "" alias0 = ""
float_framebuffer0 = "false" float_framebuffer0 = "false"
srgb_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"

View file

@ -3,22 +3,23 @@
#pragma parameter DeveloperSettings "DEVELOPER SETTINGS:" 0.0 0.0 0.0 0.0 #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 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 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 RedScanlineMin " Red Scanline Min" 0.50 0.0 2.0 0.01
#pragma parameter RedScanlineMax " Red Scanline Max" 0.82 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.65 0.0 1.0 0.01 #pragma parameter RedScanlineAttack " Red Scanline Attack" 0.20 0.0 1.0 0.01
#pragma parameter GreenScanlineMin " Green Scanline Min" 0.55 0.0 2.0 0.01 #pragma parameter GreenScanlineMin " Green Scanline Min" 0.50 0.0 2.0 0.01
#pragma parameter GreenScanlineMax " Green Scanline Max" 0.90 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.13 0.0 1.0 0.01 #pragma parameter GreenScanlineAttack " Green Scanline Attack" 0.20 0.0 1.0 0.01
#pragma parameter BlueScanlineMin " Blue Scanline Min" 0.72 0.0 2.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 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 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 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 RedBeamAttack " Red Beam Attack" 0.50 0.0 2.0 0.01
#pragma parameter GreenBeamSharpness " Green Beam Sharpness" 1.60 0.0 5.0 0.05 #pragma parameter GreenBeamSharpness " Green Beam Sharpness" 1.75 0.0 5.0 0.05
#pragma parameter GreenBeamAttack " Green Beam Attack" 0.80 0.0 1.0 0.01 #pragma parameter GreenBeamAttack " Green Beam Attack" 0.50 0.0 2.0 0.01
#pragma parameter BlueBeamSharpness " Blue Beam Sharpness" 1.90 0.0 5.0 0.05 #pragma parameter BlueBeamSharpness " Blue Beam Sharpness" 1.75 0.0 5.0 0.05
#pragma parameter BlueBeamAttack " Blue Beam Attack" 0.45 0.0 1.0 0.01 #pragma parameter BlueBeamAttack " Blue Beam Attack" 0.50 0.0 2.0 0.01
#if WHITE_BALANCE_CONTROL #if WHITE_BALANCE_CONTROL
//#pragma parameter WhiteTemperature "White Temperature" 6500.0 0.0 13000.0 50.0 //#pragma parameter WhiteTemperature "White Temperature" 6500.0 0.0 13000.0 50.0

View file

@ -19,17 +19,26 @@ const vec4 kAttackControlPoints = vec4(0.0f, 1.0f, 1.0f, 1.0f);
vec4 RedBeamControlPoints(const bool falloff) 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) 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) 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) float Bezier(const float t0, const vec4 control_points)

View file

@ -18,6 +18,6 @@
#pragma parameter LCDSubpixel " Display's Subpixel Layout: RGB/BGR" 0.0 0.0 1.0 1.0 #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 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 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 GreenConvergence " Green Convergence" 0.00 -10.0 10.0 0.05
#pragma parameter BlueConvergence " Blue Convergence" 0.00 -10.0 10.0 0.05 #pragma parameter BlueConvergence " Blue Convergence" 0.00 -10.0 10.0 0.05