lightFragment.fx 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #ifdef LIGHT{X}
  2. #if defined(SHADOWONLY) || (defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X}) && defined(LIGHTMAPNOSPECULAR{X}))
  3. //No light calculation
  4. #else
  5. #ifdef PBR
  6. #ifdef SPOTLIGHT{X}
  7. info = computeSpotLighting(viewDirectionW, normalW, light{X}.vLightData, light{X}.vLightDirection, light{X}.vLightDiffuse.rgb, light{X}.vLightSpecular, light{X}.vLightDiffuse.a, roughness, NdotV, specularEnvironmentR0, specularEnvironmentR90, geometricRoughnessFactor, NdotL);
  8. #endif
  9. #ifdef HEMILIGHT{X}
  10. info = computeHemisphericLighting(viewDirectionW, normalW, light{X}.vLightData, light{X}.vLightDiffuse.rgb, light{X}.vLightSpecular, light{X}.vLightGround, roughness, NdotV, specularEnvironmentR0, specularEnvironmentR90, geometricRoughnessFactor, NdotL);
  11. #endif
  12. #if defined(POINTLIGHT{X}) || defined(DIRLIGHT{X})
  13. info = computeLighting(viewDirectionW, normalW, light{X}.vLightData, light{X}.vLightDiffuse.rgb, light{X}.vLightSpecular, light{X}.vLightDiffuse.a, roughness, NdotV, specularEnvironmentR0, specularEnvironmentR90, geometricRoughnessFactor, NdotL);
  14. #endif
  15. #else
  16. #ifdef SPOTLIGHT{X}
  17. info = computeSpotLighting(viewDirectionW, normalW, light{X}.vLightData, light{X}.vLightDirection, light{X}.vLightDiffuse.rgb, light{X}.vLightSpecular, light{X}.vLightDiffuse.a, glossiness);
  18. #endif
  19. #ifdef HEMILIGHT{X}
  20. info = computeHemisphericLighting(viewDirectionW, normalW, light{X}.vLightData, light{X}.vLightDiffuse.rgb, light{X}.vLightSpecular, light{X}.vLightGround, glossiness);
  21. #endif
  22. #if defined(POINTLIGHT{X}) || defined(DIRLIGHT{X})
  23. info = computeLighting(viewDirectionW, normalW, light{X}.vLightData, light{X}.vLightDiffuse.rgb, light{X}.vLightSpecular, light{X}.vLightDiffuse.a, glossiness);
  24. #endif
  25. #endif
  26. #ifdef PROJECTEDLIGHTTEXTURE{X}
  27. info.diffuse *= computeProjectionTextureDiffuseLighting(projectionLightSampler{X}, textureProjectionMatrix{X});
  28. #endif
  29. #endif
  30. #ifdef SHADOW{X}
  31. #ifdef SHADOWCLOSEESM{X}
  32. #if defined(SHADOWCUBE{X})
  33. shadow = computeShadowWithCloseESMCube(light{X}.vLightData.xyz, shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.z, light{X}.depthValues);
  34. #else
  35. shadow = computeShadowWithCloseESM(vPositionFromLight{X}, vDepthMetric{X}, shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.z, light{X}.shadowsInfo.w);
  36. #endif
  37. #elif defined(SHADOWESM{X})
  38. #if defined(SHADOWCUBE{X})
  39. shadow = computeShadowWithESMCube(light{X}.vLightData.xyz, shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.z, light{X}.depthValues);
  40. #else
  41. shadow = computeShadowWithESM(vPositionFromLight{X}, vDepthMetric{X}, shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.z, light{X}.shadowsInfo.w);
  42. #endif
  43. #elif defined(SHADOWPOISSON{X})
  44. #if defined(SHADOWCUBE{X})
  45. shadow = computeShadowWithPoissonSamplingCube(light{X}.vLightData.xyz, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.x, light{X}.depthValues);
  46. #else
  47. shadow = computeShadowWithPoissonSampling(vPositionFromLight{X}, vDepthMetric{X}, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
  48. #endif
  49. #elif defined(SHADOWPCF{X})
  50. #if defined(SHADOWLOWQUALITY{X})
  51. shadow = computeShadowWithPCF1(vPositionFromLight{X}, vDepthMetric{X}, shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
  52. #elif defined(SHADOWMEDIUMQUALITY{X})
  53. shadow = computeShadowWithPCF3(vPositionFromLight{X}, vDepthMetric{X}, shadowSampler{X}, light{X}.shadowsInfo.yz, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
  54. #else
  55. shadow = computeShadowWithPCF5(vPositionFromLight{X}, vDepthMetric{X}, shadowSampler{X}, light{X}.shadowsInfo.yz, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
  56. #endif
  57. #elif defined(SHADOWPCSS{X})
  58. #if defined(SHADOWLOWQUALITY{X})
  59. shadow = computeShadowWithPCSS16(vPositionFromLight{X}, vDepthMetric{X}, depthSampler{X}, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.z, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
  60. #elif defined(SHADOWMEDIUMQUALITY{X})
  61. shadow = computeShadowWithPCSS32(vPositionFromLight{X}, vDepthMetric{X}, depthSampler{X}, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.z, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
  62. #else
  63. shadow = computeShadowWithPCSS64(vPositionFromLight{X}, vDepthMetric{X}, depthSampler{X}, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.z, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
  64. #endif
  65. #else
  66. #if defined(SHADOWCUBE{X})
  67. shadow = computeShadowCube(light{X}.vLightData.xyz, shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.depthValues);
  68. #else
  69. shadow = computeShadow(vPositionFromLight{X}, vDepthMetric{X}, shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
  70. #endif
  71. #endif
  72. #ifdef SHADOWONLY
  73. #ifndef SHADOWINUSE
  74. #define SHADOWINUSE
  75. #endif
  76. globalShadow += shadow;
  77. shadowLightCount += 1.0;
  78. #endif
  79. #else
  80. shadow = 1.;
  81. #endif
  82. #ifndef SHADOWONLY
  83. #ifdef CUSTOMUSERLIGHTING
  84. diffuseBase += computeCustomDiffuseLighting(info, diffuseBase, shadow);
  85. #ifdef SPECULARTERM
  86. specularBase += computeCustomSpecularLighting(info, specularBase, shadow);
  87. #endif
  88. #elif defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X})
  89. diffuseBase += lightmapColor * shadow;
  90. #ifdef SPECULARTERM
  91. #ifndef LIGHTMAPNOSPECULAR{X}
  92. specularBase += info.specular * shadow * lightmapColor;
  93. #endif
  94. #endif
  95. #else
  96. diffuseBase += info.diffuse * shadow;
  97. #ifdef SPECULARTERM
  98. specularBase += info.specular * shadow;
  99. #endif
  100. #endif
  101. #endif
  102. #endif