Вспомогательное освещение

From Valve Developer Community
Jump to: navigation, search
English (en)Русский (ru)
... Icon-Important.png

Этот учебник расскажет о самых продвинутых способах освещения, которые используются на картах Source. Если вы новичок в работе с Hammer, прочтите сначала добавление света. Здесь же будут раскрыты все возможные способы создания освещения, а также настройки игры света. Всё это будет сопровождаться серией углублённых мини-статей по теме.

Энтити освещения

Это - список сущностей физического освещения в той или иной форме. Заголовок каждого раздела ссылается на страницу данной сущности.

light

Light.png
Int light.jpg

Статичный, невидимый, всенаправленный источник света. Может включаться и выключаться через систему ввода-вывода (обратите внимание, что это усложнит вашу карту освещенности, и при компилировании будут сохраняться значения для всех комбинаций вкл/выкл, что скажется на загрузке памяти). Можно делать шаблоны с эффектами, но нельзя перемещать с места на место. Свет отбрасывается во все направления из точки энтити. Яркость зависит от установленного значения рассеивания. Данная сущность является самой простой из освещения и широко используется на картах.

light_spot

Light spot.gif
Int spot.jpg

Статичный, направленный свет. Может светить в любом направлении и содержит элементы управления свойствами формы и конуса. Также может быть включен и выключен с помощью системы ввода/вывода, однако, переключаемый light_spot может вызвать ошибки карты освещенности. Легко имитирует реальные источники света и рекомендуется для широкого применения.

Note.pngNote:Вполне возможно, что для достижения видимых результатов яркость этой сущности придётся значительно увеличить. Например, яркость уличных фонарей должна быть 3000-4000.

light_environment

Light environment.png
Текстура скайбокса.
Представление в Хаммере и игре.

Изображает солнечный свет, направленный в одну сторону. Направление задаётся числами внутри энтити. Ключевым является то, что свет исходит из текстуры tools/toolsskybox. Первое значение - Brightness (яркость), задаёт направление освещения. Это приблизительно прямые солнечные лучи. Второе значение - Ambient (окружение), задает рассеянный свет с неба. Он падает на каждую открытую небу поверхность. В основном, цвет и яркость теней на листьях.

Если вы не хотите придумывать свои значения для этой сущности, то вот список официальных значений, используемых для каждого скайбокса в играх Valve.

Обычно, на карте требуется только одна сущность light_environment. Если вы разместите несколько таких сущностей, Vrad будет брать значения из первой найденной.

point_spotlight, npc_spotlight

Int point.jpg

Прямой луч света для эффекта прожектора. Визуальные эффекты включают блики вокруг источника света, направленный яркий луч, и динамическое освещение земли. Не перемещается самостоятельно, но свет и его цель могут быть привязаны к двигающейся сущности. Также, npc_spotlight может использоваться для создания визуального эффекта, когда светом управляет интеллект NPC. Этот источник динамического света весьма нагружает графику, и должен использоваться бережно.

Связанные элементы

Это - список всех тем, связанных с энтитями, которые не испускают свет. Несмотря на это, они нужны для эффектов, связанных с освещением. Если они управляются освещением энтить или теней antlion's, то обязательно попадают под эффекты освещения.

env_sun

Эффект env_sun.

Зачастую неправильно трактуется как солнечный свет, по сути являясь эффектом наложения бликов на небе, который выглядит и действует как солнце. Он вообще не излучает свет, но часто используется вместе с light_environment для создания эффекта освещения.

env_sprite

Еще одна сущность, которая не излучает свет. Env_sprite в основном используется для лёгкого свечения и различных ярких засветов. В Episode 1, в конце карты используется env_sprite, изображающий большую залитую светом площадку. Это пример того, как env_sprite может быть использован в качестве яркой заливки светом из-за пределов тёмного пространства, и вместе с тем может задействовать технологию HDR. Эта карта находится в конце Ep1 и называется ep1_c17_06_d.

shadow_control

Shadow control.png

Управляет всеми динамическими тенями в игре. В эту категорию попадают тени от всех движущиеся объектов (NPC и физических энтить). Выравнивает тени согласно с освещением. Однонаправленный характер теней может стать проблемой, но триггеры помогут это исправить. В Left 4 Dead Left 4 Dead, Portal 2 Portal 2 и Alien Swarm Alien Swarm, направление тени рассчитывается на уровне каждой энтити, и диктуется ближайшим от неё освещением. Но не в модах Source2006/2007, если для вашего мода не применяются Dynamic RTT shadow angles in Source 2007.

