- better BSP tree splitting (experimental, option -altsplit)
- also compare shaders when sorting surfaces (should give slightly more fps)
- misc_model spawnflag 32: set vertex alpha from vertex color (for terrain blending)
git-svn-id: svn://svn.icculus.org/netradiant/trunk@240
61c419a2-8eb2-4b30-bcec-
8cead039b335
Sys_Printf( "Debug portal surfaces enabled\n" );
debugPortals = qtrue;
}
Sys_Printf( "Debug portal surfaces enabled\n" );
debugPortals = qtrue;
}
+ else if( !strcmp( argv[ i ], "-altsplit" ) )
+ {
+ Sys_Printf( "Alternate BSP splitting (by 27) enabled\n" );
+ bspAlternateSplitWeights = qtrue;
+ }
else if( !strcmp( argv[ i ], "-bsp" ) )
Sys_Printf( "-bsp argument unnecessary\n" );
else
else if( !strcmp( argv[ i ], "-bsp" ) )
Sys_Printf( "-bsp argument unnecessary\n" );
else
vec3_t normal;
float dist;
int planenum;
vec3_t normal;
float dist;
int planenum;
+ float sizeBias;
+
+ //int frontC,backC,splitsC,facingC;
+
/* ydnar: set some defaults */
*splitPlaneNum = -1; /* leaf */
/* ydnar: set some defaults */
*splitPlaneNum = -1; /* leaf */
bestValue = -99999;
bestSplit = list;
bestValue = -99999;
bestSplit = list;
for( split = list; split; split = split->next )
split->checked = qfalse;
for( split = list; split; split = split->next )
split->checked = qfalse;
- value = 5*facing - 5*splits; // - abs(front-back);
- if ( plane->type < 3 ) {
- value+=5; // axial is better
+
+ if(bspAlternateSplitWeights)
+ {
+ // from 27
+
+ //Bigger is better
+ sizeBias=WindingArea(split->w);
+
+ //Base score = 20000 perfectly balanced
+ value = 20000-(abs(front-back));
+ value -= plane->counter;// If we've already used this plane sometime in the past try not to use it again
+ value -= facing ; // if we're going to have alot of other surfs use this plane, we want to get it in quickly.
+ value -= splits*5; //more splits = bad
+ value += sizeBias*10; //We want a huge score bias based on plane size
- value += split->priority; // prioritize hints higher
+ else
+ {
+ value = 5*facing - 5*splits; // - abs(front-back);
+ if ( plane->type < 3 ) {
+ value+=5; // axial is better
+ }
+ }
+
+ value += split->priority; // prioritize hints higher
if ( value > bestValue ) {
bestValue = value;
bestSplit = split;
if ( value > bestValue ) {
bestValue = value;
bestSplit = split;
+ //frontC=front;
+ //backC=back;
+ //splitsC=splits;
+ //facingC=facing;
if( bestValue == -99999 )
return;
if( bestValue == -99999 )
return;
+ //Sys_FPrintf (SYS_VRB, "F: %d B:%d S:%d FA:%ds\n",frontC,backC,splitsC,facingC );
+
/* set best split data */
*splitPlaneNum = bestSplit->planenum;
*compileFlags = bestSplit->compileFlags;
/* set best split data */
*splitPlaneNum = bestSplit->planenum;
*compileFlags = bestSplit->compileFlags;
+
+ if (*splitPlaneNum>-1) mapplanes[ *splitPlaneNum ].counter++;
}
Sys_FPrintf( SYS_VRB, "%9d faces\n", count );
}
Sys_FPrintf( SYS_VRB, "%9d faces\n", count );
+ for( i = 0; i < nummapplanes; i++)
+ {
+ mapplanes[ i ].counter=0;
+ }
+
tree->headnode = AllocNode();
VectorCopy( tree->mins, tree->headnode->mins );
VectorCopy( tree->maxs, tree->headnode->maxs );
tree->headnode = AllocNode();
VectorCopy( tree->mins, tree->headnode->mins );
VectorCopy( tree->maxs, tree->headnode->maxs );
intensity = intensity * pointScale;
light->photons = intensity;
intensity = intensity * pointScale;
light->photons = intensity;
light->type = EMIT_POINT;
/* set falloff threshold */
light->type = EMIT_POINT;
/* set falloff threshold */
return 1;
else if( aInfo->hasLightmap > bInfo->hasLightmap )
return -1;
return 1;
else if( aInfo->hasLightmap > bInfo->hasLightmap )
return -1;
+
+ /* 27: then shader! */
+ if (aInfo->si < bInfo->si)
+ return 1;
+ else if (aInfo->si > bInfo->si)
+ return -1;
+
/* then lightmap sample size */
if( aInfo->sampleSize < bInfo->sampleSize )
/* then lightmap sample size */
if( aInfo->sampleSize < bInfo->sampleSize )
{
dv->lightmap[ j ][ 0 ] = 0.0f;
dv->lightmap[ j ][ 1 ] = 0.0f;
{
dv->lightmap[ j ][ 0 ] = 0.0f;
dv->lightmap[ j ][ 1 ] = 0.0f;
- dv->color[ j ][ 0 ] = color[ 0 ];
- dv->color[ j ][ 1 ] = color[ 1 ];
- dv->color[ j ][ 2 ] = color[ 2 ];
- dv->color[ j ][ 3 ] = color[ 3 ];
+ if(spawnFlags & 32) // spawnflag 32: model color -> alpha hack
+ {
+ dv->color[ j ][ 0 ] = 255.0f;
+ dv->color[ j ][ 1 ] = 255.0f;
+ dv->color[ j ][ 2 ] = 255.0f;
+ dv->color[ j ][ 3 ] = color[ 0 ] * 0.3f + color[ 1 ] * 0.59f + color[ 2 ] * 0.11f;
+ }
+ else
+ {
+ dv->color[ j ][ 0 ] = color[ 0 ];
+ dv->color[ j ][ 1 ] = color[ 1 ];
+ dv->color[ j ][ 2 ] = color[ 2 ];
+ dv->color[ j ][ 3 ] = color[ 3 ];
+ }
vec3_t normal;
vec_t dist;
int type;
vec3_t normal;
vec_t dist;
int type;
int hash_chain;
}
plane_t;
int hash_chain;
}
plane_t;
Q_EXTERN qboolean noHint Q_ASSIGN( qfalse ); /* ydnar */
Q_EXTERN qboolean renameModelShaders Q_ASSIGN( qfalse ); /* ydnar */
Q_EXTERN qboolean skyFixHack Q_ASSIGN( qfalse ); /* ydnar */
Q_EXTERN qboolean noHint Q_ASSIGN( qfalse ); /* ydnar */
Q_EXTERN qboolean renameModelShaders Q_ASSIGN( qfalse ); /* ydnar */
Q_EXTERN qboolean skyFixHack Q_ASSIGN( qfalse ); /* ydnar */
+Q_EXTERN qboolean bspAlternateSplitWeights Q_ASSIGN( qfalse ); /* 27 */
Q_EXTERN int patchSubdivisions Q_ASSIGN( 8 ); /* ydnar: -patchmeta subdivisions */
Q_EXTERN int patchSubdivisions Q_ASSIGN( 8 ); /* ydnar: -patchmeta subdivisions */