Из данного материала вы узнаете о том, как создаётся правильное и
наиболее грамотное небо для Half-Life (Counter-Strike) уровней. Сложное
(оно же правильное) небо обладает несколькими преимуществами перед
простым небом, созданным коробкой вокруг уровня. Основные преимущества —
это меньшее время компиляции и большее количество кадров в секунду.
Для создания грамотного неба используется все те же SKY-браши, то есть простые браши (не энтити!), окрашенные со всех сторон специальной текстурой неба SKY.
Давайте рассмотрим создание сложного неба для уровня, чья форма
несколько сложнее, нежели простой прямоугольник (смотрите картинку
ниже).
Небо начнём делать с боковых сторон карты. Будем строить SKY-браши по периметру уровня (смотрите картинку ниже).
Готово (смотрите картинку ниже). Высота SKY-брашей выбирается
какая-угодно. Она может быть и 256, и 512, и больше юнитов, но для
удобства она должна быть одинакова для всех боковых SKY-брашей. Также
рекомендуем проследить за тем, чтобы игроки не бились об небо головами
:-) Вобщем, высоты в 384-512 юнитов вполне достаточно, может быть, даже
поменьше.
Обратите внимание, что дырку в центре уровня также нужно закрыть
SKY-брашем СНИЗУ (смотрите картинку ниже), который по размерам точно ей
соответствует. Дырок и щелей быть не должно, иначе при компиляции
возникнет ошибка LEAK. Небо должно полностью ограждать карту от внешней пустоты.
Дыру в центре закрыли. Теперь нужно закрыть верх уровня. Создадим для
этого два довольно больших SKY-браша (смотрите картинку ниже).
Этим можно было бы и ограничиться, так как само по себе небо уже
готово, но давайте ещё ограничим CLIP-брашем передвижение игрока, чтобы
он не мог упасть в центральную дырку, снизу заделанную SKY-брашем. Для
этого на месте дыры построим CLIP-браш, то есть, как вы знаете, простой браш, окрашенный со ВСЕХ сторон специальной текстурой CLIP.
Такие браши в игре прозрачны, через них безпрепятственно пролетают пули
и гранаты, но игрок сквозь них пройти не может (смотрите картинку
ниже).
CLIP-браш по размерам равен дыре: он начинается от верхних сторон бортиков и продолжается до самого неба, но не «входит» в него.
Теперь где-нибудь внутри уровня остается разместить «солнышко» — энтити-объект light_environment, а также необходимо вписать название рисунка неба в свойствах Хаммера, в меню «Map\Map properties...» в параметре environment map. Как правильно указывать имя картинки неба, мы рассказывали в прошлом материале про простое небо.
И вот результат (смотрите картинку ниже). Как видите, изображения неба
наносятся не на созданные SKY-браши, а на эдакий немалый удалённый куб,
который для всех уровней одинаков.
Преимущества сложного неба над простым
Мы провели простой эксперимент: создали на данном же уровне вместо
сложного неба — простое небо коробкой вокруг карты и затем сравнили
log-файлы, в которые сохраняется информация о ходе выполнения
компиляции, а также подробная статистика BSP-файла (если использовать
параметр -chart). И вот какие интересные результаты мы получили
(смотрите картинку ниже).
Кратко поясним, что означают эти параметры.
Время компиляции — здесь всё просто; компиляция карты с правильным небом проходит в 2 раза быстрее... как вам это? :-)
Просчёт освещения — в уровне с небом-коробкой также
просчитываются все поверхности снаружи уровня, что приводит к
значительному увеличению времени компиляции даже на малых уровнях.
Clipnodes — число плоскостей, ограничивающих перемещение
игрока. Не путайте их с помещённым в центр CLIP-брашем — это не совсем
одно и то же, хотя CLIP-браши тоже «подкидывают» clipnodes в уровень. По
числу clipnodes-поверхностей можно судить о проделанной
программой-компилятором HLVIS.EXE работы. Чем меньше число clipnodes,
тем меньше работы было у компилятора HLVIS.EXE.
Faces — число поверхностей, полигонов с текстурой. Чем их меньше, тем меньше работы компилятору HLRAD.EXE, просчитывающему освещение.
Patches — число патчей. При компиляции уровня все видимые
стороны брашей и брашевых энтити-объектов разбиваются на патчи
определенного размера. По умолчанию размер патча составляет 64 x 64
юнита, но его можно изменить параметром -chop. Чем меньше патчей, тем
лучше. Если патчей слишком много (более 65535), то возникнет ошибка
MAX_PATCHES. А посему нужно следить за числом патчей и, если
понадобится, сократить их.
Lightdata — параметр, показывающий суммарный объем информации об освещении уровня.
Visdata — параметр, показывающий суммарный объем визуальной информации уровня.
Как видите, время сэкономленное на построении неба коробкой, вместо
грамотного неба, расходуется при компиляции. Отсюда правило :-) — для
крупных карт всегда создавайте правильное небо, а для маленьких можно
обойтись небом-коробкой, но только не забудьте оптимизировать уровень,
как это написано в прошлом материале.