Map Design

Not only aesthetical, but also technical issues must be considered when designing a level. A BSP tree level contains of surfaces that intersect each other. The edges and vertices are not taken over by WED, but calculated from the intersections. The advantage of this concept is that you can overlap blocks - the invisible intersecting parts are clipped off by the build process, and new edges and vertices are automatically placed at the intersections. This makes rendering much faster, because the invisible overlapping parts of blocks aren't rendered (other engines would just render all blocks over each other). The disadvantage is that small angle differences can lead to large vertex position differences. If surfaces touch or intersect at a very small angle, inaccuracies of only 1/100 degree can move the joining edge position by several pixels, which is really visible in the level.

For this reason, don't use extremely narrow, elongated, or acute blocks. Do not create blocks with edges smaller than 2 quants. Always try to design your map with as less surfaces as possible, and use as thick blocks as possible. Sometimes you can't avoid surfaces touching at small angles - but even then there's a bad way and a good way to do it. For instance, if you have a sloping road over a hill (side view):

Bad design: uses long thin plates, and small angle inaccuracies in the marked joints will be visible as 'gaps' or 'steps' from above.

Good design: 3 blocks with 13 surfaces instead of 5 blocks with 20, and angle inaccuracies, even if they occur, won't be visible.

The BSP tree creation will 'snap' all vertices to integer positions. This can produce problems with T-junctions - a place where two block edges form a 'T' - when the junction vertex is not at an integer position. In this case the vertex displacement to an integer position can leave a visible gap or seam between the junction and the non-displaced crossbar of the 'T'. This is a common problem in BSP tree levels. The map compiler tries to convert as much 3-way T junctions as possible to 4-way 'X' junctions that aren't a problem in that reagrd. But it can't catch all. There are two solutions: a) have no T-junctions, and/or b) have all vertices snapped to the integer grid in your level.

Some more level design hints: