From 9310a736c43c17e714e258e484e353acf4d463c2 Mon Sep 17 00:00:00 2001 From: PavelDurov1488 <74456272+PavelDurov1488@users.noreply.github.com> Date: Tue, 15 Dec 2020 00:21:42 +0800 Subject: [PATCH] Cccalibrator Its not complete, i need to add dynamic noise and blur and make saturation tunable --- data/shaders/Cccalibrator.glsl | 114 +++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 data/shaders/Cccalibrator.glsl diff --git a/data/shaders/Cccalibrator.glsl b/data/shaders/Cccalibrator.glsl new file mode 100644 index 000000000..ca4188bc6 --- /dev/null +++ b/data/shaders/Cccalibrator.glsl @@ -0,0 +1,114 @@ +/*==========================================*\ +/*=======Calibrator by PavelDurov1488=======*\ +/*==========It's not ready yet...===========*\ +/*===I need to add blur, dynamic noise...===*\ +[configuration] + + +[OptionRangeFloat] +GUIName = Luminance(Y) +OptionName = LUMINANCE +MinValue = 0.000 +MaxValue = 3.000 +StepAmount = 0.050 +DefaultValue = 1.200 + +[OptionRangeFloat] +GUIName = Orange-Cyan(I) +OptionName = ORANGECYAN +MinValue = 0.000 +MaxValue = 3.000 +StepAmount = 0.050 +DefaultValue = 1.200 + +[OptionRangeFloat] +GUIName = Magenta-Green(Q) +OptionName = MAGENTAGREEN +MinValue = 0.000 +MaxValue = 3.000 +StepAmount = 0.050 +DefaultValue = 1.200 + +[OptionRangeFloat] +GUIName = Black +OptionName = BLACK +MinValue = 0.000 +MaxValue = 255.000 +StepAmount = 1.000 +DefaultValue = 10.000 + +[OptionRangeFloat] +GUIName = White +OptionName = WHITE +MinValue = 0.000 +MaxValue = 255.000 +StepAmount = 1.000 +DefaultValue = 240.000 + +[OptionRangeFloat] +GUIName = Noise +OptionName = NOISE +MinValue = 0.000 +MaxValue = 50.000 +StepAmount = 1.000 +DefaultValue = 10.000 + +[OptionRangeFloat] +GUIName = Saturation +OptionName = SATURATION +MinValue = 0.000 +MaxValue = 100.000 +StepAmount = 1.000 +DefaultValue = 50.000 + +[/configuration] +*/ + +float pseudoNoise(vec2 co) +{ +return fract(sin(dot(vec2(co.x+0.513,co.y+0.4124) ,vec2(12.9898,78.233))) * 43758.5453);// *fract(sin(dot(vec2(co.x+4.231,co.y+3.143) ,vec2(12.9898,78.233)*2.0)) * 43758.5453); //pseudo random number generator +} + +const vec3 RGBtoY = vec3(0.299, 0.587, 0.114); +const vec3 RGBtoI = vec3(0.596,-0.275,-0.321); +const vec3 RGBtoQ = vec3(0.212,-0.523, 0.311); +const vec3 YIQtoR = vec3(1.0, 0.95568806036115671171, 0.61985809445637075388); +const vec3 YIQtoG = vec3(1.0,-0.27158179694405859326,-0.64687381613840131330); +const vec3 YIQtoB = vec3(1.0,-1.10817732668266195230, 1.70506455991918171490); + +void main() +{ + + + float2 texcoord = GetCoordinates(); + float2 time = GetTime(); +// int FrameCount = GetFrameCount(); + float4 color = Sample(); +// float brightness_scale = GetOption(BRIGHTNESS_SCALE); + +//vec3 czm_saturation(vec3 rgb, float adjustment) +//{ +// // Algorithm from Chapter 16 of OpenGL Shading Language +// const vec3 W = vec3(0.2125, 0.7154, 0.0721); +// vec3 intensity = vec3(dot(rgb, W)); +// return mix(intensity, rgb, adjustment); +//} + + // rgb->yiq + float3 yuv; + yuv.r = pow(dot(color.rgb, float3(0.299, 0.587, 0.114)),LUMINANCE); + yuv.g = dot(color.rgb, float3(0.595716,-0.274453,-0.321263))*ORANGECYAN; + yuv.b = dot(color.rgb, float3(0.211456,-0.522591, 0.311135))*MAGENTAGREEN; + + // apply brightness to y +// yuv.r = saturate(yuv.r * brightness_scale); + + // yuv->rgb + color.r = dot(yuv, float3(1.0, 0.95629572, 0.62102442)); + color.g = dot(yuv, float3(1.0,-0.27212210,-0.64738060)); + color.b = dot(yuv, float3(1.0,-1.10698902, 1.70461500)); + color.rgb = saturate(color.rgb*WHITE/255.0+BLACK/255.0-color.rgb*BLACK/255.0+(pseudoNoise(texcoord))*1.0/255.0); + + color.rgb = saturate(color.rgb+(pseudoNoise(vec2(color.r+color.b,color.g+color.b))-0.5)*NOISE/255.0); + SetOutput(saturate(color)); +}