Shadow_control предназначен для использования вместе с light_environment; и поэтому имеет ограничение в использовании с light, light_spot или light_dynamic.

  • Shadow_control рассчитывает тени только от одного источника света, и работать будет только один shadow_control, так что объект сможет отбрасывать только одну динамическую тень.
  • Shadow_control рассчитывает тени только от 'параллельных' солнечных лучей (например, солнце / луна); игнорирует лучи от точечных источников света (например, лампы).
  • Shadow_control не влияет на Lightmap (и наоборот).

Динамические тени не сочетаются с тонкими тенями Lightmap.

  • Подвижные объекты (большинство моделей: NPC, prop_phys, weapon_, prop_vehicle, prop_dynamic, и т.д.) никогда не отбрасывают теней карты освещенности; но отбрасывают динамические (когда включено shadow_control). Только браши и объекты prop_static не отбрасывают динамических теней; но отбрасывают тени карты освещенности.
  • Величина Lightmap не влияет на резкость/рассеивание динамических теней (шкала карты освещения примерно равна 1 luxel/unit).
  • Динамические тени и тени карты освещения от одного источника света не сливаются, но пересекаются или "удваиваются".
  • См. также Info_no_dynamic_shadow.
  • Динамические тени падают только на браши.

Vrad

Является частью компиляции, создаёт все световые эффекты на карте. Будучи самым длинным процессом компиляции, он должен запускаться первым. Невозможность оценить световые эффекты опытным путём заставляет прибегать к такой утомительной процедуре, которая одна даёт правильное освещение. Статья компиляции в Rad будет размещена позже. Сейчас же приоритетом должно стать ознакомление с его возможностями и настройками.

Методы

Они раскрывают, как использовать указанные элементы для создания эффективного освещения. Ранее было преподано много практических знаний. Но знание бесполезно, если оно используется ненадлежащим образом. Следующие разделы покажут вам, как использовать всю полноту информации, чтобы создавать лучшее освещение на ваших картах.

Цветовая температура

Обычно, яркость цвета RGB выставляется на 255 255 255, но в реальности ярко-белое освещение встречается редко. В зависимости от "температуры чёрного тела", оно будет излучать цвета где-то между оранжевым "красным" (именуется "тёплым", хотя его температура на самом деле ниже) и ультрафиолетовым "синим" (именуемым "холодным"), как точно показано на этой шкале. Вы можете взять эту статью в качестве ссылки на ваш способ создания света, или использовать стандартные карты Valve, где уже выставлены значения RGB для "теплого" света лампы накаливания 254 216 146, "холодного" света флюоресцентной лампы 159 237 215, и обычного сочетания ледяного света 147 226 240.

Психология освещения

Существует много цветовых комбинаций. Здесь нежный зелёный оттенок придаёт болезненный вид.

Было доказано, что спектр холодного освещения "температуры чёрного тела" (см. выше) угнетает игроков, заставляя чувствовать себя неловко, а иногда и болезненно, даже если и присутствует тёплый цвет.

Эта подсознательная эмоциональная реакция может быть использована для создания определённого настроения игрока. Например, комнаты с люминесцентными лампами будут изображать ужасы, а яркие глоу-лампы - спокойную обстановку.

Например, на первой карте Half-Life 2 есть коридор, где охранник ведёт игрока на допрос (типа того). Исследование освещения покажет, что Valve постоянно сохраняет психологический эффект. Коридор начинается с обычной лампы накаливания (тёплое свечение), за которым идёт лампа дневного света (с неприятным свечением). Такая комбинация довольно редко встречается в реальной жизни, потому что это означает, что архитектор передумал строить коридор, или у электрика закончились нормальные лампы. Вероятнее всего, Valve (или Комбайны) хотели добиться эффекта перехода между опасной и безопасной зонами.

Перед тем, как зайти в одну из камер, игрок видит тревожную сцену с участием гражданина, объясняющего своё затруднительное положение. Здесь на потолке светит лампа накаливания. Скорее всего это потому, что дневной свет будет некомфортен для такого объёма. (Флуоресцентный свет используется в основном для коридоров и больших пространств.) Тем не менее, чуть в стороне расположен бестелесный light_spot, который придаёт определённое настроение сцене.

Помимо вышеперечисленных прямых эффектов, в создании определённого настроения также может помочь теория цвета. Принимаемые в качестве примера лампы дневного света, тем не менее имеют неприятное холодное ощущение, поскольку неестественное мягкое синее свечение вызывает чувство холодной пустоты и изоляции.

Хотя, цвет - не единственный эффект. Расстояние и освещённость также вносят свою лепту. Освещённые комнаты кажутся более безопасными, потому что хорошо просматриваются, а комнаты с постоянно мерцающим светом вызывают неприятные чувства, поскольку большая часть пространства скрыта от игрока. Также, если в комнате хорошо видны все углы, кроме одного, то именно этот угол станет потенциальной угрозой, и будет находиться под пристальным вниманием игроков.

Используйте эту информацию, чтобы стать дизайнером уровня. Она поможет создавать как карты ужасов, так и карты для детей, но не старайтесь пугать детей до икоты: Бог вас покарает. Освещение не просто делает мир видимым, оно определяет его.

Правдоподобный источник света

Создание правдоподобного источника света может стать нетривиальной задачей. Простое размещение сущности, излучающей свет, ничего не даёт в плане того, зачем оно там и почему. Правильный источник света - это такой источник, который выглядит на карте как родной. Зачастую хороший свет состоит из нескольких энтить. Обычно их две: одна - источник света, а другая - лампа (берётся prop_static или func_detail с соответствующей текстурой).

Обычная лампа.

Первый шаг состоит в том, чтобы определиться с источником света. Найдите нужную текстуру или модель. Фильтр по словам "light" или "lamp" в браузере текстур или моделей даст хороший результат. Теперь выберите лампу, подходящую по обстановке (т.е. промышленные для промышленной сцены) и разместите в комнате модель или текстуру. Для нашего примера выберите лампу, показанную справа, и поставьте её на карту как prop_static.

Следующим шагом будет создание света. Посмотрите на выбранный источник и спросите себя: будет ли свет исходить из-за тонированного стекла, и не является ли он узко направленным лучом. Задействуйте разные энтити, и задайте им соответствующие свойства, которые создадут нужный эффект. В данном примере свет будет направленным, так что берём light_spot. Далее, этот будет интенсивный свет, поэтому выставляем яркость на 1000. Теперь посмотрим на цвет источника. Стекло не тонировано, а излучаемый поток в реальном мире получается интенсивным за счёт отражающих поверхностей внутри, поэтому оставим значение температуры на 255 255 255. Теперь отрегулируйте линию луча так, как если бы он исходил из prop_static.

Теперь может возникнуть проблема. Если вы поместили источник света внутри модели/браша, она может блокировать свет (который будет освещать только модель). Чтобы избежать этого, зайдите в свойства prop_static, и напротив строки "Disable shadows" поставьте "Yes". (Если источником света является браш, преобразуйте его в func_brush и измените его свойства точно также. Это предотвратит блокировку источника света).

Теперь, когда у вас есть рабочие материалы, неплохо будет сгруппировать их (а возможно, и создать из них префабы, чтобы вставлять на другие карты) таким образом, чтобы они всегда оставались вместе.

Еще одним способом создания высококачественного источника света, неотличимого от настоящего, и не идущего на компромиссы с производительностью, будет комбинация света и light_spot. Поместите light_spot так, как показано выше, но отодвиньте его примерно на 50 единиц от модели. Создайте свет с яркостью порядка 50 и того же цвета, как light_spot. Это придаст свечению правильную форму, чего зачастую одному light_spot не под силу.

Статичное освещение против динамического

У статичных источников света есть значительное преимущество перед динамическими. Статичные источники не дают дополнительной нагрузки на графику, поэтому они используются для быстрой прорисовки карты. Динамический свет весьма сильно нагружает движок, и может замедлить вашу карту. Важно понимать, где и как использовать тот или иной тип освещения.

Во-первых, статичное освещение рассчитывается во время VRAD-компиляции; поэтому, в игре оно просто визуализируется и не влияет на производительность. Стандартное статичное освещение - это light, light_spot и light_environment, но есть условия, которые могут это изменить. Проблема со статичным освещением в том, что оно - статично. И будучи таковым, оно не даст каких-либо специальных эффектов.

Динамическое же освещение представлено в двух вариантах. Существует переключаемое освещение, и динамически рассчитываемый свет. Каждый из них по-своему влияет на обработку, но оба они весьма нагружают графику, и должны использоваться экономно.

Переключаемое освещение похоже на статическое тем, что информацию о карте освещённости оно собирает в процессе компиляции RAD. Свет делают переключаемым с помощью трёх вещей: ему дают имя, ему дают стиль, ему задают шаблон. Обычным освещением, которое не поддерживает динамические эффекты, являются переключаемые огни: это light и light_spot, но отнюдь не light_environment. Переключаемый свет использует две карты освещенности: включено и выключено. Переключаемое освещение чередует или смешивает карты освещённости, что позволяет создавать их только две. Это даёт статическому освещению все преимущества, позволяя быть частично динамическим. Допустим, у вас есть два переключаемых источника света, которые падают на одну поверхность, сколько необходимо карт освещённости?

  • Light 1 & 2 ВКЛ
  • Light 1 ВКЛ, 2 ВЫКЛ
  • Light 1 ВЫКЛ, 2 ВКЛ
  • Light 1 & 2 ВЫКЛ

В целом, это четыре состояния. Вы добавили третью переключаемую лампу, и образовали восемь карт освещённости. Здесь возникает проблема с освещением, ибо для карты освещённости слишком тяжело создавать все возможные состояния. Дело в том, что существует жёстко запрограммированный лимит: для одной поверхности вы можете создавать только две переключаемых лампочки. Есть некоторое решение: для одной поверхности вы можете сделать 50 переключаемых лампочек с одним и тем же именем; тем не менее, нельзя создавать более 32 поименованных источников света. Переключаемое освещение увеличивает время запуска RAD, увеличивает размер файла, а также нагружает систему во время переключения; однако, в любом состоянии оно оказывает не большее воздействие, чем статичное освещение.

Истинное динамическое освещение - это то, что присуще самой энтите, и связано со свойствами её родителя (Parent). Энтити с встроенным динамическим эффектом - light_dynamic и point_spot. Point_spot имеет уникальный флажок, который переводит его в динамический или статический режим освещения, и по-умолчанию включен динамический режим, что может застать вас врасплох. Динамический процесс освещения полностью выполняется во время игры, что означает, что он не влияет на компилятор RAD и размер файла, но тормозит во время игры на карте. Система тормозит потому, что динамический свет должен постоянно прорисовываться. Такие энтити должны использоваться только тогда, когда источник света движется, если же свет не предназначен для движения, то он не должен быть истинно динамическим. Если он предназначен для включения и выключения, то должен быть переключаемым. Ни какое перемещение не должно иметь статичный свет. При неправильном использовании, затраты на динамическое освещение будут перевешивать его преимущества. Динамическое освещение должно использоваться гораздо более экономно, чем переключаемое освещение. Еще одной слабой стороной динамического освещения является то, что для упрощения вычислений оно не запускает процессы отражения и диффузии, что даёт резкий свет.

Статическое освещение легко для движка, и даёт хорошую детализацию, динамическое же освещение может перемещаться и изменяться, но при этом нагружается графика и возникает потеря детализации. Самым простым способом проверить вашу карту на загрузку динамическим освещением, является команда +Showbudget. Она позволяет выяснить, когда на вашей карте слишком много световых эффектов. Добротное использование динамического освещения может весьма улучшить вашу карту, и одновременно тормозить её.

Быстрый и эффективный RAD

Процесс компиляции RAD может проходить очень долго, что станет тормозом в процессе разработки карты. Решить это можно следующим образом:

  • Выключите компиляцию RAD, и включайте её только тогда, когда необходимо настроить и проверить освещение карты.
  • Используйте инструмент Cordon, чтобы компилировать только отдельные участки карты. (Если вы используете light_environment, создайте его копию, и поместите в пределах компилируемого участка карты.)
  • Внесите несколько изменений сразу. Зачем настраивать только пару точек освещения, когда их можно настроить в разных частях карты, и всё это сразу скомпилировать?
  • Стандартизируйте ваше освещение. Установите значения RGB и цвета для каждого типа освещения вашего уровня (напр., флуоресцентных ламп или прожекторов, и т.д.), чтобы каждый экземпляр имел одинаковые исходные значения. Тогда, вместо того, чтобы для каждого источника света придумывать свои значения, вам нужно всего лишь подправить некоторые значения для получения нужного эффекта (напр., в большой комнате понадобится много света определённого типа).
  • Используйте любой свободный компьютер в доме. Установите на них SDK, и компилируйте там ваше освещение. Пока они компилируют, вы будете продолжать рисовать карту.
    • Автоматизируйте синхронизацию ваших файлов с помощью программы Dropbox или SparkleShare, чтобы упростить процесс.

Заключение

Мы раскрыли основы эффектов освещения в стандартных играх Source. С выпуском Episode Two могут быть добавлены новые эффекты.

См. также