The .bsp file contains more than just the raw BSP tree. It defines
drawing surfaces, solid and interactive geometry and game related entities.
Kekoa Proudfoots Unofficial Quake 3 Map Specs
gives a good overview of the format. A general understanding of the format
and terminology used to describe it is required to fully understand the
rest of this article.
(note: q3map -info can be used to list the sizes and number of entries in various BSP lumps)
(note: http://www.planetquake.com/spog/stuff/technical.html)
The key characteristics relevant to this article are:
The following specific questions are investigated:
Name | Description | Comments |
nodraw-solid-flush | nondrawing, solid brushes, flush with (completely embedded in) the floor | Basic test of the cost of non-drawing brushwork |
nodraw-solid-flush-b256 | nondrawing, solid brushes, flush with (completely embedded in) the floor, blocksize 256 | Test the impact of putting the above brushwork into multiple leafs |
nodraw-solid-split | nondrawing, solid brushes, partly protruding from the floor | What happens if the brushes occupy more than one leaf ? |
nodraw-solid-nosplit | nondrawing, solid brushes, completely above the floor (inside the structural box) | What happens if they are completely inside, not overlapping anything else. |
nodraw-nonsolid-flush | nondrawing, nonsolid brushes, flush with the floor | as nodraw-solid-flush, but nonsolid. |
draw-solid-flush | solid, drawing brushes, flush with the floor | Baseline drawing brushes. |
draw-nonsolid-flush | nonsolid, drawing brushes, flush with the floor | Drawing with nonsolid brushes. Note: uses custom q3map2 feature and shader to ensure brushes are nonsolid. |
model | ASE misc_model (generated from drawing brushwork above), flush with the floor | Triangle model generated from above brushwork. Same geometry but no brushes. |
discard-flush | drawing brushwork with brushes discarded, flush with the floor | Same as draw-solid-flush, but using a modified q3map2 which discards the brushes (and associated resources) after compile. |
q3map2 -v -game et -fs_basepath "<basepath>" -meta -mv 1024 -mi 6144 "<mapname>"
q3map2 -game et -fs_basepath "<basepath>" -vis -saveprt "<mapname>"
(note: all but nodraw-solid-flush-b256 are unaffected by vis, since they only have 1 cluster.)
test case | FPS | opt | Server CPU @43 | @max | .BSP size |
caulk-flush | 116-118 | 640+* | 9%-11% | 100%* | 1MB |
clip-flush | 71-73 | 600+* | 26%-30% | 100%* | 1MB |
clip-split | 48-49 | 230 | 60%-63% | 100%* | 1.1M |
clip-flush-b256 | 291-294 | 715* | 1%-2% | 8%-11% | 1MB |
nonsolid-flush | 79-80 | 700+* | 16-17% | 100%* | 1MB |
draw-solid-flush | 88-89 | 157-159 | 9-11% | 34%-35% | 3.6MB |
model | 200-202 | 206-207 | 0.7%-2% | 1%-3% | 2.8MB |
discard-flush | 194-195 | 198-199 | 0.7-2% | 1%-3% | 2.7MB |