Advertisement
Guest User

test.fragment.glsl

a guest
Jul 11th, 2015
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.81 KB | None | 0 0
  1. #define positionFlag
  2. #define normalFlag
  3. #define lightingFlag
  4. #define ambientCubemapFlag
  5. #define numDirectionalLights 2
  6. #define numPointLights 5
  7. #define environmentCubemapFlag
  8. #define texCoord0Flag
  9. #define diffuseTextureFlag
  10. #define diffuseTextureCoord texCoord0
  11. #define diffuseColorFlag
  12. #define specularColorFlag
  13. #define emissiveColorFlag
  14. #define shininessFlag
  15. #ifdef GL_ES
  16. #define LOWP lowp
  17. #define MED mediump
  18. #define HIGH highp
  19. precision mediump float;
  20. #else
  21. #define MED
  22. #define LOWP
  23. #define HIGH
  24. #endif
  25.  
  26. ////////////////////////////////////////////////////////////////////////////////////
  27. ////////// POSITION ATTRIBUTE - FRAGMENT
  28. ////////////////////////////////////////////////////////////////////////////////////
  29. #define nop() {}
  30.  
  31. varying vec4 v_position;
  32. vec4 g_position = vec4(0.0, 0.0, 0.0, 1.0);
  33. #define pullPosition() (g_position = v_position)
  34.  
  35. ////////////////////////////////////////////////////////////////////////////////////
  36. ////////// COLOR ATTRIBUTE - FRAGMENT
  37. ///////////////////////////////////////////////////////////////////////////////////
  38. varying vec4 v_color;
  39. vec4 g_color = vec4(1.0, 1.0, 1.0, 1.0);
  40. #define pullColor() (g_color = v_color)
  41.  
  42. ////////////////////////////////////////////////////////////////////////////////////
  43. ////////// NORMAL ATTRIBUTE - FRAGMENT
  44. ///////////////////////////////////////////////////////////////////////////////////
  45. varying vec3 v_normal;
  46. vec3 g_normal = vec3(0.0, 0.0, 1.0);
  47. #define pullNormal() (g_normal = v_normal)
  48.  
  49. ////////////////////////////////////////////////////////////////////////////////////
  50. ////////// BINORMAL ATTRIBUTE - FRAGMENT
  51. ///////////////////////////////////////////////////////////////////////////////////
  52. varying vec3 v_binormal;
  53. vec3 g_binormal = vec3(0.0, 0.0, 1.0);
  54. #define pullBinormal() (g_binormal = v_binormal)
  55.  
  56. ////////////////////////////////////////////////////////////////////////////////////
  57. ////////// TANGENT ATTRIBUTE - FRAGMENT
  58. ///////////////////////////////////////////////////////////////////////////////////
  59. varying vec3 v_tangent;
  60. vec3 g_tangent = vec3(1.0, 0.0, 0.0);
  61. #define pullTangent() (g_tangent = v_tangent)
  62.  
  63. ////////////////////////////////////////////////////////////////////////////////////
  64. ////////// TEXCOORD0 ATTRIBUTE - FRAGMENT
  65. ///////////////////////////////////////////////////////////////////////////////////
  66. varying vec2 v_texCoord0;
  67. vec2 g_texCoord0 = vec2(0.0, 0.0);
  68. #define pullTexCoord0() (g_texCoord0 = v_texCoord0)
  69.  
  70.  
  71. // Uniforms which are always available
  72. uniform mat4 u_projViewTrans;
  73.  
  74. uniform mat4 u_worldTrans;
  75.  
  76. uniform vec4 u_cameraPosition;
  77.  
  78. uniform mat3 u_normalMatrix;
  79.  
  80. // Other uniforms
  81. #ifdef blendedFlag
  82. uniform float u_opacity;
  83. #else
  84. const float u_opacity = 1.0;
  85. #endif
  86.  
  87. #ifdef alphaTestFlag
  88. uniform float u_alphaTest;
  89. #else
  90. const float u_alphaTest = 0.0;
  91. #endif
  92.  
  93. #ifdef shininessFlag
  94. uniform float u_shininess;
  95. #else
  96. const float u_shininess = 20.0;
  97. #endif
  98.  
  99.  
  100. #ifdef diffuseColorFlag
  101. uniform vec4 u_diffuseColor;
  102. #endif
  103.  
  104. #ifdef diffuseTextureFlag
  105. uniform sampler2D u_diffuseTexture;
  106. #endif
  107.  
  108. #ifdef specularColorFlag
  109. uniform vec4 u_specularColor;
  110. #endif
  111.  
  112. #ifdef specularTextureFlag
  113. uniform sampler2D u_specularTexture;
  114. #endif
  115.  
  116. #ifdef normalTextureFlag
  117. uniform sampler2D u_normalTexture;
  118. #endif
  119.  
  120. #if defined(diffuseTextureFlag) || defined(specularTextureFlag)
  121. #define textureFlag
  122. #endif
  123.  
  124. #if defined(specularTextureFlag) || defined(specularColorFlag)
  125. #define specularFlag
  126. #endif
  127.  
  128. #if defined(specularFlag) || defined(fogFlag)
  129. #define cameraPositionFlag
  130. #endif
  131.  
  132. #ifdef shadowMapFlag
  133. uniform sampler2D u_shadowTexture;
  134. uniform float u_shadowPCFOffset;
  135. varying vec3 v_shadowMapUv;
  136. #define separateAmbientFlag
  137.  
  138. float getShadowness(vec2 offset)
  139. {
  140. const vec4 bitShifts = vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 160581375.0);
  141. return step(v_shadowMapUv.z, dot(texture2D(u_shadowTexture, v_shadowMapUv.xy + offset), bitShifts));//+(1.0/255.0));
  142. }
  143.  
  144. float getShadow()
  145. {
  146. return (//getShadowness(vec2(0,0)) +
  147. getShadowness(vec2(u_shadowPCFOffset, u_shadowPCFOffset)) +
  148. getShadowness(vec2(-u_shadowPCFOffset, u_shadowPCFOffset)) +
  149. getShadowness(vec2(u_shadowPCFOffset, -u_shadowPCFOffset)) +
  150. getShadowness(vec2(-u_shadowPCFOffset, -u_shadowPCFOffset))) * 0.25;
  151. }
  152. #endif //shadowMapFlag
  153.  
  154. #if defined(diffuseTextureFlag) && defined(diffuseColorFlag)
  155. #define fetchColorDiffuseTD(texCoord, defaultValue) texture2D(u_diffuseTexture, texCoord) * u_diffuseColor
  156. #elif defined(diffuseTextureFlag)
  157. #define fetchColorDiffuseTD(texCoord, defaultValue) texture2D(u_diffuseTexture, texCoord)
  158. #elif defined(diffuseColorFlag)
  159. #define fetchColorDiffuseTD(texCoord, defaultValue) u_diffuseColor
  160. #else
  161. #define fetchColorDiffuseTD(texCoord, defaultValue) (defaultValue)
  162. #endif
  163.  
  164.  
  165. #define fetchColorDiffuseD(defaultValue) fetchColorDiffuseTD(g_texCoord0, defaultValue)
  166. #define fetchColorDiffuse() fetchColorDiffuseD(vec4(1.0))
  167.  
  168. #if defined(diffuseTextureFlag) || defined(diffuseColorFlag)
  169. #define applyColorDiffuse(baseColor) ((baseColor) * fetchColorDiffuse())
  170. #else
  171. #define applyColorDiffuse(baseColor) (baseColor)
  172. #endif
  173.  
  174.  
  175. #if defined(specularTextureFlag) && defined(specularColorFlag)
  176. #define fetchColorSpecularTD(texCoord, defaultValue) (texture2D(u_specularTexture, texCoord).rgb * u_specularColor.rgb)
  177. #elif defined(specularTextureFlag)
  178. #define fetchColorSpecularTD(texCoord, defaultValue) texture2D(u_specularTexture, texCoord).rgb
  179. #elif defined(specularColorFlag)
  180. #define fetchColorSpecularTD(texCoord, defaultValue) u_specularColor.rgb
  181. #else
  182. #define fetchColorSpecularTD(texCoord, defaultValue) (defaultValue)
  183. #endif
  184.  
  185.  
  186. #define fetchColorSpecularD(defaultValue) fetchColorSpecularTD(g_texCoord0, defaultValue)
  187. #define fetchColorSpecular() fetchColorSpecularD(vec3(0.0))
  188.  
  189. #if defined(specularTextureFlag) || defined(specularColorFlag)
  190. #define applyColorSpecular(intensity) ((intensity) * fetchColorSpecular())
  191. #define addColorSpecular(baseColor, intensity)  ((baseColor) + applyColorSpecular(intensity))
  192. #else
  193. #define applyColorSpecular(intensity) (vec3(0.0))
  194. #define addColorSpecular(baseColor, intensity)  (baseColor)
  195. #endif
  196.  
  197. varying vec3 v_lightDir;
  198. varying vec3 v_lightCol;
  199. varying vec3 v_viewDir;
  200. #ifdef environmentCubemapFlag
  201. varying vec3 v_reflect;
  202. #endif
  203.  
  204. #ifdef environmentCubemapFlag
  205. uniform samplerCube u_environmentCubemap;
  206. #endif
  207.  
  208. #ifdef reflectionColorFlag
  209. uniform vec4 u_reflectionColor;
  210. #endif
  211.  
  212. varying vec3 v_ambientLight;
  213.  
  214. #define saturate(x) clamp( x, 0.0, 1.0 )
  215.  
  216. void main() {
  217. pullColor();
  218. pullTexCoord0();
  219.  
  220. vec4 diffuse = applyColorDiffuse(g_color);
  221. vec3 specular = fetchColorSpecular();
  222.  
  223. #ifdef normalTextureFlag
  224. vec4 N = vec4(normalize(texture2D(u_normalTexture, g_texCoord0).xyz * 2.0 - 1.0), 1.0);
  225. #ifdef environmentCubemapFlag
  226. vec3 reflectDir = normalize(v_reflect + (vec3(0.0, 0.0, 1.0) - N.xyz));
  227. #endif
  228. #else
  229. vec4 N = vec4(0.0, 0.0, 1.0, 1.0);
  230. #ifdef environmentCubemapFlag
  231. vec3 reflectDir = normalize(v_reflect);
  232. #endif
  233. #endif
  234.  
  235. vec3 L = normalize(v_lightDir);
  236. vec3 V = normalize(v_viewDir);
  237. vec3 H = normalize(L + V);
  238. float NL = dot(N.xyz, L);
  239. float NH = max(0.0, dot(N.xyz, H));
  240.  
  241. float specOpacity = 1.0; //(1.0 - diffuse.w);
  242. float spec = min(1.0, pow(NH, 10.0) * specOpacity);
  243. float selfShadow = saturate(4.0 * NL);
  244.  
  245. #ifdef environmentCubemapFlag
  246. vec3 environment = textureCube(u_environmentCubemap, reflectDir).rgb;
  247. specular *= environment;
  248. #ifdef reflectionColorFlag
  249. diffuse.rgb = saturate(vec3(1.0) - u_reflectionColor.rgb) * diffuse.rgb + environment * u_reflectionColor.rgb;
  250. #endif
  251. #endif
  252.  
  253. #ifdef shadowMapFlag
  254. gl_FragColor = vec4(saturate((v_lightCol * diffuse.rgb) * NL * getShadow()), diffuse.w);
  255. #else
  256. gl_FragColor = vec4(saturate((v_lightCol * diffuse.rgb) * NL), diffuse.w);
  257. #endif
  258. gl_FragColor.rgb += v_ambientLight * diffuse.rgb;
  259. gl_FragColor.rgb += (selfShadow * spec) * specular;
  260. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement