A while ago I made an experimental map for testing how brush faces were culled, in different circumstances. I wanted to see which faces were culled, so I could avoid needlessly texturing things with
. You may find this image useful:
And here is the map:
MAP.
A summary:
- World brush faces against other world brush faces will be chopped and culled.
- World brush faces will cull func_detail faces if those faces are entirely covered by the world brush face. Partially-exposed func_detail faces will be rendered in full.
- Two faces from the same entity (func_detail, func_brush, func_door and so on) which touch each other will be chopped and culled.
- func_detail covering world brushes can cause ugly shadows. func_detail doesn't chop and cull world brush faces.
Note that faces belonging to dynamic brush entities which are covered by world brushes are not culled, likely because such brushes are intended to move, so culling would interfere with their appearance.
For stairs you can do a few things. You can chop the steps themselves into triangles, so their backs are diagonal, and put a new triangle world brush behind them that will cull the wall and floor hidden by the stairs. func_detail the steps so they don't cut visleaves. Alternatively, leave all your stairs as world brushes, then put a diagonal
face along their slope, inline with your
/
brush, which will trim the portals created by the steps during VBSP so they don't cut the surrounding visleaves. Or use props for your stairs and fill their back in with a world brush or two for sealing and culling.