Внимание: если вы установили игру и редактор ранее 26.01.20111, не забудьте обновить и то, и другое! Подробнее см. тему Option Implicit: First Demo.
Пришло время подробнее остановиться на различных способах и режимах компиляции уровня Volatile3D II. Компилятор уровней представляет собой одну программу (vmap), выполняющую три функции – построение BSP-геометрии, оптимизация видимости и расчёт освещения. В зависимости от того, какие из этих функций будут активизированы и с какими параметрами, редактор предлагает 14 режимов компиляции, доступных в меню Bsp. Рассмотрим их:
Normal compile – этот режим для небольших уровней вы будете использовать чаще всего. Выполняется расчёт BSP-геометрии и полная оптимизация видимости на уровне. Расчёт освещения проводится только для динамического рендера, так что в режиме статического освещения уровень будет освещен ярко и равномерно. Поэтому никогда не выкладывайте скомпилированный таким образом уровень публично!
Normal compile (nocurves) – полностью аналогичен вышеописанному режиму, но полностью исключает с уровня кривые поверхности. Может быть полезен, если вы хотите оценить, насколько кривые поверхности влияют на производительность.
Normal compile (nolight) – выполняется расчёт BSP-геометрии и полная оптимизация видимости на уровне. Освещение не рассчитывается.
Normal compile (nodetail) – полностью аналогичен режиму «Normal compile», но исключает с уровня detail-браши. Мы поговорим о них в следующих уроках, но вкратце – это браши, которые используются для детализации – не «разрезают» браши, которых касаются, и не участвуют в расчете видимости (vis).
Fast compile (nolight) – режим быстрой компиляции. Компилятор видимости производит только быстрые расчеты, из-за чего оптимизация будет лишь частичной. Освещение считаться не будет.
Fast compile – аналогичен вышеописанному режиму, но при этом будет частично рассчитываться освещение. Освещение будет только динамическим, при этом не будет построены сетки статического освещения динамических объектов и мониторинга уровня освещенности игрока и врагов.
Full compile – полная компиляция уровня, этим всё сказано. В принципе, карты, собранные в этом режиме, годятся для дистрибуции.
Full compile (fastvis) – полная компиляция BSP-геометрии и освещения, но при этом частичная оптимизация видимости. Может быть полезна, если уровень представляет собой большое открытое пространство, где точный расчет vis не особо нужен и может быть очень длительным.
Full extra compile – полная компиляция уровня с улучшением качества лайтмапов. Для финальной компиляции рекомендуется использовать именно его.
Full extra compile (extraWide) – аналогично вышеописанному режиму, с допольнительным антиалиасингом лайтмапов. Этот режим может выдавать артефакты на сложных брашевых конструкциях и ландшафтах, так что, используя его, обязательно протестируйте карту в режиме статического рендера.
Only build BSP – как следует из названия режима, строится только BSP-геометрия. Никакой оптимизации и расчета освещения не проводится.
Only update actors – выполняется только обновление параметров акторов. Полезно использовать, если вы не хотите перекомпилировать большой уровень. Но учтите – изменение параметров таких объектов, как источники света, в любом случае потребует повторного расчета освещения.
Only update dynamic lighting – перерасчет динамического освещения, при этом статическое аннулируется.
Only update total lighting – полный перерасчет освещения уровня.
Вы можете добавить свои режимы компиляции прямо в меню. Для этого нужно отредактировать файл default.qe4 в папке с редактором. Обратите внимание, что пункты перечислены в обратном порядке – нижние раньше, верхние позже. Строки, обозначающие пункты меню Bsp, начинаются с приставки «bsp». Рассмотрим одну строку:
Normal compile – название режима (обратите внимание на отсутствие пробела между названием и приставкой bsp).
! – указание на выполнение команды.
__QERPATH\vmap – путь к компилятору vmap (обычно он находится в папке редактора, т.е. __QERPATH).
$ - имя компилируемого уровня, подставляется редактором автоматически.
&& - указание, что за этой командой надо выполнить другие, в единой связке.
Остальное – это параметры компилятора. Не забывайте заключать название пункта меню и текст команды в кавычки.
Компиляция через редактор полезна тем, что в случае появления на уровне ошибки «LEAK» (т.е. дырки, связывающей наружное пространство с внутренним, либо положение центра какого-либо актора за пределами уровня) игра не запустится и будет автоматически загружен pointfile для ее поиска. Но иногда предпочтительнее использовать командные файлы для компиляции. Команды компилятора делятся на две категории – ключ режима и параметры режима. Ключа всего три:
info – вывод информации о перечисленных vm-файлах.
vis – расчет видимости vm-файла.
light – расчет освещения vm-файла.
Если ключ не указан, выполняется расчет BSP-геометрии на основе map-файла, т.е. первичное построение vm-файла.
Параметров режимов довольно много. Некоторые из них являются общими для всех (кроме info, он стоит особняком и не является режимом компиляции), другие относятся только к определенным режимам. Рассмотрим общие параметры:
threads – выбор количество потоков, которые будут использовать многопоточные компиляторы (vis, light). По умолчанию выбирается число процессоров в системе. Если у вас не по-настоящему многоядерный процессор, а скажем, процессор с HT, использование одного потока может оказаться быстрее, в этом случае укажите компиляторам параметр -threads 1.
v – вывод большого количества отладочной информации. Вряд ли этот режим вам понадобится.
nosettings – не выводить таблицу информации о настройках при старте компиляции.
nolog – не вести лог (очень не рекомендуется использовать этот режим – многие ошибки компиляции можно диагностировать только по логу).
chart – выводить информацию о vm-файле по окончании компиляции.
estimate – производить приблизительный подсчет времени, оставшегося до конца компиляции. Однако сам по себе этот режим замедляет компиляцию.
low – использовать низкий приоритет задачи для компилятора.
high – использовать высокий приоритет задачи для компилятора (не рекомендуется).
no3dnow – не использовать оптимизации 3DNow, даже если процессор их поддерживает.
nosse – не использовать оптимизации SSE, даже если процессор их поддерживает.
nosse2 – не использовать оптимизации SSE2, даже если процессор их поддерживает.
Переходим к параметрам построения BSP (запуск vmap без параметров):
nowater – игнорировать воду.
nodetail – игнорировать detail-браши (см. выше).
onlyents – только обновить акторы в процессе компиляции.
nofog – игнорировать объемный туман.
nosubdivide – не разбивать поверхности, как того требуют шейдерные скрипты.
leaktest – провести только тест на наличие дырок. В случае обнаружения дырок компиляция будет прервана и vm-файл создан не будет.
nocurves – игнорировать кривые поверхности.
nooverlays – игнорировать оверлеи.
notjunc – не исправлять t-связки путем добавления дополнительных вершин. Эта опция предназначена исключительно для отладки и в финальных компиляциях использоваться не должна, т.к. легко приведет к появлению щелей между полигонами.
samplesize – разрешение лайтмапы (размер текселя в юнитах). Чем меньше, тем качественнее лайтмапы, но тем больше памяти они занимают. Этот же параметр надо указывать в режиме light.
cubemapsize – размер Cubemap-текстур по умолчанию.
Основные параметры режима vis таковы:
fast – быстрая оптимизация.
full – дополнительная оптимизация (не всегда приводит к ожидаемым результатам, поэтому по умолчанию не используется).
mergeVis – оптимизирует количество порталов путем их слияния по возможности.
nopassage – использовать только portals (отладочная опция).
onlypassage – использовать только passages (отладочная опция).
nosort – не сортировать порталы (отладочная опция).
saveprt – не удалять prt-файл, созданный предыдущим режимом компиляции.
nopas – не рассчитывать PAS – potentially audible set (отладочная опция).
И, наконец, параметры компилятора освещения (light):
nostatic – не рассчитывать статическое освещение.
border – создать бордюры вокруг лайтмапов – позволяет оценить их расположение и размер (отладочная опция).
lightmapnormals – цвет лайтмапы представляет собой упакованное направление нормали в этом текселе (отладочная опция).
nogrid – не рассчитывать сетку статического освещения для динамических объектов.
noillum – не рассчитывать сетку уровня освещенности.
patchshadows – рассчитывать тени от кривых поверхностей (обязательно устанавливайте этот параметр для финальной компиляции).
notrace – не рассчитывать тени.
overbright – величина множителя для цвета лайтмапов. Они формируются таким образом, что настоящий уровень освещенности получается только после умножения на этот множитель в движке, что расширяет возможный цветовой диапазон. По умолчанию используется значение 2, возможные значения: 1, 2, 4. Учтите, что некоторые старые видеокарты не могут использовать значение 4, и лайтмапы на картах, созданных с овербрайтом 4, на таких видеркартах будут в два раза темнее.
gridsize – размер ячейки сетки статического освещения. Задается как «-gridsize X Y Z», где X, Y и Z – это линейные размеры ячейки в юнитах. По умолчанию размер ячейки равен (16, 16, 32). Обычно имеет смысл указывать большее значение для размера по Z, если уровень в основном горизонтальный. Вам понадобится увеличивать это значение, если вы получаете ошибку «Exceeded MAX_MAP_LIGHTGRID».
ambient – уровень фонового освещения уровня. Задается как «-ambient R G B», где R, G и B – это значения красной, зеленой и синей компоненты освещения в диапазоне от 0 до 255. По умолчанию фоновое освещение равно (32, 32, 32).
samplesize – разрешение лайтмапы (размер текселя в юнитах). Чем меньше, тем качественнее лайтмапы, но тем больше памяти они занимают. Этот же параметр надо указывать в режиме расчета BSP.
gridopt – оптимизация сетки статического освещения. Для финальных компиляций рекомендуется указывать этот параметр.
Большинство параметров вам не понадобится, но иметь представление о них всё же следует. В дальнейшем мы рассмотрим ошибки компиляции и способы их исправления.