Ладно, еще раз по полкам. Это не единственный способ, но один из самых оптимальных. В карте - плоскости. Шесть плоскостей образует браш. Каждая плоскость каждого браша обрезается всеми остальными плоскостями. В итоге получаются реальные вертексы (для примера рассматриваем кубег). Эти брашы подаются на вход CSG. CSG дополнительно вычитает из каждого браша каждый.
Легко заметить что при таком подходе можно получить каждый раз разные результаты, поскольку любое вычитание (неважно чем мы оперируем брашами или числами), критично к положению мест вычитаемых. Поэтому для CSG действует два простых правила - сортировка по контентсам (солиды жрут воду, но вода не может жрать солид) и приоритеты в порядке возрастания номера браша. Т.е. младший в списке номер всегда вычитается из старшего, хотя и не факт, что это всегда правильно. Ну это лирическое отступление по вышеописанной проблеме. Пойдем дальше, когда CSG завершил свою работу у нас больше нет брашей, всё. Только сурфейсы. Точнее браши-то никуда не делись конечно, но уже нет никакого смысла знать какие сурфейсы какому брашу принадлежали (для ку2 ситуация иная, там дерево режет не сурфейсы, а именно браши, но об этом как-нить в другой раз), эти сурфейсы вместе со всеми вертексами натурально дампятся в текстовые файлики, откуда их потом читает BSP. Ну видели наверное файлы mapname.p0, mapname.p1 и так далее. Вот там фейсы всех моделей для каждого хулла свой файлик. При загрузке в BSP они группируются по плоскости. Т.е. все фейсы, имеющие одну плоскость собираются в цепочку. Для ускорения работы. Ну а дальше мы выбираем секущую плоскость из уже имеющихся. BSP не порождает новых плоскостей (технически ему никто не мешает конечно). В определённых случаях, порождается аксиальная плоскость точно посередине карты, это как правило делается на начальных этапах построения, когда на вход подаются все полигоны карты. И здесь BSP ведёт себя именно так как написано в учебниках - разрубает карту пополам. Это необязательно делать, но так зачастую балансировка лучше получается (хотя и глубина рекурсии тоже возрастает, каждый такой разруб даёт явный +1 к глубине и потенциально еще пару неявных). Но зато у нас не получается уродства когда у корневой ноды второй узел ведёт на аутсайдлиф.
Вообщем после такого аксиального разруба уже в дело вступают наши цепочки фейсов с прилинкованными плоскостями. Мы перебираем их все (те, которые остались во второй половине карты после разруба) и выбираем ту плоскость, которая даёт минимальное кол-во новых разбиений, это аналитический процесс.
Не факт что это произойдет именно с аксиальной плоскостью, кстати. Но это напрямую зависит от того как поработал CSG. Но CSG (само вычитание), не порождает новых плоскостей. Только создание самих брашей.