The scene is first parsed and stored into a BSP tree. The tree is used to construct a list of rooms and “portals” that can be used to cull out objects that can’t be rendered. The camera’s view frustum loops through the portal list and is recursively adjusted to tightly fit through any portals it can see.
In the demo, the scene is presented from an external camera to display the view frustum of the player’s camera and only renders the rooms that can be seen. Each set of lines is a view frustum that is clamped to a portal.