mix.fragment.fx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. precision highp float;
  2. // Constants
  3. uniform vec3 vEyePosition;
  4. uniform vec4 vDiffuseColor;
  5. #ifdef SPECULARTERM
  6. uniform vec4 vSpecularColor;
  7. #endif
  8. // Input
  9. varying vec3 vPositionW;
  10. #ifdef NORMAL
  11. varying vec3 vNormalW;
  12. #endif
  13. #ifdef VERTEXCOLOR
  14. varying vec4 vColor;
  15. #endif
  16. // Helper functions
  17. #include<helperFunctions>
  18. // Lights
  19. #include<__decl__lightFragment>[0..maxSimultaneousLights]
  20. // Samplers
  21. #ifdef DIFFUSE
  22. varying vec2 vTextureUV;
  23. uniform sampler2D mixMap1Sampler;
  24. uniform vec2 vTextureInfos;
  25. #ifdef MIXMAP2
  26. uniform sampler2D mixMap2Sampler;
  27. #endif
  28. uniform sampler2D diffuse1Sampler;
  29. uniform sampler2D diffuse2Sampler;
  30. uniform sampler2D diffuse3Sampler;
  31. uniform sampler2D diffuse4Sampler;
  32. uniform vec2 diffuse1Infos;
  33. uniform vec2 diffuse2Infos;
  34. uniform vec2 diffuse3Infos;
  35. uniform vec2 diffuse4Infos;
  36. #ifdef MIXMAP2
  37. uniform sampler2D diffuse5Sampler;
  38. uniform sampler2D diffuse6Sampler;
  39. uniform sampler2D diffuse7Sampler;
  40. uniform sampler2D diffuse8Sampler;
  41. uniform vec2 diffuse5Infos;
  42. uniform vec2 diffuse6Infos;
  43. uniform vec2 diffuse7Infos;
  44. uniform vec2 diffuse8Infos;
  45. #endif
  46. #endif
  47. // Shadows
  48. #include<lightsFragmentFunctions>
  49. #include<shadowsFragmentFunctions>
  50. #include<clipPlaneFragmentDeclaration>
  51. // Fog
  52. #include<fogFragmentDeclaration>
  53. void main(void) {
  54. // Clip plane
  55. #include<clipPlaneFragment>
  56. vec3 viewDirectionW = normalize(vEyePosition - vPositionW);
  57. // Base color
  58. vec4 finalMixColor = vec4(1., 1., 1., 1.);
  59. vec3 diffuseColor = vDiffuseColor.rgb;
  60. #ifdef MIXMAP2
  61. vec4 mixColor2 = vec4(1., 1., 1., 1.);
  62. #endif
  63. #ifdef SPECULARTERM
  64. float glossiness = vSpecularColor.a;
  65. vec3 specularColor = vSpecularColor.rgb;
  66. #else
  67. float glossiness = 0.;
  68. #endif
  69. // Alpha
  70. float alpha = vDiffuseColor.a;
  71. // Normal
  72. #ifdef NORMAL
  73. vec3 normalW = normalize(vNormalW);
  74. #else
  75. vec3 normalW = vec3(1.0, 1.0, 1.0);
  76. #endif
  77. #ifdef DIFFUSE
  78. vec4 mixColor = texture2D(mixMap1Sampler, vTextureUV);
  79. #include<depthPrePass>
  80. mixColor.rgb *= vTextureInfos.y;
  81. vec4 diffuse1Color = texture2D(diffuse1Sampler, vTextureUV * diffuse1Infos);
  82. vec4 diffuse2Color = texture2D(diffuse2Sampler, vTextureUV * diffuse2Infos);
  83. vec4 diffuse3Color = texture2D(diffuse3Sampler, vTextureUV * diffuse3Infos);
  84. vec4 diffuse4Color = texture2D(diffuse4Sampler, vTextureUV * diffuse4Infos);
  85. diffuse1Color.rgb *= mixColor.r;
  86. diffuse2Color.rgb = mix(diffuse1Color.rgb, diffuse2Color.rgb, mixColor.g);
  87. diffuse3Color.rgb = mix(diffuse2Color.rgb, diffuse3Color.rgb, mixColor.b);
  88. finalMixColor.rgb = mix(diffuse3Color.rgb, diffuse4Color.rgb, 1.0 - mixColor.a);
  89. #ifdef MIXMAP2
  90. mixColor = texture2D(mixMap2Sampler, vTextureUV);
  91. mixColor.rgb *= vTextureInfos.y;
  92. vec4 diffuse5Color = texture2D(diffuse5Sampler, vTextureUV * diffuse5Infos);
  93. vec4 diffuse6Color = texture2D(diffuse6Sampler, vTextureUV * diffuse6Infos);
  94. vec4 diffuse7Color = texture2D(diffuse7Sampler, vTextureUV * diffuse7Infos);
  95. vec4 diffuse8Color = texture2D(diffuse8Sampler, vTextureUV * diffuse8Infos);
  96. diffuse5Color.rgb = mix(finalMixColor.rgb, diffuse5Color.rgb, mixColor.r);
  97. diffuse6Color.rgb = mix(diffuse5Color.rgb, diffuse6Color.rgb, mixColor.g);
  98. diffuse7Color.rgb = mix(diffuse6Color.rgb, diffuse7Color.rgb, mixColor.b);
  99. finalMixColor.rgb = mix(diffuse7Color.rgb, diffuse8Color.rgb, 1.0 - mixColor.a);
  100. #endif
  101. #endif
  102. #ifdef VERTEXCOLOR
  103. finalMixColor.rgb *= vColor.rgb;
  104. #endif
  105. // Lighting
  106. vec3 diffuseBase = vec3(0., 0., 0.);
  107. lightingInfo info;
  108. float shadow = 1.;
  109. #ifdef SPECULARTERM
  110. vec3 specularBase = vec3(0., 0., 0.);
  111. #endif
  112. #include<lightFragment>[0..maxSimultaneousLights]
  113. #ifdef VERTEXALPHA
  114. alpha *= vColor.a;
  115. #endif
  116. #ifdef SPECULARTERM
  117. vec3 finalSpecular = specularBase * specularColor;
  118. #else
  119. vec3 finalSpecular = vec3(0.0);
  120. #endif
  121. vec3 finalDiffuse = clamp(diffuseBase * diffuseColor * finalMixColor.rgb, 0.0, 1.0);
  122. // Composition
  123. vec4 color = vec4(finalDiffuse + finalSpecular, alpha);
  124. #include<fogFragment>
  125. gl_FragColor = color;
  126. }