В этой статье я попытаюсь разобраться, какие всё-таки компиляторы лучше: ZHLT 3.4 или ZHLT 2.5.3 Custom build 1.7 Я не претендую на стопроцентную объективность, каждый волен делать выбор сам. Но некоторые соображения я всё-таки выскажу. Я несколько отступлю от заголовка статьи и добавлю в сравнение ещё и ZHLT 2.5.3 Стандартные компиляторы от Valve я рассматривать не буду, т.к. об их недостатках сказано уже достаточно и вообще это совсем другой уровень.
Поставка
Начну я конечно-же с "комплектации" скачанных архивов. Начну с самого первого, т.е. с
ZHLT 2.5.3 Открываю архив и вижу:
1. компиляторы
csg,
bsp,
vis и
rad 2. компилятор
netvis для vis-компиляции по сети
3. утилиту
ripent для редактирования entity-информации в готовом BSP
4. два wad-файла
zeditor.wad и
zhlt.wad 6. пять файлов справки в формате HTML
7. карту-пример
clipnode.map Кроме того, в архиве лежит несколько perl-скриптов, одна DLL и файл default.hull, назначение которых мне неизвестно.
Дальше смотрим
ZHLT 2.5.3 Custom build 1.7:
1. компиляторы
csg,
bsp,
vis и
rad 2. wad-файл
zhlt.wad 3. три файла справки в формате HTML и Readme.txt
4. файл
wad.cfg Следует заметить, что
ZHLT 2.5.3 Custom build 1.7 не являются самостоятельными компиляторами, а предпологается их использование с
ZHLT 2.5.3, заменив соответствующие файлы. По-этому, меньшую комплектацию
ZHLT 2.5.3 Custom build 1.7 недостатком считать нельзя, хоть и приходится качать два архива.
И наконец
ZHLT 3.4:
1. компиляторы
csg,
bsp,
vis и
rad 2. компилятор
netvis для vis-компиляции по сети
3. утилиты
ripent для редактирования entity-информации в готовом BSP и count_ents
4. wad-файл
zhlt.wad (который включает в себя текстуры из
zeditor.wad)
6. файлы
wad.cfg и
lights.rad ZHLT 3.4, в отличие от
Custom build, предназначены для самостоятельного использования. По-этому отсутствие
netvis.exe можно было б отнести к недостаткам, но т.к. он используется редко, этим можно пренебчечь. Куда неприятнее оказалось отсутствие офлайн-справки, которая ограничена лишь замечаниями о релизе
What's new?
Среди приятных нововведений следует отметить появление текстуры
BEVEL, действие которой аналогично
NULL, но в отличие от неё,
BEVEL не создаёт клипнодов.
Начинаем тестирование
Тестирование я проводил по простому принципу. Брал один и тот-же map-файл и компилировал разными компиляторами, а потом смотрел результат. Карту я брал
my_angel_dust, т.к. она и компилируется не сильно долго и на ней присутствуют все детали (вроде вшитых текстур, null-фейсов и hint-брашей). Компиляция проводилась на системе
Athlon 64 3500+,
512Mb DDR667 RAM,
GeForce 7300GT,
Windows XP Professional SP2. map-файлы были сгенерированы
Worldcraft 3.3,
VHE 3.4 и
VHE 3.5, но т.к. разницы замечено не было, то использовался только один из них. Содержание bat-файла было следующим:
d:
hlcsg -estimate -wadinclude my_dust my_angel_dust
hlbsp -estimate my_angel_dust
hlvis -full -estimate my_angel_dust
hlrad -dscale 1 -extra -chart -estimate my_angel_dust
Время компиляции. По результатам этого простого теста, наилучшие результаты времени показали
ZHLT 2.5.3 Custom build 1.7 с общим временем компиляции
174.57 сек. Дальше следуют
ZHLT 2.5.3 с результатом
183.77 сек, а вот новые
ZHLT 3.4 меня несколько разочаровали -
209.69. вы скажите: "Подумаешь - 35 секунд разницы!", но если написать время компиляции каждого компилятора в отдельности, то результаты действительно разочаровуют.
Тип компиляции | ZHLT 2.5.3 | Custom build 1.7 | ZHLT 3.4 |
---|
CSG | 5.77 | 3.31 | 2.83 |
BSP | 3.83 | 3.34 | 2.56 |
VIS | 74.06 | 59.25 | 88.08 |
RAD | 100.11 | 108.67 | 116.22 |
Общее время | 183.77 | 174.57 | 209.69 |
Анализируя данные, получается, что в новых компиляторах
ZHLT 3.4 сократили время
CSG и
BSP, в то время как время компиляции
VIS и
RAD несколько увеличилось. Что касается
Custom build 1.7, то по сравнению с
ZHLT 2.5.3 уменьшилось время всех компиляторов, кроме
RAD.
Но в связи с тем, что компиляция
CSG+
BSP занимает от
2.57% до
5.22% общего времени, а на сложных картах расти будет время именно
VIS и
RAD компиляций (
CSG и
BSP тоже будут увеличиваться, но незначительно, если
RAD увеличился в 100 раз, то CSG+BSP максимум в 10), то этим временем можно пренебречь (
CSG+
BSP). Для примера, доля компиляции
CSG+
BSP в общем времени компиляции карты
de_kotelna9.map составляет чуть более
1%. Отсюда можно сделать вывод, что сложные карты будут компилироваться значительно быстрее с помощью
ZHLT 2.5.3 Custom build 1.7, чем
ZHLT 3.4. Но здесь есть один нюанс. Если в компиляции карты по времени преобладает
vis-компиляция (как в той-же котельной), то наименьшее время компиляции будет у
ZHLT 2.5.3 (см. таблицу). Но если же на карте присутствует мало некритических ошибок, исправляемых при vis-компиляции, то
ZHLT 2.5.3 Custom build 1.7 однозначно лидирует.
По приблизительным расчётам, при использовании
ZHLT 3.4 вместо
ZHLT 2.5.3 Custom build 1.7 на каждом часе компиляции мы будем терять
8 минут 24 секунды, т.е.
14% времени.
Немного цифр. Это были данные относительно времени компиляции, теперь рассмотрим некоторые количественные характеристики компиляции. Перед вами результаты работы разных компиляторов, в таблице приведены только отличающиеся параметры:
Тип компиляции | ZHLT 2.5.3 | Custom build 1.7 | ZHLT 3.4 |
---|
planes | 7552 | 7278 | 2268 |
clipnodes | 7244 | 6740 | 6762 |
marksurfaces | 4909 | 4909 | 4909 |
visdata | 57082 | 57082 | 57086 |
Из вышеперечисленных параметров заметно отличаются только
planes и
clipnodes. Причём, первые с огромнейшим запасом в пользу
ZHLT 3.4! Отсюда можно сделать вывод, что в
ZHLT 3.4 появился режим экономии
planes, что не может не радовать, т.к. уменьшает вероятность появления ошибки
MAX_MAP_PLANES . Что же касается клипнодов, то
ZHLT 3.4, как и
ZHLT 2.5.3 Custom build 1.7 имеет режим экономии клипнодов, хоть и менее эффективный. Кроме того, (в отличие от
ZHLT 2.5.3)
ZHLT 2.5.3 Custom build 1.7 и
ZHLT 3.4 не создают клипнодов для
func_illusionary. Ну и как я уже говорил, в
ZHLT 3.4 появилась поддержка текстуры
BEVEL, предназначенной для той-же цели, что и
NULL, но в отличие от
NULL вокруг текстур
BEVEL клипноды не создаются, что позволяет дополнительно уменьшить их количество.
Проверка "на глаз". Все три скомпилированные карты я поместил в
cstrike/maps и поочерёдно запустил. Следует заметить, что размер готового
bps-файла (с вшитыми текстурами) для
ZHLT 2.5.3 составил
1264564 байт, для
ZHLT 2.5.3 Custom build 1.7 -
1255052 байт, и для
ZHLT 3.4 -
1155028 байт. Как видно, небольшая разница есть в пользу более новых релизов, что является ещё одним плюсом
ZHLT 3.4. Визуально же разницы в игре замечено не было,
r_speeds также на всех трёх картах был одинаковым (максимум
534 wpoly),
так что в этой части тестирования разницы я не обнаружил.
Несколько соображений
Вышеизложенная информация оказалась достаточно противоречивой и не даёт однозначного ответа на поставленный вопрос: что использовать? А ответ будет немного неожиданным - использовать всё. Только в различных ситуациях выбирая наиболее оптимальный вариант. Если на карте присутствуют некритические ошибки в большом количестве, т.е. время
vis-компиляции может растянуться на многие часы, но при этом карта не сильно сложная (не достигает
MAX_MAP_CLIPNODES или
MAX_MAP_PLANES), то лучше использовать
ZHLT 2.5.3. Если же есть опасность
MAX_MAP_CLIPNODES то
ZHLT 2.5.3 Custom build 1.7 или
ZHLT 3.4 (при использовании
BEVEL текстур). Если же подходит предел
MAX_MAP_PLANES, то идеальным решением проблемы будет
ZHLT 3.4 с его уменьшением числа
planes более, чем втрое. ну а если критичным становится время
rad-компиляции, то тогда
ZHLT 2.5.3 Custom build 1.7 будет в самый раз. В остальных же случаях правильней, наверно, будет использовать последние
ZHLT 3.4, т.к. надо переходить на всё новое. Хотя, каждый будет решать за себя сам.