X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=tools%2Fquake3%2Fq3map2%2Flight.c;h=aaaa224762580ef5772e475bad0fc17198fe1737;hp=cf292a79ecfa088498e244f1e120d2671f021fb8;hb=e6ca10bec7b8d1286ce340f7ab62c7d2bf979a1a;hpb=69e8796d4429040f092b248533cfdd771259f2ad diff --git a/tools/quake3/q3map2/light.c b/tools/quake3/q3map2/light.c index cf292a79..aaaa2247 100644 --- a/tools/quake3/q3map2/light.c +++ b/tools/quake3/q3map2/light.c @@ -749,8 +749,8 @@ int LightContributionToSample( trace_t *trace ) float angle; float add; float dist; - float addDeluxe = 0.0f, addDeluxeBounceScale = 0.25f; - qboolean angledDeluxe = qfalse; + float addDeluxe = 0.0f, addDeluxeBounceScale = 0.25f; + qboolean angledDeluxe = qfalse; float colorBrightness; /* get light */ @@ -759,8 +759,8 @@ int LightContributionToSample( trace_t *trace ) /* clear color */ VectorClear( trace->color ); VectorClear( trace->colorNoShadow ); - VectorClear( trace->directionContribution ); - + VectorClear( trace->directionContribution ); + colorBrightness = RGBTOGRAY( light->color ) * ( 1.0f/255.0f ); /* ydnar: early out */ @@ -838,12 +838,12 @@ int LightContributionToSample( trace_t *trace ) add = light->photons / (dist * dist) * angle; - if( deluxemap ) - { - if( angledDeluxe ) - addDeluxe = light->photons / (dist * dist) * angle; - else - addDeluxe = light->photons / (dist * dist); + if( deluxemap ) + { + if( angledDeluxe ) + addDeluxe = light->photons / (dist * dist) * angle; + else + addDeluxe = light->photons / (dist * dist); } } else @@ -872,7 +872,7 @@ int LightContributionToSample( trace_t *trace ) /* ydnar: moved to here */ add = factor * light->add; - if( deluxemap ) + if( deluxemap ) addDeluxe = add; } } @@ -933,32 +933,32 @@ int LightContributionToSample( trace_t *trace ) if( add < 0.0f ) add = 0.0f; - if( deluxemap ) - { - if( angledDeluxe ) - addDeluxe = angle * light->photons * linearScale - (dist * light->fade); - else - addDeluxe = light->photons * linearScale - (dist * light->fade); - - if( addDeluxe < 0.0f ) - addDeluxe = 0.0f; + if( deluxemap ) + { + if( angledDeluxe ) + addDeluxe = angle * light->photons * linearScale - (dist * light->fade); + else + addDeluxe = light->photons * linearScale - (dist * light->fade); + + if( addDeluxe < 0.0f ) + addDeluxe = 0.0f; } } else { add = (light->photons / (dist * dist)) * angle; - if( add < 0.0f ) - add = 0.0f; - - if( deluxemap ) - { - if( angledDeluxe ) - addDeluxe = (light->photons / (dist * dist)) * angle; - else - addDeluxe = (light->photons / (dist * dist)); - } - - if( addDeluxe < 0.0f ) + if( add < 0.0f ) + add = 0.0f; + + if( deluxemap ) + { + if( angledDeluxe ) + addDeluxe = (light->photons / (dist * dist)) * angle; + else + addDeluxe = (light->photons / (dist * dist)); + } + + if( addDeluxe < 0.0f ) addDeluxe = 0.0f; } @@ -985,12 +985,12 @@ int LightContributionToSample( trace_t *trace ) if( sampleRadius > (radiusAtDist - 32.0f) ) { add *= ((radiusAtDist - sampleRadius) / 32.0f); - if( add < 0.0f ) - add = 0.0f; - - addDeluxe *= ((radiusAtDist - sampleRadius) / 32.0f); - - if( addDeluxe < 0.0f ) + if( add < 0.0f ) + add = 0.0f; + + addDeluxe *= ((radiusAtDist - sampleRadius) / 32.0f); + + if( addDeluxe < 0.0f ) addDeluxe = 0.0f; } } @@ -1034,15 +1034,15 @@ int LightContributionToSample( trace_t *trace ) /* attenuate */ add = light->photons * angle; - if( deluxemap ) - { - if( angledDeluxe ) - addDeluxe = light->photons * angle; - else - addDeluxe = light->photons; - - if( addDeluxe < 0.0f ) - addDeluxe = 0.0f; + if( deluxemap ) + { + if( angledDeluxe ) + addDeluxe = light->photons * angle; + else + addDeluxe = light->photons; + + if( addDeluxe < 0.0f ) + addDeluxe = 0.0f; } if( add <= 0.0f ) @@ -1051,15 +1051,15 @@ int LightContributionToSample( trace_t *trace ) /* VorteX: set noShadow color */ VectorScale(light->color, add, trace->colorNoShadow); - addDeluxe *= colorBrightness; - - if( bouncing ) - { - addDeluxe *= addDeluxeBounceScale; - if( addDeluxe < 0.00390625f ) - addDeluxe = 0.00390625f; - } - + addDeluxe *= colorBrightness; + + if( bouncing ) + { + addDeluxe *= addDeluxeBounceScale; + if( addDeluxe < 0.00390625f ) + addDeluxe = 0.00390625f; + } + VectorScale( trace->direction, addDeluxe, trace->directionContribution ); /* setup trace */ @@ -1091,27 +1091,27 @@ int LightContributionToSample( trace_t *trace ) if( add <= 0.0f || (add <= light->falloffTolerance && (light->flags & LIGHT_FAST_ACTUAL)) ) return 0; - addDeluxe *= colorBrightness; - - /* hack land: scale down the radiosity contribution to light directionality. - Deluxemaps fusion many light directions into one. In a rtl process all lights - would contribute individually to the bump map, so several light sources together - would make it more directional (example: a yellow and red lights received from - opposing sides would light one side in red and the other in blue, adding - the effect of 2 directions applied. In the deluxemapping case, this 2 lights would - neutralize each other making it look like having no direction. - Same thing happens with radiosity. In deluxemapping case the radiosity contribution - is modifying the direction applied from directional lights, making it go closer and closer - to the surface normal the bigger is the amount of radiosity received. - So, for preserving the directional lights contributions, we scale down the radiosity - contribution. It's a hack, but there's a reason behind it */ - if( bouncing ) - { - addDeluxe *= addDeluxeBounceScale; - if( addDeluxe < 0.00390625f ) - addDeluxe = 0.00390625f; - } - + addDeluxe *= colorBrightness; + + /* hack land: scale down the radiosity contribution to light directionality. + Deluxemaps fusion many light directions into one. In a rtl process all lights + would contribute individually to the bump map, so several light sources together + would make it more directional (example: a yellow and red lights received from + opposing sides would light one side in red and the other in blue, adding + the effect of 2 directions applied. In the deluxemapping case, this 2 lights would + neutralize each other making it look like having no direction. + Same thing happens with radiosity. In deluxemapping case the radiosity contribution + is modifying the direction applied from directional lights, making it go closer and closer + to the surface normal the bigger is the amount of radiosity received. + So, for preserving the directional lights contributions, we scale down the radiosity + contribution. It's a hack, but there's a reason behind it */ + if( bouncing ) + { + addDeluxe *= addDeluxeBounceScale; + if( addDeluxe < 0.00390625f ) + addDeluxe = 0.00390625f; + } + VectorScale( trace->direction, addDeluxe, trace->directionContribution ); /* setup trace */ @@ -1123,7 +1123,7 @@ int LightContributionToSample( trace_t *trace ) if( trace->passSolid || trace->opaque ) { VectorClear( trace->color ); - VectorClear( trace->directionContribution ); + VectorClear( trace->directionContribution ); return -1; }