Light spot (Source)

Материал из CSM Wiki
Перейти к навигации Перейти к поиску

Оригинал Constant-Linear-Quadratic Falloff, Lighting, Intermediate Lighting, Light spot.

Описание

Объект light_spot используется для создания направленного источника освещения, создающего Lightmap-тени во время компиляции карты. Такой источник освещения не создаёт динамические тени в игре.

Особенности использования

  • Этот объект обновляется в каждом раунде. Это означает что любые изменения объекта НЕ будут наследоваться в последующих раундах.
  • Объект должен быть установлен там, где будет использоваться.
  • Если у объекта нет имени, то в начале каждого раунда он удаляется. Если у объекта есть имя, то с его помощью можно включать/выключать его собственные Lightmap-тени и освещение.
  • Объект можно перемещать, но Lightmap-тени, созданные при компиляции карты, останутся неизменными.

Ошибки

Не обнаружены.

Заметки

Для отключения всех Lightmap-теней можно использовать консольную команду "mat_fullbright 1". Эта команда вызывается автоматически во время игры если на карте не установлено ни одного источника освещения.

Для этого объекта всегда используется опция "-StaticPropLighting" для компилятора VRAD, поэтому этот источник освещения всегда оставляет на объектах prop_static вершинное освещение (Vertex Lighting).

Расстановка на карте

При неправильной расстановке источников освещения (ИО), компилятор VRAD во время компиляции карты может выдать следующее предупреждение: WARNING: Too many light styles on a face (X,Y,Z)

Это означает что, на какую-то Brush-поверхность светит сразу несколько ИО с разными стилями. Подобные случаи приводят к тому, что какие-то ИО будут игнорироваться компилятором или на месте проблемы появится графический артефакт, который может испортить внешний вид карты. Чтобы избежать подобных ошибок на ваших картах, необходимо знать в каких случаях ИО добавляет новый стиль на Brush-поверхность, а к в каких – нет.

Во-первых, для любой Brush-поверхности движком Source разрешено использовать не более 8 стилей света.

Во-вторых, нужно запомнить, что если на карте установлен хотя бы один ИО (например: light, light_environment, light_spot или другие), то на любой Brush-поверхности будет как минимум один стиль света. Совершенно не важно, светит этот ИО на эти Brush-поверхности или нет – всё равно, на каждой из них будет как минимум один стиль света.

В-третьих, если какой-либо ИО светит на какую-либо Brush-поверхность и у этого ИО нет имени, то такой ИО добавляет на эту Brush-поверхность только один стиль света. Но, если у этого ИО будет имя и/или значение свойства "Appearance" не будет равно "Normal", то он будет добавлять на Brush-поверхность сразу два стиля света.

В-четвёртых, если несколько ИО имеют одинаковые значения свойств "Name", "Appearance" и "Custom Appearance", то эти ИО объединяются в группу и обрабатываются как один ИО.

Несколько примеров правильной расстановки ИО:

  • 1. Множество ИО (больше 8) без имён. Свойство "Appearance" = "Normal". В итоге: на каждой Brush-поверхности максимум 2 стиля света.
  • 2. Множество ИО (больше 4) без имён. Свойство "Appearance" = <у всех одинаковое>. В итоге: на каждой Brush-поверхности максимум 3 стиля света.
  • 3. Множество ИО (больше 4) с одинаковыми именами. В итоге: на каждой Brush-поверхности максимум 3 стиля света.
  • 4. Три ИО с разными именами и/или с разными свойствами "Appearance". В итоге: на каждой Brush-поверхности максимум 7 стилей света.

Несколько примеров НЕправильной расстановки ИО:

  • 1. Четыре и более ИО с разными именами и/или с разными свойствами "Appearance". В итоге: на каждой Brush-поверхности минимум 9 стилей света.

