Advertisement
Guest User

timeofday colors

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