Свет - это електромагнитное излучение, воспринимаемое глазом. Его можно разделить на два типа: естественный и искуственный свет. В Half-Life, как и в реальной жизни, имеются оба варианта.
С этого заумного вступления я и решил начать данный туториал, посвященый свету.
Невозможно ничего себе представить без света. Свет есть везде, и это не требует никаких доказательств. Поэтому все карты в играх так же должны быть освещены, пусть даже тусклым источником, помигивающим в темноте.
В жизни мы никогда не задумываемся над светом, но в картостроении без этого не обойтись. Можно, конечно, ограничиться только установкой на карту источников света, и настройкой их параметров. Но это, во-первых, будет зачастую смотреться в игре отстойно, а во-вторых, у игрока не возникнет ощущение реальности. Поэтому, маппер должен не просто установить и настроить источник света на карте, он так же должен позаботится о создании нужной атмосферы на карте с помощью света!
Как вам уже известно, свет просчитывается во время компиляции карты, поэтому у компилятора hlrad есть множество параметров, с помощью которых можно управлять различными свойствами света, например, уровнем световых отражений, или минимальным порогом освещенности поверхностей. Подробнее о возможных параметрах компилятора hlrad можно узнать из туториала "Параметры ZHLT компиляторов".
Многого из реальной жизни, конечно-же, невозможно реализовать в игре. К этому относится, например, количество отражений света. В реальной жизни количество отражений света бесконечно, а при компиляции карты мы можем указать лишь какое-то фиксированное значение данного свойства. Поэтому мапперам приходится идти на всеразличные ухищрения, чтобы создать как можно более красивое и реалистичное освещение.
Теперь, после небольшого введения, давайте перейдем к рассмотрению того, каким образом на карту устанавливаются источники света и какие у них имеются параметры.
Первым делом давайте разберемся с самым простым источником света - точечной энтитей ligth.
Для установки точечного источника света, просто поместите в нужное место на карте энтити light. В игре, из этой точки будет во все стороны распространяться свет.
Просто поместить на карту источник света - не гениальность - тупость. Ведь в реальности не бывает света, исходящего из неоткуда. Движку, конечно, плевать куда вы поместили источник света, но, как говорилось выше, игрок должен ощущать как можно большую реальность, играя на вашей карте. Это, кстати, касается не только источников света...
При помещении на карту источника света, позаботьтесь о том, чтобы была реальная обстанока. Так как сам источник света невидим, то маппер должен хоть как то указать на то, откуда-же берется свет.
Энтити light является искуственным источником света, поэтому, как и в реале, будет правильным создать и светило. К счастью вариантов имеется множество: лампы, фонари, огонь и т.д.
Итак, установив источник света light на карту, необходимо настроить его параметры:
Target - цель лампочки. Если она указана, то лампочка будет работать подобно прожектору. В противном случае, свет будет исходить во все стороны от источника, как обычно. Name - имя объекта. С помощью имени лампочку можно включать/выключать. Brightness - цвет и яркость лампочки, в формате "RRR GGG BBB Яркость". Первое значение (RRR) определяет красный цветовой оттенок лампочки, второе значение (GGG) - зеленый оттенок, и третье (BBB) - синий оттенок. Четвертое значение определяет яркость лампочки. Appearance - стиль лампочки (мерцающая, мигающая, пульсирующая...). Custom appearance - в этом параметре вы можете определить пульсирование лампочки, вписав латинские буквы от "A" до "Z" ("A" - самый темный, "Z" - самый светлый). При использовании данного параметра необходимо так же указать имя лампочки (независимо от того, будете ли вы его использовать). Пример: если в качестве значения параметра Custom appearance указать "abcdefedcba" (без кавычек), то лампочка будет пульсировать от темного света, до яркого, и обратно.
Флаги: Initially dark - если этот флаг отмечен, то вначале лампочка будет выключена.
Примечание: если в параметре Brightness вы укажите значение "0 0 0 0", то на самом деле значение цвета будет равно "255 255 255", и яркость у лампочки будет средней, а не нулевой.
Второй тип света - это окружающий свет, который можно установить на карту с помощью энтити light_environment. Важно заметить, что свет, определенный энтитей light_environment, проэцируется с неба. Поэтому если вы хотите использовать данный тип света на своей карте, не забудьте позаботиться и о небе.
light_environment является бесконечно удаленным источником света, поэтому вы не можете регулировать его положение в пространстве. То есть, в какой бы точке карты вы не установили энтити light_environment, это не повлияет на окружающий свет.
Параметры light_environment довольно просты:
Pitch yaw roll - угол, под которым падает свет на карту. Pitch - угол отклонения направления света от горизонтали (значение "-90"). Значение больше "0" - отклонение вверх, а меньше "0" - вниз. Brightness - цвет и яркость света (в таком-же формате как и у простого light).
Последний имеющийся в Half-Life тип света - направленный (энтити light_spot).
Многие не пользуются данным типом света, потому что считают энтити light_spot и ее параметры чем-то невероятно сложным. На самом деле это не так - нужно только один раз понять как это работает, и тогда в дальнейшем у вас не возникнет никаких сложностей с использованием направленного света.
Name - имя объекта. Target - имя объекта info_target, на который будет светить лампочка. Inner (bright) angle - угол внутреннего конуса светового луча, который будет сформирован вокруг оси Pitch. Свет в этой области будет самым ярким. Outer (fading) angle - угол внешнего конуса светового луча, который будет сформирован вокруг оси Pitch. Свет в этой области будет темнее. Pitch - угол отклонения светового луча от горизонтали. Значение больше "0" - отклонение вверх, а меньше "0" - вниз. Brightness - цвет и яркость лампочки. Is sky - тип объекта. Есть два варианта: No и Yes. В первом случае объект будет как обычная лампочка (с направленным светом), а во втором - light_spot будет определять свойства окружающего света. Appearance - тип лампочки (мерцающая, мигающая, пульсирующая...). Custom appearance - в этом параметре вы можете определить пульсирование лампочки, вписав латинские буквы от "A" до "Z" (как было описано в случае с простой лампочкой).
Флаги: Initially dark - если этот флаг отмечен, то вначале лампочка будет выключена.
Пример направленного света:
Для примера возьмем источник направленного света с такими параметрами:
В данном случае получится свет примерно такого вида:
Зеленая линия - это направляющая ось, заданная параметром Pitch. Конус, сформированный синими линиями, определен параметром Inner (bright) angle. Конус, сформированный красными линиями, определен параметром Outer (fading) angle.
И напоследок остается рассказать про текстурный свет.
Многие мапперы (особенно начинающие) не знают, что для каждой текустуры можно определить цвет и яркость света, исходящего от нее. Для этого необходимо указать компиляторам имена текстур, и значения света для них. Это можно сделать двумя способами.
Первый способ заключается в следующем: создайте в папке с компиляторами файл с именем lights.rad, и впишите в него строки такого формата:
texturename RRR GGG BBB Brightness
texturename - имя текстуры. RRR GGG BBB Brightness - цвет и яркость света, излучаемого текстурой (подобно параметру Brightness у энтить).
Каждую текстуру и определение ее света необходимо писать в новой строке.
Теперь, при компиляции карты, все текстуры, чьи имена указаны в lights.rad, будут обрабатываться таким образом, что в игре от них будет исходить свет указанного цвета и яркости.
Второй способ указания компиляторам имена текстур и значения света для них - это создание на карте точечной энтити info_texlights, в который необходимо добавлять новые параметры. Название параметра - это имя текстуры, для которой необходимо изменить значение света, а значение параметра - это значение света для указанной текстуры.
Для того, чтобы добавить новые параметры в объект info_texlights, необходимо отключить кнопку Smart edit в окне Object Properties. Далее, жмите кнопку Add, после чего появится меню с параметрами Key и Value, где Key - это название параметра, а Value - значение.
Примечание: если энтити info_texlights отсутствует в вашем .fgd файле, то ее необходимо добавить туда вручную. Для этого откройте .fgd файл в каком-нибудь текстовом редакторе, и добавьте в конце следующую строку: