Advertisement
Guest User

cel-shading shader

a guest
Mar 13th, 2012
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #version 120
  2.  
  3. /*
  4.  
  5. Settings by Sonic Ether
  6. Bokeh Depth-of-Field by Sonic Ether
  7. God Rays by Blizzard
  8. Bloom shader by CosmicSpore (Modified from original source: http://myheroics.wordpress.com/2008/09/04/glsl-bloom-shader/)
  9. Cross-Processing by Sonic Ether.
  10. High Desaturation effect by Sonic Ether
  11. HDR by Sonic Ether
  12. Glare by Sonic Ether
  13. Shaders 2.0 port of Yourself's Cell Shader, port by an anonymous user.
  14. Bug Fixes by Kool_Kat.
  15. celshading by chocapic13
  16. */
  17.  
  18. // Place two leading Slashes in front of the following '#define' lines in order to disable an option.
  19. // MOTIONBLUR, HDR, and BOKEH_DOF are very beta shaders. Use at risk of weird results.
  20. // MOTIONBLUR and BOKEH_DOF are not compatable with eachother. Shaders break when you enable both.
  21. // GLARE is still a work in progress.
  22. // BLOOM is currently broken.
  23.  
  24. //#define HDR
  25. //#define HDR_RANGE 1.0                 // Higher value means that HDR will modulate screen brightness more. Default = 1.0
  26. //#define BOKEH_DOF
  27. //#define GODRAYS
  28. //#define GODRAYS_EXPOSURE 0.4
  29. //#define GODRAYS_SAMPLES 8
  30. //#define GODRAYS_DECAY 0.9
  31. //#define GODRAYS_DENSITY 0.5
  32. //#define GLARE
  33. //#define GLARE_AMOUNT 0.5
  34. //#define GLARE_RANGE 3.0
  35. //#define BLOOM
  36. //#define BLOOM_AMOUNT 1.0
  37. //#define BLOOM_RANGE 3
  38. //#define CEL_SHADING
  39. //#define CEL_SHADING_THRESHOLD 0.4
  40. //#define CEL_SHADING_THICKNESS 0.004
  41. //#define USE_HIGH_QUALITY_BLUR
  42. #define CELSHADING
  43. #define SENSIVITY 0.1
  44.  
  45. #define CROSSPROCESS
  46. #define BRIGHTMULT 1.15                     // 1.0 = default brightness. Higher values mean brighter. 0 would be black.
  47. #define DARKMULT 0.07                       // 0.0 = normal image. Higher values will darken dark colors.
  48. #define COLOR_BOOST 0.2                 // 0.0 = normal saturation. Higher values mean more saturated image.
  49. //#define MOTIONBLUR
  50. //#define MOTIONBLUR_AMOUNT 2.0
  51. #define HIGHDESATURATE
  52. #define GAMMA 0.95                          //1.0 is default brightness. lower values will brighten image, higher values will darken image 
  53.  
  54.  
  55. // DOF Constants - DO NOT CHANGE
  56. // HYPERFOCAL = (Focal Distance ^ 2)/(Circle of Confusion * F Stop) + Focal Distance
  57. #ifdef USE_DOF
  58. const float HYPERFOCAL = 3.132;
  59. const float PICONSTANT = 3.14159;
  60. #endif
  61.  
  62.  
  63. //uniform sampler2D texture;
  64. uniform sampler2D gcolor;
  65. uniform sampler2D gdepth;
  66. uniform sampler2D composite;
  67. //uniform sampler2D gnormal;
  68. uniform sampler2D gaux1; // red is our motion blur mask. If red == 1, don't blur
  69.  
  70. uniform mat4 gbufferProjectionInverse;
  71. uniform mat4 gbufferPreviousProjection;
  72.  
  73. uniform mat4 gbufferModelViewInverse;
  74. uniform mat4 gbufferPreviousModelView;
  75.  
  76.  
  77. uniform vec3 cameraPosition;
  78. uniform vec3 previousCameraPosition;
  79.  
  80. uniform vec3 sunPosition;
  81.  
  82. uniform int worldTime;
  83. uniform float aspectRatio;
  84. uniform float near;
  85. uniform float far;
  86.  
  87. varying vec4 texcoord;
  88.  
  89. uniform float viewHeight;
  90. uniform float viewWidth;
  91.  
  92.  
  93.  
  94. // Standard depth function.
  95. float getDepth(vec2 coord) {
  96.     return 2.0 * near * far / (far + near - (2.0 * texture2D(gdepth, coord).x - 1.0) * (far - near));
  97. }
  98. float eDepth(vec2 coord) {
  99.     return texture2D(gdepth, coord).x;
  100. }
  101. float realcolor(vec2 coord) {
  102.     return ((texture2D(gcolor, coord).r + texture2D(gcolor, coord).g + texture2D(gcolor, coord).b)/3.0);
  103. }
  104.  
  105. uniform mat3 G[2] = mat3[]
  106. (
  107.     mat3( 1.0, 2.0, 1.0, 0.0, 0.0, 0.0, -1.0, -2.0, -1.0 ),
  108.     mat3( 1.0, 0.0, -1.0, 2.0, 0.0, -2.0, 1.0, 0.0, -1.0 )
  109. );
  110.  
  111. uniform mat3 G2[9] = mat3[]
  112. (
  113.     1.0/(2.0*sqrt(2.0)) * mat3( 1.0, sqrt(2.0), 1.0, 0.0, 0.0, 0.0, -1.0, -sqrt(2.0), -1.0 ),
  114.     1.0/(2.0*sqrt(2.0)) * mat3( 1.0, 0.0, -1.0, sqrt(2.0), 0.0, -sqrt(2.0), 1.0, 0.0, -1.0 ),
  115.     1.0/(2.0*sqrt(2.0)) * mat3( 0.0, -1.0, sqrt(2.0), 1.0, 0.0, -1.0, -sqrt(2.0), 1.0, 0.0 ),
  116.     1.0/(2.0*sqrt(2.0)) * mat3( sqrt(2.0), -1.0, 0.0, -1.0, 0.0, 1.0, 0.0, 1.0, -sqrt(2.0) ),
  117.     1.0/2.0 * mat3( 0.0, 1.0, 0.0, -1.0, 0.0, -1.0, 0.0, 1.0, 0.0 ),
  118.     1.0/2.0 * mat3( -1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, -1.0 ),
  119.     1.0/6.0 * mat3( 1.0, -2.0, 1.0, -2.0, 4.0, -2.0, 1.0, -2.0, 1.0 ),
  120.     1.0/6.0 * mat3( -2.0, 1.0, -2.0, 1.0, 4.0, 1.0, -2.0, 1.0, -2.0 ),
  121.     1.0/3.0 * mat3( 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 )
  122. );
  123.  
  124. #ifdef BOKEH_DOF
  125.  
  126. const float blurclamp = 0.0125; // max blur amount
  127. const float bias = 0.3; //aperture - bigger values for shallower depth of field
  128.  
  129. #endif
  130.  
  131. #ifdef GODRAYS
  132.     vec4 addGodRays(vec4 nc, vec2 tx) {
  133.         float threshold = 0.99 * far;
  134. //      bool foreground = false;
  135.         float depthGD = getDepth(tx);
  136.         if ( (worldTime < 14000 || worldTime > 22000) && (sunPosition.z < 0) && (depthGD < threshold) ) {
  137.             vec2 lightPos = sunPosition.xy / -sunPosition.z;
  138.             lightPos.y *= aspectRatio;
  139.             lightPos = (lightPos + 1.0)/2.0;
  140.             //vec2 coord = tx;
  141.             vec2 delta = (tx - lightPos) * GODRAYS_DENSITY / float(GODRAYS_SAMPLES);
  142.             float decay = -sunPosition.z / 100.0;
  143.             vec3 colorGD = vec3(0.0);
  144.            
  145.             for (int i = 0; i < GODRAYS_SAMPLES; i++) {
  146.                 tx -= delta;
  147.                 if (tx.x < 0.0 || tx.x > 1.0) {
  148.                     if (tx.y < 0.0 || tx.y > 1.0) {
  149.                         break;
  150.                     }
  151.                 }
  152.                 vec3 sample = vec3(0.0);
  153.                 if (getDepth(tx) > threshold) {
  154.                     sample = texture2D(composite, tx).rgb;
  155.                 }
  156.                 sample *= vec3(decay);
  157.                 if (distance(tx, lightPos) > 0.05) {
  158.                     sample *= 0.2;
  159.                 }
  160.                     colorGD += sample;
  161.                     decay *= GODRAYS_DECAY;
  162.             }
  163.             return (nc + GODRAYS_EXPOSURE * vec4(colorGD, 0.0));
  164.         } else {
  165.             return nc;
  166.         }
  167.     }
  168. #endif
  169.  
  170. /*
  171. #ifdef BLOOM
  172.     vec4 addBloom(vec4 c, vec2 t) {
  173.         int j;
  174.         int i;
  175.         vec4 bloom = vec4(0.0);
  176.         vec2 loc = vec2(0.0);
  177.         float count = 0.0;
  178.        
  179.         for( i= -BLOOM_RANGE ; i < BLOOM_RANGE; i++ ) {
  180.             for ( j = -BLOOM_RANGE; j < BLOOM_RANGE; j++ ) {
  181.                 loc = t + vec2(j, i)*0.004;
  182.                
  183.                 // Only add to bloom texture if loc is on-screen.
  184.                 if(loc.x > 0 && loc.x < 1 && loc.y > 0 && loc.y < 1) {
  185.                     bloom += texture2D(composite, loc) * BLOOM_AMOUNT;
  186.                     count += 1;
  187.                 }
  188.             }
  189.         }
  190.         bloom /= vec4(count);
  191.        
  192.         if (c.r < 0.3)
  193.         {
  194.             return bloom*bloom*0.012;
  195.         }
  196.         else
  197.         {
  198.             if (c.r < 0.5)
  199.             {
  200.                 return bloom*bloom*0.009;
  201.             }
  202.             else
  203.             {
  204.                 return bloom*bloom*0.0075;
  205.             }
  206.         }
  207.     }
  208. #endif
  209. */
  210.  
  211. #ifdef CEL_SHADING
  212.     float getCellShaderFactor(vec2 coord) {
  213.     float d = getDepth(coord);
  214.     vec3 n = normalize(vec3(getDepth(coord+vec2(CEL_SHADING_THICKNESS,0.0))-d,getDepth(coord+vec2(0.0,CEL_SHADING_THICKNESS))-d , CEL_SHADING_THRESHOLD));
  215.     //clamp(n.z*3.0,0.0,1.0);
  216.     return n.z;
  217.     }
  218. #endif
  219.  
  220.  
  221. // Main ---------------------------------------------------------------------------------------------------
  222. void main() {
  223.  
  224.     vec4 color = texture2D(composite, texcoord.st);
  225.  
  226.  
  227. #ifdef BOKEH_DOF
  228.  
  229.     float depth = eDepth(texcoord.xy);
  230.    
  231.     if (depth > 0.9999) {
  232.         depth = 1.0;
  233.     }
  234.    
  235.  
  236.     float cursorDepth = eDepth(vec2(0.5, 0.5));
  237.    
  238.     if (cursorDepth > 0.9999) {
  239.         cursorDepth = 1.0;
  240.     }
  241.    
  242.    
  243.     vec2 aspectcorrect = vec2(1.0, aspectRatio) * 1.5;
  244.    
  245.     float factor = (depth - cursorDepth);
  246.      
  247.     vec2 dofblur = (vec2 (clamp( factor * bias, -blurclamp, blurclamp )))*0.4;
  248.    
  249.    
  250.  
  251.     vec4 col = vec4(0.0);
  252.     col += texture2D(composite, texcoord.st);
  253.    
  254.     col += texture2D(composite, texcoord.st + (vec2( 0.0,0.4 )*aspectcorrect) * dofblur);
  255.     col += texture2D(composite, texcoord.st + (vec2( 0.15,0.37 )*aspectcorrect) * dofblur);
  256.     col += texture2D(composite, texcoord.st + (vec2( 0.29,0.29 )*aspectcorrect) * dofblur);
  257.     col += texture2D(composite, texcoord.st + (vec2( -0.37,0.15 )*aspectcorrect) * dofblur);   
  258.     col += texture2D(composite, texcoord.st + (vec2( 0.4,0.0 )*aspectcorrect) * dofblur);  
  259.     col += texture2D(composite, texcoord.st + (vec2( 0.37,-0.15 )*aspectcorrect) * dofblur);   
  260.     col += texture2D(composite, texcoord.st + (vec2( 0.29,-0.29 )*aspectcorrect) * dofblur);   
  261.     col += texture2D(composite, texcoord.st + (vec2( -0.15,-0.37 )*aspectcorrect) * dofblur);
  262.     col += texture2D(composite, texcoord.st + (vec2( 0.0,-0.4 )*aspectcorrect) * dofblur); 
  263.     col += texture2D(composite, texcoord.st + (vec2( -0.15,0.37 )*aspectcorrect) * dofblur);
  264.     col += texture2D(composite, texcoord.st + (vec2( -0.29,0.29 )*aspectcorrect) * dofblur);
  265.     col += texture2D(composite, texcoord.st + (vec2( 0.37,0.15 )*aspectcorrect) * dofblur);
  266.     col += texture2D(composite, texcoord.st + (vec2( -0.4,0.0 )*aspectcorrect) * dofblur); 
  267.     col += texture2D(composite, texcoord.st + (vec2( -0.37,-0.15 )*aspectcorrect) * dofblur);  
  268.     col += texture2D(composite, texcoord.st + (vec2( -0.29,-0.29 )*aspectcorrect) * dofblur);  
  269.     col += texture2D(composite, texcoord.st + (vec2( 0.15,-0.37 )*aspectcorrect) * dofblur);
  270.    
  271.     col += texture2D(composite, texcoord.st + (vec2( 0.15,0.37 )*aspectcorrect) * dofblur*0.9);
  272.     col += texture2D(composite, texcoord.st + (vec2( -0.37,0.15 )*aspectcorrect) * dofblur*0.9);       
  273.     col += texture2D(composite, texcoord.st + (vec2( 0.37,-0.15 )*aspectcorrect) * dofblur*0.9);       
  274.     col += texture2D(composite, texcoord.st + (vec2( -0.15,-0.37 )*aspectcorrect) * dofblur*0.9);
  275.     col += texture2D(composite, texcoord.st + (vec2( -0.15,0.37 )*aspectcorrect) * dofblur*0.9);
  276.     col += texture2D(composite, texcoord.st + (vec2( 0.37,0.15 )*aspectcorrect) * dofblur*0.9);    
  277.     col += texture2D(composite, texcoord.st + (vec2( -0.37,-0.15 )*aspectcorrect) * dofblur*0.9);  
  278.     col += texture2D(composite, texcoord.st + (vec2( 0.15,-0.37 )*aspectcorrect) * dofblur*0.9);   
  279.    
  280.     col += texture2D(composite, texcoord.st + (vec2( 0.29,0.29 )*aspectcorrect) * dofblur*0.7);
  281.     col += texture2D(composite, texcoord.st + (vec2( 0.4,0.0 )*aspectcorrect) * dofblur*0.7);  
  282.     col += texture2D(composite, texcoord.st + (vec2( 0.29,-0.29 )*aspectcorrect) * dofblur*0.7);   
  283.     col += texture2D(composite, texcoord.st + (vec2( 0.0,-0.4 )*aspectcorrect) * dofblur*0.7); 
  284.     col += texture2D(composite, texcoord.st + (vec2( -0.29,0.29 )*aspectcorrect) * dofblur*0.7);
  285.     col += texture2D(composite, texcoord.st + (vec2( -0.4,0.0 )*aspectcorrect) * dofblur*0.7); 
  286.     col += texture2D(composite, texcoord.st + (vec2( -0.29,-0.29 )*aspectcorrect) * dofblur*0.7);  
  287.     col += texture2D(composite, texcoord.st + (vec2( 0.0,0.4 )*aspectcorrect) * dofblur*0.7);
  288.              
  289.     col += texture2D(composite, texcoord.st + (vec2( 0.29,0.29 )*aspectcorrect) * dofblur*0.4);
  290.     col += texture2D(composite, texcoord.st + (vec2( 0.4,0.0 )*aspectcorrect) * dofblur*0.4);  
  291.     col += texture2D(composite, texcoord.st + (vec2( 0.29,-0.29 )*aspectcorrect) * dofblur*0.4);   
  292.     col += texture2D(composite, texcoord.st + (vec2( 0.0,-0.4 )*aspectcorrect) * dofblur*0.4); 
  293.     col += texture2D(composite, texcoord.st + (vec2( -0.29,0.29 )*aspectcorrect) * dofblur*0.4);
  294.     col += texture2D(composite, texcoord.st + (vec2( -0.4,0.0 )*aspectcorrect) * dofblur*0.4); 
  295.     col += texture2D(composite, texcoord.st + (vec2( -0.29,-0.29 )*aspectcorrect) * dofblur*0.4);  
  296.     col += texture2D(composite, texcoord.st + (vec2( 0.0,0.4 )*aspectcorrect) * dofblur*0.4);  
  297.  
  298.     color = col/41;
  299.    
  300.  
  301. #endif
  302.  
  303. /*
  304. #ifdef USE_DOF
  305.     float depth = getDepth(texcoord.st);
  306.        
  307.     float cursorDepth = getDepth(vec2(0.5, 0.5));
  308.    
  309.     // foreground blur = 1/2 background blur. Blur should follow exponential pattern until cursor = hyperfocal -- Cursor before hyperfocal
  310.     // Blur should go from 0 to 1/2 hyperfocal then clear to infinity -- Cursor @ hyperfocal.
  311.     // hyperfocal to inifity is clear though dof extends from 1/2 hyper to hyper -- Cursor beyond hyperfocal
  312.    
  313.     float mixAmount = 0.0;
  314.    
  315.     if (depth < cursorDepth) {
  316.         mixAmount = clamp(2.0 * ((clamp(cursorDepth, 0.0, HYPERFOCAL) - depth) / (clamp(cursorDepth, 0.0, HYPERFOCAL))), 0.0, 1.0);
  317.     } else if (cursorDepth == HYPERFOCAL) {
  318.         mixAmount = 0.0;
  319.     } else {
  320.         mixAmount =  1.0 - clamp((((cursorDepth * HYPERFOCAL) / (HYPERFOCAL - cursorDepth)) - (depth - cursorDepth)) / ((cursorDepth * HYPERFOCAL) / (HYPERFOCAL - cursorDepth)), 0.0, 1.0);
  321.     }
  322.    
  323.     if (mixAmount != 0.0) {
  324.         color = mix(color, getBlurredColor(), mixAmount);
  325.     }
  326. #endif
  327. */
  328.  
  329.  
  330.  
  331.    
  332.  
  333.  
  334. #ifdef MOTIONBLUR
  335.  
  336.     vec4 depth = texture2D(gdepth, texcoord.st);
  337.    
  338.     float blurmask = texture2D(gaux1, texcoord.st).r;
  339.  
  340.    
  341.         if (depth.x > 0.9999999) {
  342.         depth.x = 1;
  343.         }
  344.        
  345.        
  346.    
  347.    
  348.         if (depth.x < 1.9999999) {
  349.         vec4 currentPosition = vec4(texcoord.x * 2.0 - 1.0, texcoord.y * 2.0 - 1.0, 2.0 * depth.x - 1.0, 1.0);
  350.    
  351.         vec4 fragposition = gbufferProjectionInverse * currentPosition;
  352.         fragposition = gbufferModelViewInverse * fragposition;
  353.         fragposition /= fragposition.w;
  354.         fragposition.xyz += cameraPosition;
  355.    
  356.         vec4 previousPosition = fragposition;
  357.         previousPosition.xyz -= previousCameraPosition;
  358.         previousPosition = gbufferPreviousModelView * previousPosition;
  359.         previousPosition = gbufferPreviousProjection * previousPosition;
  360.         previousPosition /= previousPosition.w;
  361.    
  362.         vec2 velocity = (currentPosition - previousPosition).st * 0.009 * MOTIONBLUR_AMOUNT;
  363.         velocity = velocity;
  364.    
  365.         int samples = 1;
  366.        
  367.         if (blurmask > 0.999999) {
  368.             velocity = vec2(0,0);
  369.         }
  370.        
  371.        
  372.         vec2 coord = texcoord.st + velocity;
  373.         for (int i = 0; i < 16; ++i, coord += velocity) {
  374.             if (coord.s > 1.0 || coord.t > 1.0 || coord.s < 0.0 || coord.t < 0.0) {
  375.                 break;
  376.             }
  377.        
  378.             color += texture2D(composite, coord);
  379.             ++samples;
  380.        
  381.         }  
  382.             color = color/samples;
  383.         }
  384.        
  385.  
  386.        
  387.    
  388. #endif
  389.  
  390. #ifdef GODRAYS
  391.     color.r = addGodRays(color, texcoord.st).r;
  392.     color.g = addGodRays(color, texcoord.st).g;
  393.     color.b = addGodRays(color, texcoord.st).b;
  394. #endif
  395.  
  396. /*
  397. #ifdef BLOOM
  398.     color = color * 0.8;
  399.     color += addBloom(color, texcoord.st);
  400. #endif
  401. */
  402. #ifdef CELSHADING
  403.   vec2 uv = texcoord.xy;
  404.   vec3 tc = vec3(1.0, 0.0, 0.0);
  405.   float pw = 1/viewWidth;
  406.   float ph = 1/viewHeight;
  407.  
  408.     mat3 I;
  409.     float cnv[9];
  410.     vec3 sample;
  411.     int i, j;
  412.  
  413.     for (i=0; i<3; i++)
  414.     {
  415.       for (j=0; j<3; j++)
  416.       {
  417.           sample = texture2D(composite, vec2(texcoord.xy) + vec2(pw*-i,ph*-i)).rgb;
  418.         I[i][j] = length(sample);
  419.       }
  420.     }
  421.    
  422.     for (i=0; i<9; i++)
  423.     {
  424.       float dp3 = dot(G2[i][0], I[0]) + dot(G2[i][1], I[1]) + dot(G2[i][2], I[2]);
  425.       cnv[i] = dp3 * dp3;
  426.     }
  427.  
  428.     //float M = (cnv[0] + cnv[1]) + (cnv[2] + cnv[3]); // Edge detector
  429.     //float S = (cnv[4] + cnv[5]) + (cnv[6] + cnv[7]) + (cnv[8] + M);
  430.     float M = (cnv[4] + cnv[5]) + (cnv[6] + cnv[7]); // Line detector
  431.     float S = (cnv[0] + cnv[1]) + (cnv[2] + cnv[3]) + (cnv[4] + cnv[5]) + (cnv[6] + cnv[7]) + cnv[8];
  432.    
  433.     tc = vec3(sqrt(M/S));
  434.     float td = (tc.r+tc.g+tc.b)/3;
  435.     if (td > SENSIVITY){
  436.     color = vec4(color.r*td/5,color.g*td/5,color.b*td/5,1.0);
  437.     }
  438.  
  439. #endif
  440.  
  441. #ifdef BLOOM
  442.  
  443.     color = color * 0.8;
  444.    
  445.     float radius = 0.002;
  446.     float blm_amount = 0.02*BLOOM_AMOUNT;
  447.     float sc = 20.0;
  448.    
  449.     int i = 0;
  450.     int samples = 1;
  451.    
  452.     vec4 clr = vec4(0.0);
  453.    
  454.     for (i = -10; i < 10; i++) {
  455.     clr += texture2D(composite, texcoord.st + (vec2(i,i))*radius)*sc;
  456.     clr += texture2D(composite, texcoord.st + (vec2(i,-i))*radius)*sc;
  457.     clr += texture2D(composite, texcoord.st + (vec2(-i,i))*radius)*sc;
  458.     clr += texture2D(composite, texcoord.st + (vec2(-i,-i))*radius)*sc;
  459.    
  460.     clr += texture2D(composite, texcoord.st + (vec2(0.0,i))*radius)*sc;
  461.     clr += texture2D(composite, texcoord.st + (vec2(0.0,-i))*radius)*sc;
  462.     clr += texture2D(composite, texcoord.st + (vec2(-i,0.0))*radius)*sc;
  463.     clr += texture2D(composite, texcoord.st + (vec2(i,0.0))*radius)*sc;
  464.    
  465.     ++samples;
  466.     sc = sc - 1.0;
  467.     }
  468.    
  469.     clr = (clr/8.0)/samples;
  470.    
  471.     color += clr*blm_amount;
  472.  
  473. #endif
  474.  
  475. #ifdef GLARE
  476.  
  477.     color = color * 0.8;
  478.    
  479.     float radius = 0.002*GLARE_RANGE;
  480.     float radiusv = 0.002;
  481.     float bloomintensity = 0.1*GLARE_AMOUNT;
  482.  
  483.     vec4 clr = vec4(0.0);
  484.    
  485.     clr += texture2D(composite, texcoord.st);
  486.    
  487.     //horizontal (70 taps)
  488.    
  489.    
  490.     clr += texture2D(composite, texcoord.st + (vec2(10.0,0.0))*radius)*10.0;
  491.     clr += texture2D(composite, texcoord.st + (vec2(9.0,0.0))*radius)*11.0;
  492.     clr += texture2D(composite, texcoord.st + (vec2(8.0,0.0))*radius)*12.0;
  493.     clr += texture2D(composite, texcoord.st + (vec2(7.0,0.0))*radius)*13.0;
  494.     clr += texture2D(composite, texcoord.st + (vec2(6.0,0.0))*radius)*14.0;
  495.     clr += texture2D(composite, texcoord.st + (vec2(5.0,0.0))*radius)*15.0;
  496.     clr += texture2D(composite, texcoord.st + (vec2(4.0,0.0))*radius)*16.0;
  497.     clr += texture2D(composite, texcoord.st + (vec2(3.0,0.0))*radius)*17.0;
  498.     clr += texture2D(composite, texcoord.st + (vec2(2.0,0.0))*radius)*18.0;
  499.     clr += texture2D(composite, texcoord.st + (vec2(1.0,0.0))*radius)*19.0;
  500.    
  501.         clr += texture2D(composite, texcoord.st + (vec2(0.0,0.0))*radius)*20.0;
  502.        
  503.     clr += texture2D(composite, texcoord.st + (vec2(-1.0,0.0))*radius)*19.0;
  504.     clr += texture2D(composite, texcoord.st + (vec2(-2.0,0.0))*radius)*18.0;
  505.     clr += texture2D(composite, texcoord.st + (vec2(-3.0,0.0))*radius)*17.0;
  506.     clr += texture2D(composite, texcoord.st + (vec2(-4.0,0.0))*radius)*16.0;
  507.     clr += texture2D(composite, texcoord.st + (vec2(-5.0,0.0))*radius)*15.0;
  508.     clr += texture2D(composite, texcoord.st + (vec2(-6.0,0.0))*radius)*14.0;
  509.     clr += texture2D(composite, texcoord.st + (vec2(-7.0,0.0))*radius)*13.0;
  510.     clr += texture2D(composite, texcoord.st + (vec2(-8.0,0.0))*radius)*12.0;
  511.     clr += texture2D(composite, texcoord.st + (vec2(-9.0,0.0))*radius)*11.0;
  512.     clr += texture2D(composite, texcoord.st + (vec2(-10.0,0.0))*radius)*10.0;
  513.  
  514.    
  515.     //vertical
  516.    
  517.  
  518.     clr += texture2D(composite, texcoord.st + (vec2(0.0,10.0))*radius)*10.0;
  519.     clr += texture2D(composite, texcoord.st + (vec2(0.0,9.0))*radius)*11.0;
  520.     clr += texture2D(composite, texcoord.st + (vec2(0.0,8.0))*radius)*12.0;
  521.     clr += texture2D(composite, texcoord.st + (vec2(0.0,7.0))*radius)*13.0;
  522.     clr += texture2D(composite, texcoord.st + (vec2(0.0,6.0))*radius)*14.0;
  523.     clr += texture2D(composite, texcoord.st + (vec2(0.0,5.0))*radius)*15.0;
  524.     clr += texture2D(composite, texcoord.st + (vec2(0.0,4.0))*radius)*16.0;
  525.     clr += texture2D(composite, texcoord.st + (vec2(0.0,3.0))*radius)*17.0;
  526.     clr += texture2D(composite, texcoord.st + (vec2(0.0,2.0))*radius)*18.0;
  527.     clr += texture2D(composite, texcoord.st + (vec2(0.0,1.0))*radius)*19.0;
  528.    
  529.    
  530.     clr += texture2D(composite, texcoord.st + (vec2(0.0,-10.0))*radius)*10.0;
  531.     clr += texture2D(composite, texcoord.st + (vec2(0.0,-9.0))*radius)*11.0;
  532.     clr += texture2D(composite, texcoord.st + (vec2(0.0,-8.0))*radius)*12.0;
  533.     clr += texture2D(composite, texcoord.st + (vec2(0.0,-7.0))*radius)*13.0;
  534.     clr += texture2D(composite, texcoord.st + (vec2(0.0,-6.0))*radius)*14.0;
  535.     clr += texture2D(composite, texcoord.st + (vec2(0.0,-5.0))*radius)*15.0;
  536.     clr += texture2D(composite, texcoord.st + (vec2(0.0,-4.0))*radius)*16.0;
  537.     clr += texture2D(composite, texcoord.st + (vec2(0.0,-3.0))*radius)*17.0;
  538.     clr += texture2D(composite, texcoord.st + (vec2(0.0,-2.0))*radius)*18.0;
  539.     clr += texture2D(composite, texcoord.st + (vec2(0.0,-1.0))*radius)*19.0;
  540.    
  541.  
  542.    
  543.     clr = (clr/20.0)/5.0;
  544.     clr.r = pow(clr.r, 1.2)*1.6 - (clr.g + clr.b)*0.6;
  545.     clr.g = pow(clr.g, 1.2)*1.6 - (clr.r + clr.b)*0.6;
  546.     clr.b = pow(clr.b, 1.2)*1.9 - (clr.r + clr.g)*0.9;
  547.    
  548.     clr = clamp((clr), 0.0, 1.0);
  549.    
  550.     color.r = color.r + (clr.r*1.5)*bloomintensity;
  551.     color.g = color.g + (clr.g*1.5)*bloomintensity;
  552.     color.b = color.b + (clr.b*4.0)*bloomintensity;
  553.     color = max(color, 0.0);
  554.     //color = color*1.05 - 0.05;
  555.    
  556.    
  557.  
  558. #endif
  559.  
  560.  
  561. #ifdef CEL_SHADING
  562.     color.rgb *= (getCellShaderFactor(texcoord.st));
  563. #endif
  564.  
  565. #ifdef HDR
  566.  
  567. //determine screen brightness
  568. float avgclr = realcolor(vec2(0.5, 0.5));
  569.  
  570.  
  571.     avgclr += realcolor(vec2(0.01, 0.01));
  572.     avgclr += realcolor(vec2(0.01, -0.01));
  573.     avgclr += realcolor(vec2(-0.01, 0.01));
  574.     avgclr += realcolor(vec2(-0.01, -0.01));
  575.      
  576.     avgclr += realcolor(vec2(0.02, 0.02));
  577.     avgclr += realcolor(vec2(0.02, -0.02));
  578.     avgclr += realcolor(vec2(-0.02, 0.02));
  579.     avgclr += realcolor(vec2(-0.02, -0.02));
  580.    
  581.     avgclr += realcolor(vec2(0.03, 0.03));
  582.     avgclr += realcolor(vec2(0.03, -0.03));
  583.     avgclr += realcolor(vec2(-0.03, 0.03));
  584.     avgclr += realcolor(vec2(-0.03, -0.03));
  585.    
  586.     avgclr += realcolor(vec2(0.04, 0.04));
  587.     avgclr += realcolor(vec2(0.04, -0.04));
  588.     avgclr += realcolor(vec2(-0.04, 0.04));
  589.     avgclr += realcolor(vec2(-0.04, -0.04));
  590.    
  591.     avgclr += realcolor(vec2(0.05, 0.05));
  592.     avgclr += realcolor(vec2(0.05, -0.05));
  593.     avgclr += realcolor(vec2(-0.05, 0.05));
  594.     avgclr += realcolor(vec2(-0.05, -0.05));
  595.    
  596.     avgclr += realcolor(vec2(0.06, 0.06));
  597.     avgclr += realcolor(vec2(0.06, -0.06));
  598.     avgclr += realcolor(vec2(-0.06, 0.06));
  599.     avgclr += realcolor(vec2(-0.06, -0.06));
  600.    
  601.     avgclr += realcolor(vec2(0.07, 0.07));
  602.     avgclr += realcolor(vec2(0.07, -0.07));
  603.     avgclr += realcolor(vec2(-0.07, 0.07));
  604.     avgclr += realcolor(vec2(-0.07, -0.07));
  605.    
  606.     avgclr += realcolor(vec2(0.08, 0.08));
  607.     avgclr += realcolor(vec2(0.08, -0.08));
  608.     avgclr += realcolor(vec2(-0.08, 0.08));
  609.     avgclr += realcolor(vec2(-0.08, -0.08));
  610.    
  611.     avgclr += realcolor(vec2(0.09, 0.09));
  612.     avgclr += realcolor(vec2(0.09, -0.09));
  613.     avgclr += realcolor(vec2(-0.09, 0.09));
  614.     avgclr += realcolor(vec2(-0.09, -0.09));
  615.    
  616.     avgclr += realcolor(vec2(0.10, 0.10));
  617.     avgclr += realcolor(vec2(0.10, -0.10));
  618.     avgclr += realcolor(vec2(-0.10, 0.10));
  619.     avgclr += realcolor(vec2(-0.10, -0.10));
  620.    
  621.    
  622.    
  623.    
  624.     avgclr += realcolor(vec2(0.11, 0.11));
  625.     avgclr += realcolor(vec2(0.11, -0.11));
  626.     avgclr += realcolor(vec2(-0.11, 0.11));
  627.     avgclr += realcolor(vec2(-0.11, -0.11));
  628.      
  629.     avgclr += realcolor(vec2(0.12, 0.12));
  630.     avgclr += realcolor(vec2(0.12, -0.12));
  631.     avgclr += realcolor(vec2(-0.12, 0.12));
  632.     avgclr += realcolor(vec2(-0.12, -0.12));
  633.    
  634.     avgclr += realcolor(vec2(0.13, 0.13));
  635.     avgclr += realcolor(vec2(0.13, -0.13));
  636.     avgclr += realcolor(vec2(-0.13, 0.13));
  637.     avgclr += realcolor(vec2(-0.13, -0.13));
  638.    
  639.     avgclr += realcolor(vec2(0.14, 0.14));
  640.     avgclr += realcolor(vec2(0.14, -0.14));
  641.     avgclr += realcolor(vec2(-0.14, 0.14));
  642.     avgclr += realcolor(vec2(-0.14, -0.14));
  643.    
  644.     avgclr += realcolor(vec2(0.15, 0.15));
  645.     avgclr += realcolor(vec2(0.15, -0.15));
  646.     avgclr += realcolor(vec2(-0.15, 0.15));
  647.     avgclr += realcolor(vec2(-0.15, -0.15));
  648.    
  649.     avgclr += realcolor(vec2(0.16, 0.16));
  650.     avgclr += realcolor(vec2(0.16, -0.16));
  651.     avgclr += realcolor(vec2(-0.16, 0.16));
  652.     avgclr += realcolor(vec2(-0.16, -0.16));
  653.    
  654.     avgclr += realcolor(vec2(0.17, 0.17));
  655.     avgclr += realcolor(vec2(0.17, -0.17));
  656.     avgclr += realcolor(vec2(-0.17, 0.17));
  657.     avgclr += realcolor(vec2(-0.17, -0.17));
  658.    
  659.     avgclr += realcolor(vec2(0.18, 0.18));
  660.     avgclr += realcolor(vec2(0.18, -0.18));
  661.     avgclr += realcolor(vec2(-0.18, 0.18));
  662.     avgclr += realcolor(vec2(-0.18, -0.18));
  663.    
  664.     avgclr += realcolor(vec2(0.19, 0.19));
  665.     avgclr += realcolor(vec2(0.19, -0.19));
  666.     avgclr += realcolor(vec2(-0.19, 0.19));
  667.     avgclr += realcolor(vec2(-0.19, -0.19));
  668.    
  669.     avgclr += realcolor(vec2(0.20, 0.20));
  670.     avgclr += realcolor(vec2(0.20, -0.20));
  671.     avgclr += realcolor(vec2(-0.20, 0.20));
  672.     avgclr += realcolor(vec2(-0.20, -0.20));
  673.    
  674.    
  675.    
  676.     avgclr += realcolor(vec2(0.21, 0.21));
  677.     avgclr += realcolor(vec2(0.21, -0.21));
  678.     avgclr += realcolor(vec2(-0.21, 0.21));
  679.     avgclr += realcolor(vec2(-0.21, -0.21));
  680.      
  681.     avgclr += realcolor(vec2(0.22, 0.22));
  682.     avgclr += realcolor(vec2(0.22, -0.22));
  683.     avgclr += realcolor(vec2(-0.22, 0.22));
  684.     avgclr += realcolor(vec2(-0.22, -0.22));
  685.    
  686.     avgclr += realcolor(vec2(0.23, 0.23));
  687.     avgclr += realcolor(vec2(0.23, -0.23));
  688.     avgclr += realcolor(vec2(-0.23, 0.23));
  689.     avgclr += realcolor(vec2(-0.23, -0.23));
  690.    
  691.     avgclr += realcolor(vec2(0.24, 0.24));
  692.     avgclr += realcolor(vec2(0.24, -0.24));
  693.     avgclr += realcolor(vec2(-0.24, 0.24));
  694.     avgclr += realcolor(vec2(-0.24, -0.24));
  695.    
  696.     avgclr += realcolor(vec2(0.25, 0.25));
  697.     avgclr += realcolor(vec2(0.25, -0.25));
  698.     avgclr += realcolor(vec2(-0.25, 0.25));
  699.     avgclr += realcolor(vec2(-0.25, -0.25));
  700.    
  701.     avgclr += realcolor(vec2(0.26, 0.26));
  702.     avgclr += realcolor(vec2(0.26, -0.26));
  703.     avgclr += realcolor(vec2(-0.26, 0.26));
  704.     avgclr += realcolor(vec2(-0.26, -0.26));
  705.    
  706.     avgclr += realcolor(vec2(0.27, 0.27));
  707.     avgclr += realcolor(vec2(0.27, -0.27));
  708.     avgclr += realcolor(vec2(-0.27, 0.27));
  709.     avgclr += realcolor(vec2(-0.27, -0.27));
  710.    
  711.     avgclr += realcolor(vec2(0.28, 0.28));
  712.     avgclr += realcolor(vec2(0.28, -0.28));
  713.     avgclr += realcolor(vec2(-0.28, 0.28));
  714.     avgclr += realcolor(vec2(-0.28, -0.28));
  715.    
  716.     avgclr += realcolor(vec2(0.29, 0.29));
  717.     avgclr += realcolor(vec2(0.29, -0.29));
  718.     avgclr += realcolor(vec2(-0.29, 0.29));
  719.     avgclr += realcolor(vec2(-0.29, -0.29));
  720.    
  721.     avgclr += realcolor(vec2(0.40, 0.40));
  722.     avgclr += realcolor(vec2(0.40, -0.40));
  723.     avgclr += realcolor(vec2(-0.40, 0.40));
  724.     avgclr += realcolor(vec2(-0.40, -0.40));
  725.    
  726.    
  727.    
  728.    
  729.     avgclr += realcolor(vec2(0.31, 0.31));
  730.     avgclr += realcolor(vec2(0.31, -0.31));
  731.     avgclr += realcolor(vec2(-0.31, 0.31));
  732.     avgclr += realcolor(vec2(-0.31, -0.31));
  733.      
  734.     avgclr += realcolor(vec2(0.32, 0.32));
  735.     avgclr += realcolor(vec2(0.32, -0.32));
  736.     avgclr += realcolor(vec2(-0.32, 0.32));
  737.     avgclr += realcolor(vec2(-0.32, -0.32));
  738.    
  739.     avgclr += realcolor(vec2(0.33, 0.33));
  740.     avgclr += realcolor(vec2(0.33, -0.33));
  741.     avgclr += realcolor(vec2(-0.33, 0.33));
  742.     avgclr += realcolor(vec2(-0.33, -0.33));
  743.    
  744.     avgclr += realcolor(vec2(0.34, 0.34));
  745.     avgclr += realcolor(vec2(0.34, -0.34));
  746.     avgclr += realcolor(vec2(-0.34, 0.34));
  747.     avgclr += realcolor(vec2(-0.34, -0.34));
  748.    
  749.     avgclr += realcolor(vec2(0.35, 0.35));
  750.     avgclr += realcolor(vec2(0.35, -0.35));
  751.     avgclr += realcolor(vec2(-0.35, 0.35));
  752.     avgclr += realcolor(vec2(-0.35, -0.35));
  753.    
  754.     avgclr += realcolor(vec2(0.36, 0.36));
  755.     avgclr += realcolor(vec2(0.36, -0.36));
  756.     avgclr += realcolor(vec2(-0.36, 0.36));
  757.     avgclr += realcolor(vec2(-0.36, -0.36));
  758.    
  759.     avgclr += realcolor(vec2(0.37, 0.37));
  760.     avgclr += realcolor(vec2(0.37, -0.37));
  761.     avgclr += realcolor(vec2(-0.37, 0.37));
  762.     avgclr += realcolor(vec2(-0.37, -0.37));
  763.    
  764.     avgclr += realcolor(vec2(0.38, 0.38));
  765.     avgclr += realcolor(vec2(0.38, -0.38));
  766.     avgclr += realcolor(vec2(-0.38, 0.38));
  767.     avgclr += realcolor(vec2(-0.38, -0.38));
  768.    
  769.     avgclr += realcolor(vec2(0.39, 0.39));
  770.     avgclr += realcolor(vec2(0.39, -0.39));
  771.     avgclr += realcolor(vec2(-0.39, 0.39));
  772.     avgclr += realcolor(vec2(-0.39, -0.39));
  773.    
  774.     avgclr += realcolor(vec2(0.40, 0.40));
  775.     avgclr += realcolor(vec2(0.40, -0.40));
  776.     avgclr += realcolor(vec2(-0.40, 0.40));
  777.     avgclr += realcolor(vec2(-0.40, -0.40));
  778.    
  779.    
  780.  
  781.    
  782.    
  783.     avgclr += realcolor(vec2(0.41, 0.41));
  784.     avgclr += realcolor(vec2(0.41, -0.41));
  785.     avgclr += realcolor(vec2(-0.41, 0.41));
  786.     avgclr += realcolor(vec2(-0.41, -0.41));
  787.      
  788.     avgclr += realcolor(vec2(0.42, 0.42));
  789.     avgclr += realcolor(vec2(0.42, -0.42));
  790.     avgclr += realcolor(vec2(-0.42, 0.42));
  791.     avgclr += realcolor(vec2(-0.42, -0.42));
  792.    
  793.     avgclr += realcolor(vec2(0.43, 0.43));
  794.     avgclr += realcolor(vec2(0.43, -0.43));
  795.     avgclr += realcolor(vec2(-0.43, 0.43));
  796.     avgclr += realcolor(vec2(-0.43, -0.43));
  797.    
  798.     avgclr += realcolor(vec2(0.44, 0.44));
  799.     avgclr += realcolor(vec2(0.44, -0.44));
  800.     avgclr += realcolor(vec2(-0.44, 0.44));
  801.     avgclr += realcolor(vec2(-0.44, -0.44));
  802.    
  803.     avgclr += realcolor(vec2(0.45, 0.45));
  804.     avgclr += realcolor(vec2(0.45, -0.45));
  805.     avgclr += realcolor(vec2(-0.45, 0.45));
  806.     avgclr += realcolor(vec2(-0.45, -0.45));
  807.    
  808.     avgclr += realcolor(vec2(0.46, 0.46));
  809.     avgclr += realcolor(vec2(0.46, -0.46));
  810.     avgclr += realcolor(vec2(-0.46, 0.46));
  811.     avgclr += realcolor(vec2(-0.46, -0.46));
  812.    
  813.     avgclr += realcolor(vec2(0.47, 0.47));
  814.     avgclr += realcolor(vec2(0.47, -0.47));
  815.     avgclr += realcolor(vec2(-0.47, 0.47));
  816.     avgclr += realcolor(vec2(-0.47, -0.47));
  817.    
  818.     avgclr += realcolor(vec2(0.48, 0.48));
  819.     avgclr += realcolor(vec2(0.48, -0.48));
  820.     avgclr += realcolor(vec2(-0.48, 0.48));
  821.     avgclr += realcolor(vec2(-0.48, -0.48));
  822.    
  823.     avgclr += realcolor(vec2(0.49, 0.49));
  824.     avgclr += realcolor(vec2(0.49, -0.49));
  825.     avgclr += realcolor(vec2(-0.49, 0.49));
  826.     avgclr += realcolor(vec2(-0.49, -0.49));
  827.    
  828.  
  829.     //scale exposure control
  830.     avgclr = 1/(clamp(avgclr/200.0, 0.0, 1.0)+0.5)*HDR_RANGE - HDR_RANGE;
  831.      
  832.       //modulate colors inversely proportional to average color
  833. color.r = color.r + color.r*((avgclr)) + (0.01*avgclr);
  834. color.g = color.g + color.g*((avgclr)) + (0.01*avgclr);
  835. color.b = color.b + color.b*((avgclr)) + (0.01*avgclr);
  836.      
  837.  
  838.  
  839. #endif;
  840.  
  841.  
  842. #ifdef CROSSPROCESS
  843.     //pre-gain
  844.     color.r = color.r * (BRIGHTMULT + 0.0) + 0.03;
  845.     color.g = color.g * (BRIGHTMULT + 0.0) + 0.03;
  846.     color.b = color.b * (BRIGHTMULT + 0.0) + 0.03;
  847.    
  848.     //compensate for low-light artifacts
  849.     color = color+0.029;
  850.  
  851.     //calculate double curve
  852.     float dbr = -color.r + 1.4;
  853.     float dbg = -color.g + 1.4;
  854.     float dbb = -color.b + 1.4;
  855.    
  856.     //fade between simple gamma up curve and double curve
  857.     float pr = mix(dbr, 0.65, 0.7);
  858.     float pg = mix(dbg, 0.65, 0.7);
  859.     float pb = mix(dbb, 0.75, 0.7);
  860.    
  861.     color.r = pow((color.r * 0.99 - 0.02), pr);
  862.     color.g = pow((color.g * 0.99 - 0.015), pg);
  863.     color.b = pow((color.b * 0.90 + 0.01), pb);
  864. #endif
  865.  
  866. #ifdef HIGHDESATURATE
  867.  
  868.     //desaturate technique (choose one)
  869.  
  870.     //average
  871.     float rgb = max(color.r, max(color.g, color.b))/2 + min(color.r, min(color.g, color.b))/2;
  872.  
  873.     //adjust black and white image to be brighter
  874.     float bw = pow(rgb, 0.7);
  875.  
  876.     //mix between per-channel analysis and average analysis
  877.     float rgbr = mix(rgb, color.r, 0.7);
  878.     float rgbg = mix(rgb, color.g, 0.7);
  879.     float rgbb = mix(rgb, color.b, 0.7);
  880.  
  881.     //calculate crossfade based on lum
  882.     float mixfactorr = max(0.0, (rgbr*2 - 1));
  883.     float mixfactorg = max(0.0, (rgbg*2 - 1));
  884.     float mixfactorb = max(0.0, (rgbb*2 - 1));
  885.  
  886.     //crossfade between saturated and desaturated image
  887.     float mixr = mix(color.r, bw, mixfactorr);
  888.     float mixg = mix(color.g, bw, mixfactorg);
  889.     float mixb = mix(color.b, bw, mixfactorb);
  890.  
  891.     //adjust level of desaturation
  892.     color.r = clamp((mix(mixr, color.r, 0.1)), 0.0, 1.0);
  893.     color.g = clamp((mix(mixg, color.g, 0.1)), 0.0, 1.0);
  894.     color.b = clamp((mix(mixb, color.b, 0.1)), 0.0, 1.0);
  895.    
  896.     //desaturate blue channel
  897.     color.b = color.b*0.9 + ((color.r + color.g)/2.0)*0.1;
  898.    
  899.  
  900.     //hold color values for color boost
  901.     //vec4 hld = color;
  902.  
  903.    
  904.    
  905.     //Color boosting
  906.     color.r = (color.r)*(COLOR_BOOST + 1.0) + (color.g + color.b)*(-COLOR_BOOST);
  907.     color.g = (color.g)*(COLOR_BOOST + 1.0) + (color.r + color.b)*(-COLOR_BOOST);
  908.     color.b = (color.b)*(COLOR_BOOST + 1.0) + (color.r + color.g)*(-COLOR_BOOST);
  909.    
  910.     //color.r = mix(((color.r)*(COLOR_BOOST + 1.0) + (hld.g + hld.b)*(-COLOR_BOOST)), hld.r, (max(((1-rgb)*2 - 1), 0.0)));
  911.     //color.g = mix(((color.g)*(COLOR_BOOST + 1.0) + (hld.r + hld.b)*(-COLOR_BOOST)), hld.g, (max(((1-rgb)*2 - 1), 0.0)));
  912.     //color.b = mix(((color.b)*(COLOR_BOOST + 1.0) + (hld.r + hld.g)*(-COLOR_BOOST)), hld.b, (max(((1-rgb)*2 - 1), 0.0)));
  913.    
  914.     //undo artifact compensation
  915.     color = max(((color*1.10) - 0.06), 0.0);
  916.    
  917.     color = color * BRIGHTMULT;
  918.  
  919.     color.r = pow(color.r, GAMMA);
  920.     color.g = pow(color.g, GAMMA);
  921.     color.b = pow(color.b, GAMMA);
  922.    
  923.     color = color*(1.0 + DARKMULT) - DARKMULT;
  924.    
  925. #endif
  926.     gl_FragColor = color;
  927.    
  928. // End of Main. -----------------
  929. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement