Нет, не виснет. Просто обсчет того, что видно из каждого листа весьма ресурсоемок. Естественно чем больше ядер в твоем процессоре и чем быстрее они работают - тем быстрее отсчитается vvis (и vrad). Вот тут как раз 4х ядерники рулят по полной. Но на рассчеты VVIS также сильно влияет общая оптимизированность уровня с помощью hint-брашей, т.к. предположительно перед началом детальных и точных рассчетов видимости будет выполнена предварительная обработка, целью которой будет быстро отсечь те листья, которые не видно из текущего листа. Вот тут твои грамотно поставленные hint-браши могут также в разы ускорить последующую компиляцию vvis. Вторым моментом авто-ускоряющим vvis (даже без пользовательских hint-ов) является корридорный тип карты - когда из любого листа видно только кусок коридора в обе стороны (грубо говоря; т.е. видно несколько листьев в обе стороны). Открытые карты будут в разы дольше - там из одного листа может быть видно весь уровень и таких листов будет несколько тысяч (и vvis будет тупо их один за одним проссчитывать на предмет видимости между собой). Вот тут нужны грамотно поставленные хинты + по любому нужен мощьный процессор
. Все это имхо, т.к. документации по vvis у меня нет, просто собственные эксперименты и наблюдения.
Ну и само собой - не плодите листья попусту, используйте func_detail для сложной геометрии типа ступенек и т.п.
Я понимаю что все это выносит мозг - чтобы немного разобратся что такое листья - скомпилируйте свою карту с ключем -glview для VBSP (остальные компиляторы не нужны, их не влючать). Полученные в результате компила файлы (*.bsp,*.gl, *.prt(короче все
)) скопировать в папку к glview.exe и запустить его, указав в строке запуска имя карты (подробнее - см. доки по glview.exe). В окне glvew.exe можно будет полетать по вашему уровню - весь уровень будет представлять из себя набор обьемов (каждый обьем - это и есть лист "leaf"). Вот vvis и проссчитывает какой лист видит какие другие листы и записывает эту информацию в bsp. А в игре эта информация используется - движок рендерит в игре только те листья, которые видны из текущего листа (в котором сейчас игрок); движку уже не надо для этого выполнять никаких рассчетов - только считать номера листов из bsp и отрендерить их. Тажке летая в glview.exe (WSADом) можно увидеть где скопления мелких листьев - там нужно потом в хаммере раздать func_detail и т.п.