I don't need to test my programs. I have an error-correcting modem.

Legacy:BSP Hole Background

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search
The All-Time Most Humongeous BSP Hole Rant

Nuclear Fuzz Grunge assembled this information from posts at the BeyondUnreal Editing Forum:

"In the interests of providing the Planet Unreal Editing Community with hard data on BSP Holes, I have conducted an exhaustive search of past Editing Forum threads on the subject and assembled the most practical and informative posts into an authoritive synopsis.

The following BSP Intel, from the Illustrious UnrealEdMonger, Chris Toth.hu, is undoubtedly, the ultimate BSP Hole indoctrination:

OK ... It's the time for answers. The BSP is a data structure indeed, ... it's static too. Rebuilding the BSP creates a binary tree of the geometry of the level. It contains the collision information, hierarchy ... etc of the walls, floors, brush based objects etc. When the engine renders the actual scene of the game it looks for the needed polygons in the BSP tree and ignores the irrelevant ones. (This is occlusion.) The complexity of the local geometry can slow down this process as well as the complexity of the tree at the local geometry. (Vica versa) If your BSP tree is deep then the renderer must search several levels for the needed parts. You can see info about BSP depth in the Rebuild/Level Statistics. BSP cuts build up your binary tree which describes it's parts using the nodes for identification.

The BSP hole is a piece of messed up collision info. It can convert non-colliding space into solid space (You can't walk there) or areas can lose collision (walk-thru-walls). Sometimes it allows you to walk into solid space...and since you cannot exist inside solid space you'll be killed. The borders of the unexisting solid space can reach into walls/floors and it'll prevent the raytracer to light those areas (unlit dark areas) or it can hang into Walls/Floors ... so during the Optimalization phase the area will be treated as unneeded and will be removed. (Black parts/transparent polygons and HOMs (Hall of Mirror effect) ... HOMs are BSP holes on the outer parts of the map where you would see the Grid in the editor ... )

You can see BSP holes in the Zone Portal view and not in the BSP cuts view. (They are easily noticable black streaks or transparent parts.) The last part of the elimination tips ... you can change the settings. And this is sometimes good. It changes the method of creating cuts so you can balance the BSP depth/nodecount with it. I remember Myscha wrote these tips when UEd 1.0 shipped and there were bugs with those rebuild options. They are fixed in UEd 2.0 ... so you can change them as you want. (But those are the Optimal values set by default ... )

The Unreal Engine uses Binary Space partition trees to store 3 dimensional data. So imagine that the whole level is made out of a large sheet of matter. Now you would need to fold the sheet to form rooms, walls ... etc like in origami. This is done by dividing the superspace into numerous sub-spaces by assigning nodes to key locations of the superspace. Then the nodes create convex parts (segments, polygons) from the superspace they can be sorted into a tree. With this method the engine can determine which areas of the map are solid geometry and have collision and which are not. Sometimes the BSP gets messed up and certain parts will lose collision, get collision or partially lose collision. When they lose collision you'll be able to walk through walls fall through floors. If an area gets collision then you won't be able to walk into those areas and it is likely that you will see black polys around those areas, since those polys are "out of the BSP" and they don't get textured this way. If something partially loses collision that means that the borders of the collision are killed and you are able to walk into solid space. Since nothing can exist inside solid space you'll get killed. There are several methods for getting rid of BSP holes.

  • Simplify the geometry in the area.
  • Use more semisolids (They don't cut up the BSP so they can't cause BSP errors in solid geometry but they can mess around with other semi-solids and non-solids)
  • Try to reduce node count (semisolids, build settings ... )
  • If additive brushes get BSP errors then it often helps if you put them to the end of the BSP rebuild sequence. (and sometimes changing them to semisolid too)

(Note: if something is at the end of the queue then if it has subtractions inside then the subtraction will ba applied first and then the added brush will fill the space. So nothing will happen...you'll have the brush unhollowed. You would need to intersect that brush first and add it afterwards. -Zone off the area. This way the geometry inside the zone won't be that complex.)

Here's even more excellent advice, concerning the statistic: the Node to Polygon Ratio.

An average proportion of 2 or 3 nodes per poly is still good but don't let it go higher because it makes your map slower and it increases the possibility of getting BSP holes.

Advice concerning the Build Options sliders (in the Properties Window)

The sliders (Build Options) should be your last solution. Try changing brush order, solidity, adjusting brush locations (Align everything to the grid!). Try to keep things simple. If it's high poly and complex then it'll cause high nodecounts as well. If the nodecounts are high, then:

  1. It will play like crap, and
  2. It'll create a complex BSP data structure that can result in BSP holes.

Change it's solidity to semi-solid. This will reduce the nodecount and it will probably make any BSP hole disappear. If it's not caused by the nodecount but by the complexity of the brush then you can't do too much about it ... you need to make it less-complex. It's like trying to build a sphere with a large extrapolation. Don't use spheres with large Extrapolation ... they are difficulties for the BSP compiler.It will nuke your BSP. If nothing helped then use the sliders! Push the first slider towards Limit cuts ... 12 or 13 usually does the trick.


Much Appreciation to ChrisToth.hu.

Related Topics[edit]