]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - tools/quake3/q3map2/light.c
add also a -nosRGB option to turn sRGB off
[xonotic/netradiant.git] / tools / quake3 / q3map2 / light.c
index c072be0c62e88a347580fa1e2bbaa99a21f14450..b6dcb1224e1c14589c00f554da66e84353d1f840 100644 (file)
@@ -148,7 +148,6 @@ static void CreateSkyLights( vec3_t color, float value, int iterations, float fi
        int                     angleSteps, elevationSteps;
        float           angle, elevation;
        float           angleStep, elevationStep;
-       float           step, start;
        sun_t           sun;
        
        
@@ -156,10 +155,6 @@ static void CreateSkyLights( vec3_t color, float value, int iterations, float fi
        if( value <= 0.0f || iterations < 2 )
                return;
        
-       /* calculate some stuff */
-       step = 2.0f / (iterations - 1);
-       start = -1.0f;
-       
        /* basic sun setup */
        VectorCopy( color, sun.color );
        sun.deviance = 0.0f;
@@ -1116,6 +1111,8 @@ int LightContributionToSample( trace_t *trace )
                /* return to sender */
                return 1;
        }
+       else
+               Error("Light of undefined type!");
 
        /* VorteX: set noShadow color */
        VectorScale(light->color, add, trace->colorNoShadow);
@@ -1830,7 +1827,7 @@ void LightWorld( void )
        vec3_t          color;
        float           f;
        int                     b, bt;
-       qboolean        minVertex, minGrid, ps;
+       qboolean        minVertex, minGrid;
        const char      *value;
        
 
@@ -2048,6 +2045,7 @@ int LightMain( int argc, char **argv )
        char            mapSource[ 1024 ];
        const char      *value;
        int lightmapMergeSize = 0;
+       qboolean        lightSamplesInsist = qfalse;
        
        
        /* note it */
@@ -2067,6 +2065,12 @@ int LightMain( int argc, char **argv )
        lightmapGamma = game->lightmapGamma;
        Sys_Printf( " lightning gamma: %f\n", lightmapGamma );
 
+       lightmapsRGB = game->lightmapsRGB;
+       if(lightmapsRGB)
+               Sys_Printf( " lightmap colorspace: sRGB\n" );
+       else
+               Sys_Printf( " lightmap colorspace: linear\n" );
+
        lightmapCompensate = game->lightmapCompensate;
        Sys_Printf( " lightning compensation: %f\n", lightmapCompensate );
 
@@ -2181,20 +2185,20 @@ int LightMain( int argc, char **argv )
                else if( !strcmp( argv[ i ], "-griddirectionality" ) )
                {
                        f = atof( argv[ i + 1 ] );
-                       if(f < 0) f = 0;
-                       if(f > gridAmbientDirectionality) f = gridAmbientDirectionality;
+                       if(f > 1) f = 1;
+                       if(f < gridAmbientDirectionality) gridAmbientDirectionality = f;
                        Sys_Printf( "Grid directionality is %f\n", f );
-                       gridDirectionality *= f;
+                       gridDirectionality = f;
                        i++;
                }
 
                else if( !strcmp( argv[ i ], "-gridambientdirectionality" ) )
                {
                        f = atof( argv[ i + 1 ] );
-                       if(f > gridDirectionality) f = gridDirectionality;
-                       if(f > 1) f = 1;
+                       if(f < -1) f = -1;
+                       if(f > gridDirectionality) gridDirectionality = f;
                        Sys_Printf( "Grid ambient directionality is %f\n", f );
-                       gridAmbientDirectionality *= f;
+                       gridAmbientDirectionality = f;
                        i++;
                }
                
@@ -2206,6 +2210,18 @@ int LightMain( int argc, char **argv )
                        i++;
                }
                
+               else if( !strcmp( argv[ i ], "-sRGB" ) )
+               {
+                       lightmapsRGB = qtrue;
+                       Sys_Printf( "Lighting is in sRGB\n" );
+               }
+
+               else if( !strcmp( argv[ i ], "-nosRGB" ) )
+               {
+                       lightmapsRGB = qfalse;
+                       Sys_Printf( "Lighting is linear\n" );
+               }
+
                else if( !strcmp( argv[ i ], "-exposure" ) )
                {
                        f = atof( argv[ i + 1 ] );
@@ -2245,8 +2261,18 @@ int LightMain( int argc, char **argv )
                        i++;
                }
                
+               else if( !strcmp( argv[ i ], "-randomsamples" ) )
+               {
+                       lightRandomSamples = qtrue;
+                       Sys_Printf( "Random sampling enabled\n", lightRandomSamples );
+               }
+               
                else if( !strcmp( argv[ i ], "-samples" ) )
                {
+                       if(*argv[i+1] == '+')
+                               lightSamplesInsist = qtrue;
+                       else
+                               lightSamplesInsist = qfalse;
                        lightSamples = atoi( argv[ i + 1 ] );
                        if( lightSamples < 1 )
                                lightSamples = 1;
@@ -2741,6 +2767,11 @@ int LightMain( int argc, char **argv )
                {
                        lightmapExtraVisClusterNudge = qtrue;
                }
+               else if( !strcmp( argv[ i ], "-fill" ) )
+               {
+                       lightmapFill = qtrue;
+                       Sys_Printf( "Filling lightmap colors from surrounding pixels to improve JPEG compression\n" );
+               }
                /* unhandled args */
                else
                {
@@ -2749,6 +2780,38 @@ int LightMain( int argc, char **argv )
 
        }
 
+       /* fix up samples count */
+       if(lightRandomSamples)
+       {
+               if(!lightSamplesInsist)
+               {
+                       /* approximately match -samples in quality */
+                       switch(lightSamples)
+                       {
+                               /* somewhat okay */
+                               case 1:
+                               case 2:
+                                       lightSamples = 16;
+                                       Sys_Printf( "Adaptive supersampling preset enabled with %d random sample(s) per lightmap texel\n", lightSamples );
+                                       break;
+
+                               /* good */
+                               case 3:
+                                       lightSamples = 64;
+                                       Sys_Printf( "Adaptive supersampling preset enabled with %d random sample(s) per lightmap texel\n", lightSamples );
+                                       break;
+
+                               /* perfect */
+                               case 4:
+                                       lightSamples = 256;
+                                       Sys_Printf( "Adaptive supersampling preset enabled with %d random sample(s) per lightmap texel\n", lightSamples );
+                                       break;
+
+                               default: break;
+                       }
+               }
+       }
+
        /* fix up lightmap search power */
        if(lightmapMergeSize)
        {
@@ -2792,7 +2855,7 @@ int LightMain( int argc, char **argv )
        /* load map file */
        value = ValueForKey( &entities[ 0 ], "_keepLights" );
        if( value[ 0 ] != '1' )
-               LoadMapFile( mapSource, qtrue );
+               LoadMapFile( mapSource, qtrue, qfalse );
        
        /* set the entity/model origins and init yDrawVerts */
        SetEntityOrigins();