some stuff by 27:
- 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
This commit is contained in:
parent
2f675b648f
commit
889347e958
|
|
@ -888,6 +888,11 @@ int BSPMain( int argc, char **argv )
|
||||||
Sys_Printf( "Debug portal surfaces enabled\n" );
|
Sys_Printf( "Debug portal surfaces enabled\n" );
|
||||||
debugPortals = qtrue;
|
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" ) )
|
else if( !strcmp( argv[ i ], "-bsp" ) )
|
||||||
Sys_Printf( "-bsp argument unnecessary\n" );
|
Sys_Printf( "-bsp argument unnecessary\n" );
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,9 @@ static void SelectSplitPlaneNum( node_t *node, face_t *list, int *splitPlaneNum,
|
||||||
vec3_t normal;
|
vec3_t normal;
|
||||||
float dist;
|
float dist;
|
||||||
int planenum;
|
int planenum;
|
||||||
|
float sizeBias;
|
||||||
|
|
||||||
|
//int frontC,backC,splitsC,facingC;
|
||||||
|
|
||||||
|
|
||||||
/* ydnar: set some defaults */
|
/* ydnar: set some defaults */
|
||||||
|
|
@ -118,6 +121,7 @@ static void SelectSplitPlaneNum( node_t *node, face_t *list, int *splitPlaneNum,
|
||||||
bestValue = -99999;
|
bestValue = -99999;
|
||||||
bestSplit = list;
|
bestSplit = list;
|
||||||
|
|
||||||
|
|
||||||
for( split = list; split; split = split->next )
|
for( split = list; split; split = split->next )
|
||||||
split->checked = qfalse;
|
split->checked = qfalse;
|
||||||
|
|
||||||
|
|
@ -146,15 +150,38 @@ static void SelectSplitPlaneNum( node_t *node, face_t *list, int *splitPlaneNum,
|
||||||
back++;
|
back++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
value = 5*facing - 5*splits; // - abs(front-back);
|
value = 5*facing - 5*splits; // - abs(front-back);
|
||||||
if ( plane->type < 3 ) {
|
if ( plane->type < 3 ) {
|
||||||
value+=5; // axial is better
|
value+=5; // axial is better
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
value += split->priority; // prioritize hints higher
|
value += split->priority; // prioritize hints higher
|
||||||
|
|
||||||
if ( value > bestValue ) {
|
if ( value > bestValue ) {
|
||||||
bestValue = value;
|
bestValue = value;
|
||||||
bestSplit = split;
|
bestSplit = split;
|
||||||
|
//frontC=front;
|
||||||
|
//backC=back;
|
||||||
|
//splitsC=splits;
|
||||||
|
//facingC=facing;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -162,9 +189,13 @@ static void SelectSplitPlaneNum( node_t *node, face_t *list, int *splitPlaneNum,
|
||||||
if( bestValue == -99999 )
|
if( bestValue == -99999 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
//Sys_FPrintf (SYS_VRB, "F: %d B:%d S:%d FA:%ds\n",frontC,backC,splitsC,facingC );
|
||||||
|
|
||||||
/* set best split data */
|
/* set best split data */
|
||||||
*splitPlaneNum = bestSplit->planenum;
|
*splitPlaneNum = bestSplit->planenum;
|
||||||
*compileFlags = bestSplit->compileFlags;
|
*compileFlags = bestSplit->compileFlags;
|
||||||
|
|
||||||
|
if (*splitPlaneNum>-1) mapplanes[ *splitPlaneNum ].counter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -324,6 +355,11 @@ tree_t *FaceBSP( face_t *list ) {
|
||||||
}
|
}
|
||||||
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();
|
tree->headnode = AllocNode();
|
||||||
VectorCopy( tree->mins, tree->headnode->mins );
|
VectorCopy( tree->mins, tree->headnode->mins );
|
||||||
VectorCopy( tree->maxs, tree->headnode->maxs );
|
VectorCopy( tree->maxs, tree->headnode->maxs );
|
||||||
|
|
|
||||||
|
|
@ -403,6 +403,7 @@ void CreateEntityLights( void )
|
||||||
|
|
||||||
intensity = intensity * pointScale;
|
intensity = intensity * pointScale;
|
||||||
light->photons = intensity;
|
light->photons = intensity;
|
||||||
|
|
||||||
light->type = EMIT_POINT;
|
light->type = EMIT_POINT;
|
||||||
|
|
||||||
/* set falloff threshold */
|
/* set falloff threshold */
|
||||||
|
|
|
||||||
|
|
@ -876,6 +876,13 @@ static int CompareSurfaceInfo( const void *a, const void *b )
|
||||||
else if( aInfo->hasLightmap > bInfo->hasLightmap )
|
else if( aInfo->hasLightmap > bInfo->hasLightmap )
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
/* 27: then shader! */
|
||||||
|
if (aInfo->si < bInfo->si)
|
||||||
|
return 1;
|
||||||
|
else if (aInfo->si > bInfo->si)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
|
||||||
/* then lightmap sample size */
|
/* then lightmap sample size */
|
||||||
if( aInfo->sampleSize < bInfo->sampleSize )
|
if( aInfo->sampleSize < bInfo->sampleSize )
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
||||||
|
|
@ -382,12 +382,22 @@ void InsertModel( char *name, int frame, m4x4_t transform, remap_t *remap, shade
|
||||||
{
|
{
|
||||||
dv->lightmap[ j ][ 0 ] = 0.0f;
|
dv->lightmap[ j ][ 0 ] = 0.0f;
|
||||||
dv->lightmap[ j ][ 1 ] = 0.0f;
|
dv->lightmap[ j ][ 1 ] = 0.0f;
|
||||||
|
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 ][ 0 ] = color[ 0 ];
|
||||||
dv->color[ j ][ 1 ] = color[ 1 ];
|
dv->color[ j ][ 1 ] = color[ 1 ];
|
||||||
dv->color[ j ][ 2 ] = color[ 2 ];
|
dv->color[ j ][ 2 ] = color[ 2 ];
|
||||||
dv->color[ j ][ 3 ] = color[ 3 ];
|
dv->color[ j ][ 3 ] = color[ 3 ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* copy indexes */
|
/* copy indexes */
|
||||||
indexes = PicoGetSurfaceIndexes( surface, 0 );
|
indexes = PicoGetSurfaceIndexes( surface, 0 );
|
||||||
|
|
|
||||||
|
|
@ -806,6 +806,7 @@ typedef struct plane_s
|
||||||
vec3_t normal;
|
vec3_t normal;
|
||||||
vec_t dist;
|
vec_t dist;
|
||||||
int type;
|
int type;
|
||||||
|
int counter;
|
||||||
int hash_chain;
|
int hash_chain;
|
||||||
}
|
}
|
||||||
plane_t;
|
plane_t;
|
||||||
|
|
@ -1953,6 +1954,7 @@ Q_EXTERN qboolean nofog Q_ASSIGN( qfalse );
|
||||||
Q_EXTERN qboolean noHint Q_ASSIGN( qfalse ); /* ydnar */
|
Q_EXTERN qboolean noHint Q_ASSIGN( qfalse ); /* ydnar */
|
||||||
Q_EXTERN qboolean renameModelShaders Q_ASSIGN( qfalse ); /* ydnar */
|
Q_EXTERN qboolean renameModelShaders Q_ASSIGN( qfalse ); /* ydnar */
|
||||||
Q_EXTERN qboolean skyFixHack 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 */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user