Параметры

  • Entity to Point at – имя объекта на карте в направлении которого будет повернут этот объект light_spot во время компиляции карты; в качестве цели для этого объекта удобно использовать объект info_null, так как он удаляется в начале каждого раунда и не обрабатывается во время игры;
  • Pitch Yaw Roll (Y Z X) – направление в котором "смотрит" объект; используется только угол поворота по оси Z; в качестве второго угла поворота используется значение свойства "Pitch";
  • Pitch – угол поворота по оси X относительно самого объекта light_spot;
  • Brightness (R G B A) – <R G B ЯРКОСТЬ> цвет и яркость источника освещения; состоит из четырёх чисел – трёх составляющих цвета (R G B) и значения яркости; яркость указывается положительным или отрицательным числом, чем больше это число, тем больше яркость источника освещения; если яркость указана отрицательным числом, то источник освещения будет затемнять, а не освещать; в игре по умолчанию яркость всех источников освещения устанавливается меньше примерно в два раза (m) чем значение яркости (ЯРКОСТЬ), указанной в этом свойстве
  • HDR Brightness (R G B A) – <R G B ЯРКОСТЬ> цвет и яркость источника освещения в режиме HDR; по умолчанию используется значение "-1 -1 -1 1", которое указывает на то, что значение этого свойства выбирается равным значению свойства "Brightness"; (см. свойство "Brightness");
  • Inner Cone Angle – внутренний конус объекта; 90 - максимальное значение; если значение этого свойства равно значению свойства "Outer Cone Angle" и оба они равны 180, то этот источник освещения будет обработан как всенаправленный источник освещения – light, а так же значение свойства "Outer Cone Angle" будет игнорироваться;
  • Outer Cone Angle – внешний конус объекта; 90 - максимальное значение; если значение этого свойства равно значению свойства "Inner Cone Angle" и оба они равны 180, то этот источник освещения будет обработан как всенаправленный источник освещения – light, а так же значение свойства "Outer Cone Angle" будет игнорироваться;
  • Cone Focus – отвечает за плавность светового перехода между внутренним и внешним конусами; 1.0 – нормальный плавный переход; больше 1.0 – обрезает световое пятно со стороны внешнего конуса, делая его меньше в диаметре; меньше 1.0 – наращивает световое пятно со стороны внутреннего конуса, делая световое пятно больше в диаметре; 0 – игнорирует это значение и берёт значение по умолчанию, равное 1.0;
  • Constant – константная составляющая освещения; высокое значение этого свойства относительно "Linear" и "Quadratic" делает свет возле объекта более мягким и тусклым; используется только если значение свойства "50% Falloff Distance" равно нулю;
  • Linear – линейная составляющая освещения; высокое значение этого свойства относительно "Constant" и "Quadratic" выравнивает мягкость света вблизи объекта и вдалеке от объекта; используется только если значение свойства "50% Falloff Distance" равно нулю;
  • Quadratic – квадратичная составляющая освещения; высокое значение этого свойства относительно "Constant" и "Linear" делает свет возле объекта более резким и ярким, а свет вдалеке от объекта более тусклым; используется только если значение свойства "50% Falloff Distance" равно нулю;
  • 50% Falloff Distance – расстояние от объекта, на котором интенсивность его света равна половине от максимальной интенсивности; если значение этого свойства не равно нулю, то свойства "Constant", "Linear", "Quadratic" и "Maximum Cast Distance for Models" не будут использоваться;
  • 0% Falloff Distance – максимальное расстояние на которое излучается свет от объекта; 0 - значение этого свойства выбирается в два раза больше значения свойства "50% Falloff Distance"; используется только если значение свойства "50% Falloff Distance" НЕ равно нулю;
  • Appearance – готовые шаблоны яркости для источника освещения; если несколько источников освещения будут иметь одинаковые имена, то игра автоматически объединит для них это свойство, что не позволит задать для каждого из них свою собственную анимацию яркости; если установлено свойство "Custom Appearance", то это свойство не используется;
  • Custom Appearance – установить для источника освещения произвольный шаблон анимации яркости; шаблон яркости – это обычная строка состоящая из латинских букв от "a" до "z"; каждая буква шаблона означает яркость источника освещения относительно яркости, установленной в свойствах "Brightness" или "HDR Brightness"; "a" – нулевая яркость; "z" – максимальная яркость; например: строка "aeimquzuqmie" постепенно увеличит яркость источника освещения до максимума (z), а затем уменьшит её до минимума (a), после чего эта анимация будет повторяться снова и снова; скорость воспроизведения шаблона равна 10 букв в секунду; если несколько источников освещения будут иметь одинаковые имена, то игра автоматически объединит для них это свойство, что не позволит задать для каждого из них свою собственную анимацию яркости; если установлено это свойство, то свойство "Appearance" не используется; используется только если у объекта есть имя;
  • Max Cast Distance for Models – максимальное расстояние от объекта источника освещения, на котором он освещает Prop-объекты и игроков; 0 - это расстояние не ограничено; используется только если значение свойства "50% Falloff Distance" равно нулю.

Флаги

  • Initially OFF – источник освещения будет выключен в начале каждого раунда; используется только если у объекта есть имя.

