L4D Level Design/Visibility
- Getting Started
- Your First L4D Level
- Ladders
- Visibility
- Nav Meshes
- Checkpoints
- Checkpoint Rooms
- Outdoor Levels
- Level Organization
- Level Standards
- Clip Brushes
- Elevators
- Panic Events
- Breakable Walls
- Finale Events Part 1
- Finale Events Part 2
- Finale Events Part 3
- Additional Finale Components
- Nav Flow
- Advanced Nav Editing
- Versus Maps
[edit] Visibility
The file extension for the maps that are compiled is .bsp. BSP stands for Binary Space Partitioning. Basically, the engine only needs to draw areas of the level that the player can see. This helps with the performance of the level (how fast the frame rate is). To do this, the engine cuts up the level into chunks called leafs. If the player is standing in a leaf that sees into another leaf, then that leaf is drawn. Regular brushes determine where the leaf cuts get made. Brush entities, such as the func_ladder that we created in Part 2, do not determine where cuts are made.
So why would you not want brushes to cut up the level into more leafs? If you have more brushes that cut up the level, the engine has to do more work to calculate visibility.
In short, any brush that you create that will not block visibility effectively should be a brush entity called a func_detail.
[edit] Creating a Platform
Sticking with our level called tutorial02, let's create a platform that extends the upper floor where we created our ladder.
Duplicate the back wall brush that we extended out to create the upper story in the last tutorial and reshape it to be a platform that extends out from the upper story on one side.
It should be 368 units wide, 176 units long, and 16 units deep.
Feel free to retexture the bottom of the platform so that it matches the ceiling and floor.
Now, go to Tools > Tie to Entity or you can press Ctr+T.
The default Class for a brush entity is func_detail.
If you see something else under the Class drop-down menu, you will need to change a setting in Tools > Options
Make sure the Default SolidEntity Class field is set to "func_detail".
That's it. You're done! You just created a brush that will not cut up the bsp into more leafs.
Save the file as "tutorial03.vmf", press F9 and click on the OK Button to run it in the game.

[edit] Good Candidates for func_detail Brushes
So how do you know to make a brush a func_detail or not?
Details such as:
- Columns and Beams
- Trim
- Frames
- Small Platforms
- Posts
- Furniture
- Trusses