shadowmap_vertex.glsl.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. export default /* glsl */`
  2. #if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )
  3. // Offsetting the position used for querying occlusion along the world normal can be used to reduce shadow acne.
  4. vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );
  5. vec4 shadowWorldPosition;
  6. #endif
  7. #if defined( USE_SHADOWMAP )
  8. #if NUM_DIR_LIGHT_SHADOWS > 0
  9. #pragma unroll_loop_start
  10. for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {
  11. shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );
  12. vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;
  13. }
  14. #pragma unroll_loop_end
  15. #endif
  16. #if NUM_POINT_LIGHT_SHADOWS > 0
  17. #pragma unroll_loop_start
  18. for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {
  19. shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );
  20. vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;
  21. }
  22. #pragma unroll_loop_end
  23. #endif
  24. /*
  25. #if NUM_RECT_AREA_LIGHTS > 0
  26. // TODO (abelnation): update vAreaShadowCoord with area light info
  27. #endif
  28. */
  29. #endif
  30. // spot lights can be evaluated without active shadow mapping (when SpotLight.map is used)
  31. #if NUM_SPOT_LIGHT_COORDS > 0
  32. #pragma unroll_loop_start
  33. for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {
  34. shadowWorldPosition = worldPosition;
  35. #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
  36. shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;
  37. #endif
  38. vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;
  39. }
  40. #pragma unroll_loop_end
  41. #endif
  42. `;