|
49 | 49 | vec3 lVector = pointLight.position - geometry.position;
|
50 | 50 | directLight.direction = normalize( lVector );
|
51 | 51 |
|
52 |
| - directLight.color = pointLight.color; |
53 |
| - directLight.color *= calcLightAttenuation( length( lVector ), pointLight.distance, pointLight.decay ); |
| 52 | + float lightDistance = length( lVector ); |
| 53 | + |
| 54 | + if ( testLightInRange( lightDistance, pointLight.distance ) ) { |
| 55 | + |
| 56 | + directLight.color = pointLight.color; |
| 57 | + directLight.color *= calcLightAttenuation( lightDistance, pointLight.distance, pointLight.decay ); |
| 58 | + |
| 59 | + } else { |
| 60 | + |
| 61 | + directLight.color = vec3( 0.0 ); |
| 62 | + |
| 63 | + } |
54 | 64 |
|
55 | 65 | return directLight;
|
56 | 66 |
|
|
85 | 95 | vec3 lVector = spotLight.position - geometry.position;
|
86 | 96 | directLight.direction = normalize( lVector );
|
87 | 97 |
|
| 98 | + float lightDistance = length( lVector ); |
88 | 99 | float spotEffect = dot( directLight.direction, spotLight.direction );
|
89 | 100 |
|
90 |
| - if ( spotEffect > spotLight.angleCos ) { |
| 101 | + if ( all( bvec2( spotEffect > spotLight.angleCos, testLightInRange( lightDistance, spotLight.distance ) ) ) ) { |
91 | 102 |
|
92 | 103 | float spotEffect = dot( spotLight.direction, directLight.direction );
|
93 | 104 | spotEffect *= clamp( ( spotEffect - spotLight.angleCos ) / spotLight.penumbra, 0.0, 1.0 );
|
94 | 105 |
|
95 | 106 | directLight.color = spotLight.color;
|
96 |
| - directLight.color *= ( spotEffect * calcLightAttenuation( length( lVector ), spotLight.distance, spotLight.decay ) ); |
| 107 | + directLight.color *= ( spotEffect * calcLightAttenuation( lightDistance, spotLight.distance, spotLight.decay ) ); |
97 | 108 |
|
98 | 109 | } else {
|
99 | 110 |
|
|
0 commit comments