lightFragment.fx 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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, 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, 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, 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 = computeProjectionTexture(info,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. #else
  38. #ifdef SHADOWESM{X}
  39. #if defined(SHADOWCUBE{X})
  40. shadow = computeShadowWithESMCube(light{X}.vLightData.xyz, shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.z, light{X}.depthValues);
  41. #else
  42. shadow = computeShadowWithESM(vPositionFromLight{X}, vDepthMetric{X}, shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.z, light{X}.shadowsInfo.w);
  43. #endif
  44. #else
  45. #ifdef SHADOWPCF{X}
  46. #if defined(SHADOWCUBE{X})
  47. shadow = computeShadowWithPCFCube(light{X}.vLightData.xyz, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.x, light{X}.depthValues);
  48. #else
  49. shadow = computeShadowWithPCF(vPositionFromLight{X}, vDepthMetric{X}, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
  50. #endif
  51. #else
  52. #if defined(SHADOWCUBE{X})
  53. shadow = computeShadowCube(light{X}.vLightData.xyz, shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.depthValues);
  54. #else
  55. shadow = computeShadow(vPositionFromLight{X}, vDepthMetric{X}, shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
  56. #endif
  57. #endif
  58. #endif
  59. #endif
  60. #ifdef SHADOWONLY
  61. #ifndef SHADOWINUSE
  62. #define SHADOWINUSE
  63. #endif
  64. globalShadow += shadow;
  65. shadowLightCount += 1.0;
  66. #endif
  67. #else
  68. shadow = 1.;
  69. #endif
  70. #ifndef SHADOWONLY
  71. #ifdef CUSTOMUSERLIGHTING
  72. diffuseBase += computeCustomDiffuseLighting(info, diffuseBase, shadow);
  73. #ifdef SPECULARTERM
  74. specularBase += computeCustomSpecularLighting(info, specularBase, shadow);
  75. #endif
  76. #elif defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X})
  77. diffuseBase += lightmapColor * shadow;
  78. #ifdef SPECULARTERM
  79. #ifndef LIGHTMAPNOSPECULAR{X}
  80. specularBase += info.specular * shadow * lightmapColor;
  81. #endif
  82. #endif
  83. #else
  84. diffuseBase += info.diffuse * shadow;
  85. #ifdef SPECULARTERM
  86. specularBase += info.specular * shadow;
  87. #endif
  88. #endif
  89. #endif
  90. #endif