небо
Простое небо (метод коробки)
В этой статье мы рассматриваем очень простой метод создания неба. Он не требует много времени и больших усилий, однако имеет некоторые недостатки, которые мы попытаемся свести к минимуму, применив кое-какие хитрости. Мы надеемся, что Вы уже неплохо научились создавать «закрытые» карты, без неба, представляющие собой одну или несколько соединенных между собой комнат.
Что такое небо?
Небо в Half-Life (CS) — это имитация открытого пространства, которая реализуется следующим:
SKY-брашами, построенными вокруг карты
Картинкой неба, записанной в свойства карты
SKY-браши — это обычные браши (правда, весьма больших размеров), окрашенные СО ВСЕХ СТОРОН специальной текстурой под названием SKY. SKY-браши размещаются вокруг карты, образуя некий колпак, отделяющий карту от внешнего «вакуума».
Наглядно небо в Half-Life можно представить в виде сковродки с прозрачной крышкой, где сковородка — Ваш уровень, а прозрачная крышка — небо. Крышка должна плотно прилегать к краям сковородки, не должно быть щелей и дырок, ведущих во «внешний мир». Это обязательное и очень важное условие при создании неба. Небо должно полностью отделять карту от внешнего мира, иначе возникнет ошибка при компиляции (небезызвестная ошибка LEAK).
Почему крышка прозрачная? Дело в том, что само по себе небо, т.е. SKY-браши прозрачны для игры. На самом деле игрок видит КАРТИНКУ, а если точнее 6 картинок неба, наложенных (спроецированных) на стороны воображаемого куба. Данный куб находится за пределами карты (за пределами сковородки с прозрачной крышкой :). Представьте себе большой куб, находящийся за картой, с наложенными на его стороны картинками неба. Игрок смотрит через прозрачную крышку сковродки и видит эти картинки. Картинки созданы в специальной программе и подогнаны друг к другу таким образом, что у игрока создается впечатление, что он видит обычное «круглое» небо, а не картинки, наложенные на куб.
Для создания неба используется только текстура SKY. На брашах неба не должно быть других текстур, кроме SKY. Это еще одно обязательное условие.
В данной статье мы будем строить простое небо — одной большой коробкой вокруг карты. Мы просто поместим всю нашу карту в огромную комнату, окрашенную со всех сторон текстурой SKY.
Ну, чтож. Предположим у нас имеется вот такая небольшая открытая карта, совсем простая по конструкции (см. рис. ниже).

Как можно легко посчитать, карта состоит всего из 5 брашей (1 браш — земля и 4 браша — бортики). На всякий случай сообщаем размеры карты: земля имеет размеры 512х384х64 юнита, а 4 бортика высоту 48 юнитов.
Выберите текстуру SKY (она находится в стандартной и самой большой библиотеке текстур halflife.wad) и постройте вокруг карты большой браш так, чтобы карта полностью оказалась в нем, и еще оставалось немного места по краям (желательно 16-32 юнита с каждой стороны).
На рисунках ниже показаны виды сверху и спереди и контуры создаваемого SKY-браша. В принципе нет необходимости оставлять так много пустого места до краев карты. Это даже вредно и замедлит компиляцию. Лучше, конечно, строить SKY-браши впритык к стенам карты, но пока что пусть будет так — с запасом.


После того, как мы закончим создание SKY-браша, нажав «Enter», необходимо превратить его в КОМНАТУ. Подробно эта операция разбиралась нами в статье «Создание пустотелых объектов при помощи Hollow».
То есть был у нас один SKY-браш, а после применени функции Hollow, появилась комната, состаящая из 6 SKY-брашей (пол, потолок, стены). Создание именно комнаты из 6 SKY-брашей необходимо, чтобы небо заработало. Теперь наша карта находится внутри комнаты, состоящей из 6 стен, полностью окрашенных текстурой SKY.
Как применить Hollow: выделяем SKY-браш и нажимаем [Ctrl-H], то есть применяем функцию Hollow — придаем толщину стенкам браша. В появившемся окошке нужно указать толщину стен комнаты. Можно оставить значение по умолчанию: 32.
Простое небо готово! После этой операции карта должна выглядеть приблизительно так:

Уменьшения вреда от неба-коробки (способ №1)
Скорее всего, у Вас останется некоторое пространство между стенами комнаты и картой (как у нас на рисунке). Желательно делать комнату ровно по размерам карты, чтобы ни около дна, ни около стен карты не оставалось никакого пространтсва. То есть нужно, чтобы стены комнаты соприкасались со стенами и дном карты. А вот сверху карты наоборот место оставить нужно, чтобы игроки не бились головами о небо и могли свободно прыгать. Данный совет поможет уменьшить работу компиляторам, которым не нужно будет просчитывать пустое пространство вокруг карты.
Уменьшения вреда от неба-коробки (способ №2)
Когда Вы создали вокруг карты плотно прилегающую комнату из SKY-брашей, необходимо уменьшить работу компилятору HLRAD, который просчитывает освещение на карте. Дело в том, что освещение на карте проецируется именно со SKY-текстур. Компилятор HLRAD определяет, где расположены SKY-браши, проецирует с них освещение на все остальные объекты, имеющие какую-либо текстуру. То есть он будет просчитывать и дно, и внешние стороны карты, т.к. они имеют текстуры и соприкасаются со SKY-брашами, «видят» небо.
Надо заметить, что операция по просчету освещения самая продолжительная из всех и к тому же самая требовательная к ресурсам компьютера. Поэтому обязательно необходимо ЗАКРАШИВАТЬ ВСЕ ВНЕШНИЕ СТОРОНЫ карты текстурой SKY. Но в этом случае, естественно, не для создания неба, а просто, чтобы компилятор HLRAD не просчитывал освещение для этих поверхностей. SKY текстура просто игнорируется этим компилятором! Грех не воспользоваться этим ее замечательным свойством и значительно не ускорить процесс компиляции карты.
На рисунках ниже показаны незакрашенные и закрашенные внешние стороны карты (также у этой карты закрашено дно), которые игрок никогда в игре не увидит. Данные поверхности не будут просчитаны на освещение, тем самым время компиляции существенно уменьшится (чем больше карта, тем больше экономия, иногда экономится до 50% времени!). Также можно закрашивать крыши домов и любые другие поверхности, которые игрок НИКОГДА НЕ УВИДИТ в игре. Кстати, благодаря этому, уменьшается и размер карты (в МБ).


Также можно закрасить SKY-текстурой невидимые игроку крыши домов и прочие похожие поверхности.

Вот все что касается оптимизации карты под простое небо коробкой. Если не выполнить этих простых двух мер, то при большой по размеру карте, время компиляции может стать очень большим. Согласитесь, есть разница сколько ждать: 1,5 часа или 40 минут.
Выбираем картинку неба
Как уже говорилось выше, само небо — прозрачное, а игрок видит спроецированные на воображаемый куб 6 картинок неба.
Картинки с изображениями неба лежат в директории «cstrike\gfx\env..» и имеют формат TGA 24-bit и размеры 256х256 пикселей. Также возможно использование картинок в форматах PCX и BMP 8-bit, но они нужны только для игры на старых-престарых видеокартах без 3D-ускорителя. Все современные видеокарты имеют ускоритель, поэтому форматы BMP и PCX использовать не нужно.
Так как картинки накладываются на стороны куба, то всего картинок неба — 6. Названия картинок имеют следующий формат:
skynameRT.tga — правая картинка (от англ. right)
skynameFT.tga — передняя картинка (от англ. front)
skynameLF.tga — левая картинка (от англ. left)
skynameBK.tga — задняя картинка (от англ. back)
skynameUP.tga — верхняя картинка (от англ. up)
skynameDN.tga — нижняя картинка (от англ. down)
где skyname — это любая комбинация букв и цифр, обозначающая название неба.
Каждая из этих картинок «нарисована» в специальной программе (их несколько) довольно хитрым образом :) — если приставить их друг к другу, то они образуют замкнутое пространство (единый пейзаж). Следует заметить, что вид этих картинок в игре никак не зависит от формы неба (SKY-брашей). Просто там, где игрок видит SKY-браши, он видит небо (спроецированные на удаленный воображаемый куб картинки).
Указываем название неба
Итак, выберите понравившуюся картинку неба и запомните ее название. Отбросьте 2 ПОСЛЕДНИЕ БУКВЫ (RT, FT, LF, BK, UP, DN).
В редакторе вызовите окно с общими свойствами карты «Map\Map properties...». И впишите название неба в параметр environment map (см. рис. ниже). БЕЗ ПОСЛЕДНИХ ДВУХ БУКВ!
Ниже мы записали название des — это небо от DE_DUST.

А вот так наша карта будет выглядеть в игре:

Рекомендации по выбору картинки неба
Старайтесь подбирать небо под архитектуру и цвет основных текстур карты. Например, если карта светлая и на ней есть горы, то и картинку следует выбрать с горами и светлым небом. Если действия на карте разворачиваются ночью, в городе, то и небо на картинке должно быть ночным и т.п.
Теперь остается разместить источник света light_environment внутри карты, т.е. под колпаком из SKY-брашей и запустить компиляцию.
Недостатки неба-коробки:
[–] можно упасть за пределы карты, если дополнительно не использовать CLIP-браши, ограничивающие передвижение, или если небо идет не вплотную к карте;
[–] компилятор HLVIS оптимизирует визуальную часть карты дольше из-за просчета лишних clipnode-плоскостей снаружи карты;
[–] время компиляции возрастает из-за просчета освещения внешних (невидимых в игре) поверхностей объектов;
[–] бОльший размер готовой карты
Достоинства неба-коробки:
[+] быстрое изготовление
[+] Вы никогда не столкнетесь со страшной :) ошибкой LEAK
[+] При условии выполнения двух пунктов по оптимизации карты с небом-коробкой большинство недостатков исчезают
Как видите, достоинств несколько и довольно весомых, однако, если Вы не сделаете оптимизацию карты, то 4 недостатка окажутся гораздо весомее. В принципе можно утвержадать, что небо коробкой — это плохо, но для простых и небольших карт оно вполне приемлимо. На крупных же картах мы рекомендуем создавать более сложное, но и более правильное небо.
Правильное небо
В данной статье мы рассмотрим способ создания правильного и наиболее грамотного неба для Half-Life (CS) карт. Сложное (правильное) небо обладает рядом преимуществ перед простым небом, построенным коробкой вокруг карты. Главные из них — это меньшее время компиляции и более высокий FPS на карте.
Для создания правильного неба используется все те же SKY-браши, т.е. обычные браши, окрашенные со всех сторон текстурой неба SKY. Давайте рассмотрим создание правильного неба для карты, чья форма немного более сложная, нежели простой прямоугольник (см. рис. ниже).

Небо начнем создавать с боковых сторон. Будем строить SKY-браши по периметру карты (см. рис. ниже).

Готово (см. рис. ниже). Высота SKY-брашей выбирается произвольно. Она может быть и 384, и 512, и больше юнитов, но для нашего же удобства она должна быть одинакова для всех боковых SKY-брашей. Также желательно, чтобы игроки не бились об небо головами :)

Обратите внимание, что отверстие в центре карты также необходимо закрыть SKY-брашем СНИЗУ (см. рис. ниже), который по длине и ширине точно соответствует отверстию. Мы же помним, что небо должно полностью ограждать карту от «внешнего вакуума». Вспомните наши разговоры про плотно прилегающую к краям крышку сковородки в прошлой статье :) Дырок и щелей быть не должно, иначе возникнет ошибка LEAK.

Отверстие в центре закрыли. Теперь необходимо закрыть верх карты. Делаем это при помощи двух довольно больших SKY-брашей (см. рис. ниже).

На этом можно было бы остановиться, т.к. небо само по себе уже готово, но давайте еще ограничим передвижение игрока, чтобы он не мог упасть в центральное отверстие. Для этого на месте отверстия построим CLIP-браш, т.е. обычный браш, окрашенный со всех сторон спец. текстурой CLIP. Такие браши в игре невидимы, однако игрок сквозь них пройти не может и соответственно не может упасть в дыру (см. рис. ниже).
CLIP-браш по размерам равен отверстию, он начинается от верхних сторон бортиков и продолжается до самого неба, но не «входит» в него.

Теперь остается разместить источник света light_environment внутри карты, т.е. под колпаком из SKY-брашей, а также указать название картинки неба в меню «Map\Map properties...» в параметре environment map. Как правильно указывать название неба, мы рассказали в прошлой статье про простое небо коробкой.
И вот результат (см. рис. ниже). Как видите, картинки неба накладываются не на изготовленные SKY-браши, а на некий большой удаленный (воображаемый) куб, который для всех карт одинаков.

Преимущества сложного неба над простым
Мы провели простой эксперимент: создали на этой же карте вместо правильного неба — простое (коробкой) и затем сравнили log-файлы, в которые записывается ход выполнения компиляции, а также подробная статистика BSP-файла (если использовать параметр -chart). Вот какие результаты мы получили (см. рис. ниже).

Кратко поясним, что означают эти параметры.
Время компиляции — тут все ясно, компиляция карты с правильным небом проходит в два раза быстрее .... внушаитъ :)
Просчет освещения — на карте с небом-коробкой дополнительно просчитываются все поверхности снаружи карты, что приводит к существенному увеличению времени компиляции даже на небольших картах.
Clipnodes — количество плоскостей, ограничивающих перемещение игрока. Не стоит путать их с помещенным CLIP-брашем, это не совсем тоже самое, хотя CLIP-браши также добавляют clipnodes в карту. По количеству clipnodes можно судить о проделанной компилятором HLVIS работы. Чем меньше clipnodes, тем меньше работы было у HLVIS.
Faces — количество поверхностей. Чем их меньше, тем меньше работы компилятору HLRAD, просчитывающему освещение.
Patches — количество патчей. При компиляции карты все видимые поверхности объектов разбиваются на патчи определенного размера. По умолчанию размер патча составляет 64x64 юнита, однако его можно изменить параметром -chop. Чем меньше патчей, тем лучше. Если патчей слишком много (более 65535), то возникнет ошибка MAX_PATCHES. Поэтому необходимо следить за количеством патчей и, если потребуется, уменьшить их.
Lightdata — параметр, показывающий суммарный объем информации об освещении карты.
Visdata — параметр, показывающий суммарный объем визуальной информации карты.
Как видите, время сэкономленное на построении простого неба, вместо сложного, расходуется при компиляции. Отсюда правило :) — для больших карт стройте всегда правильное небо, а для маленьких можно обойтись небом-коробкой, но только не забудьте оптимизировать карту, как это написано в прошлой статье.
Названия стандартных картинок неба
Ниже приведен полный список названий картинок неба для стандартных CS-карт. Название необходимо вписывать в меню «Map/Map properties» в параметр environment map.
Названия картинок неба стандартных карт
backalley
cs_747 cs_backalley de_vegas

badlands
de_inferno

blue
as_oilrig

cx
de_chateau de_piranesi

city1
cs_assault

cliff
cs_militia

de_storm
de_storm

des
de_dust de_dust2

desert
de_nuke

doom 1
de_aztec

dusk
de_cbble de_prodigy

green
cs_italy

grnplsnt
cs_siege

hav
cs_havana

morningdew
cs_estate

office
cs_office

snow
as_tundra

snowlake_
de_survivor

tornsky
de_torn

trainyard
de_train

tsccity_
de_vertigo