Inputs

  • TurnOn – включить объект;
  • TurnOff – выключить объект;
  • Toggle – переключить состояние объекта (Включен/Выключен);
  • SetPattern <string> – установить новое значение свойства "Custom Appearance"; используется только если у объекта есть имя;
  • FadeToPattern <string> - установить новое значение свойства "Custom Appearance", но перед установкой сделать плавный переход от первой буквы старого шаблона до первой буквы нового шаблона, например: если старый шаблон был равен "m" (свет просто включен), а новый шаблон будет таким "znga", то будет выполнен плавный переход от буквы "m" до буквы "z" со скоростью 10 букв в секунду, а затем для источника освещения будет использоваться новый шаблон "znga"; используется только если у объекта есть имя.

Карта

  • 1) csssdk_light_spot.vmf
  • 2) csssdk_light_spot_2.vmf

Используются объекты

  • 1)
  • light_spot
  • func_button
  • func_detail
  • info_overlay
  • ambient_generic
  • prop_physics
  • logic_auto
  • 2)
  • light_spot
  • func_button
  • func_detail
  • info_overlay
  • ambient_generic
  • logic_auto
  • prop_static
  • point_spotlight
  • func_dustmotes

Описание карты

  • 1)

Карта выполнена в ночном стиле, чтобы было легче различались тени, созданные источниками освещения. На карте установлено несколько источников освещения, и почти для всех установлены выключатели. Первые пять источников освещения просто демонстрируют уменьшение яркости света. У четвёртого яркость равна 0, поэтому совершенно не заметно как он включается/выключается. У пятого яркость равна -200, поэтому он излучает не свет, а темноту, что даёт весьма интересную тень на противоположной стене от трёх небольших столбиков. "Тень" от этого источника освещения получается не темнее, а светлее, чем светит сам источник освещения. Шестой седьмой и восьмой источники демонстрируют зависимость свойств "Constant", "Linear", "Quadratic" на дальность и яркость освещения от этих источников освещения. Используйте выключатели на стене, чтобы лучше разобраться с особенностями каждого источника освещения на карте.

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

  • 2)

Карта выполнена в ночном стиле, чтобы было легче различались тени, созданные источниками освещения. На карте установлено несколько источников освещения, для первых четырёх установлены выключатели. Первые четыре источника освещения демонстрируют зависимость свойств "50% Falloff Distance" и "0% Falloff Distance" на дальность и яркость освещения от этих источников освещения. Последние три источника света используются совместно с объектами prop_static и point_spotlight, демонстрируя практическое применение объекта light_spot.

При компиляции этой карты компилятор VRAD выдаёт предупреждение: WARNING: Too many light styles on a face (319,-356,124)

Чтобы найти точку (319,-356,124) на карте во время игры в консоли выполните команды "sv_cheats 1", затем "noclip" и затем "cl_showpos 1". После этого вы сможете летать по карте и в правом верхнем углу экрана будет отображаться ваша текущая позиция. Чтобы не искать нужную точку можно просто ввести в консоли команду "setpos 319 -356 124" и игрок сразу же окажется в нужной точке. Если проблемную поверхность трудно различить на фоне других поверхностей, то введите в консоли команду "mat_wireframe 3" для включения режима wireframe. Теперь, когда вы знаете проблемную поверхность, осталось просмотреть все источники света, которые могут на неё светить, и принять меры по устранению проблемы. Решений этой проблемы может быть множество: удалить лишние источники света, немного подвинуть их в сторону, нарастить или добавить какую-нибудь стену, вручную разрезать браши при помощи инструмента "Clipping Tool [Shift+X]" и т.д. Выясняется, что на эту поверхность явно светит три источника освещения light_spot и объект light_environment, имитирующий свет солнца (в нашем случае - луны). Максимальное количество стилей света для поверхностей не должно превышать количество равное 8. В нашем случае на поверхность светит три источника освещения для которых выбраны разные имена, значит это уже 6 стилей. У самой поверхности по умолчанию всегда есть 1 стиль света, поэтому у нас есть уже 7 стилей. Свет объекта light_environment НЕ прибавляет поверхности дополнительного стиля, потому что для него "Appearance" = "Normal", а так же он не имеет имени. Суммарный результат – 7 стилей. Вроде всё в порядке и посчитанное значение не больше максимально допустимого, почему же тогда компилятор выдаёт ошибку? Дело в том, что мы не учли "отскоки" света от стен. В нашем случае свет от четвёртого объекта light_spot отскочил от стены и достиг рассматриваемой поверхности, добавив к ней ещё два стиля. В сумме получаем 9 стилей, что не допустимо. Справедливости ради стоит отметить, что свет от четвёртого объекта light_spot настолько ничтожно мал, что практически не различим на рассматриваемой поверхности, поэтому в этом случае ошибкой можно просто пренебречь, но в учебных целях вы можете попробовать решить её самостоятельно, например: удалив четвёртый источник освещения, или добавив стену в нужном месте на карте.

Смотрите также