Создание динамической смены суток
Подскажите, пожалуйста, возможно ли на движке Source воссоздать динамическую смену дня и ночи? Если да, то как? Ведь насколько я знаю, текстуры скайбокса нельзя поменять в реальном времени.
На самом то деле можно сделать смену дня и ночи и в хамере.
Однако для полной реалистичности требуется много инпутов и аутпутов.
Я вобщем то давно уже балуюсь такой фишкой в своих картах
вот пример на двух картах
На обоих картах имеется система смены дня и ночи.
В конце цикла происходит зачистка карты от различных пропов и мусора от трупов.
Это позволяет предотвращать краш сервера от переполнения лимита пропами.
Теперь о смене суток.
Во первых нужно установить таймер - logic_timer и указать время суток, ну к примеру 180 секунд. Значит цикл суток будет идти за 3 минуты.
Далее создадим ентити light_environment
Присвоим ему имя, к примеру тот же light_environment
при срабатывании таймера это энтити будет включаться и выключаться в заданые промежутки времени. light_environment - освещение через браши и скайбокс
Солнце на карте - ентити env_sun
Назавем его mi_sun
теперь можно выключать и выключать освещение через таймер.
Нужно иметь ввиду что мы не можем совсем отключить light_environment.
Мы можем только отключить параметр Brightnes, а параметр Ambient остается неизменным.
Поэтому настроим light_environment следующим образом
Brightnes 250 227 200 700
Ambient 200 200 200 10
env_sun не влияет на освещенность карты и потому его надо настраивать исходя из скайбокса и создаваемой обстановки на карте.
Далее надо понимать, что если мы подобным образом настроим карту при 2d скайбоксе, то ничего путного не получится. Тк скайбокс имеет свое свечение даже при отключении light_environment
Вывод простой. Нам надо загородить скабокс от взгляда игрока. Для этого потребуется создать 3d скайбокс.
Самый простой способ - создание коробки скайбокса в центре которого находится sky_camera
Внутри коробки скабокса создаем вторую коробку - затемнение имеющую любую текстуру на ваш вкус. От звездного неба до тулз блэка. Эту коробку нужно переконвертировать в func_brush Зададим этой коробке имя, к примеру sky
Теперь у этой браши можно менять прозрачность от 0 до 255
Добавим аутпуты на таймере.
Растянув по времени затемнение и пропадание мы придадим большую реалистичность процессу.
Для большей реалистичности конечно можно сделать солнце через спрайт и двигать его по небу, при этом меняя параметры контролера теней, но это увиличит нагруженность карты лишними данными. К сожалению ent data очень быстро переполняется и на саму карту уже может остаться очень мало. Приходится выбирать - много красоты или много геймплея.
Сам я не использую коробку в скайбоксе. Вместо коробки я использую вращающийся полый шар - модель на внутреннюю поверхность которой можно нанести любую нужную текстуру. Это дает ночное вращающееся небо.
Данный способ имеет смысл применять только если карта открытого типа. Так как нет смысла делать это для карт без скабоксов, где все действие - в помещениях.
Есть большой недостаток в данном способе.
light_environment отвечает за освещение не только брашей но и пропстатиков. Соотвественно модели в проп статике будут неосвещенными даже днем, поскольку параметр выставлен Ambient 200 200 200 10.
Выход - либо делать проп динамики либо менять текстуры моделей на свои.
Так например если в .vmt заменить "LightmappedGeneric" на "unlitgeneric", то модели будут независимы от освещения.
Пример
Данным способом я делал карты на играх Obsidian Conflict, Synergy, TF2
Однако для полной реалистичности требуется много инпутов и аутпутов.
Я вобщем то давно уже балуюсь такой фишкой в своих картах
вот пример на двух картах
На обоих картах имеется система смены дня и ночи.
В конце цикла происходит зачистка карты от различных пропов и мусора от трупов.
Это позволяет предотвращать краш сервера от переполнения лимита пропами.
Теперь о смене суток.
Во первых нужно установить таймер - logic_timer и указать время суток, ну к примеру 180 секунд. Значит цикл суток будет идти за 3 минуты.
Далее создадим ентити light_environment
Присвоим ему имя, к примеру тот же light_environment
при срабатывании таймера это энтити будет включаться и выключаться в заданые промежутки времени. light_environment - освещение через браши и скайбокс
Солнце на карте - ентити env_sun
Назавем его mi_sun
теперь можно выключать и выключать освещение через таймер.
Код: Выделить всё
entity
{
"id" "45372"
"classname" "logic_timer"
"RefireTime" "220"
"spawnflags" "0"
"StartDisabled" "1"
"targetname" "day"
connections
{
"OnTimer" "mi_sun,TurnOff,,3,-1"
"OnTimer" "mi_sun,TurnOn,,62,-1"
"OnTimer" "light_environment,Toggle,,0,-1"
"OnTimer" "light_environment,Toggle,,63,-1"
}
}
Нужно иметь ввиду что мы не можем совсем отключить light_environment.
Мы можем только отключить параметр Brightnes, а параметр Ambient остается неизменным.
Поэтому настроим light_environment следующим образом
Brightnes 250 227 200 700
Ambient 200 200 200 10
env_sun не влияет на освещенность карты и потому его надо настраивать исходя из скайбокса и создаваемой обстановки на карте.
Далее надо понимать, что если мы подобным образом настроим карту при 2d скайбоксе, то ничего путного не получится. Тк скайбокс имеет свое свечение даже при отключении light_environment
Вывод простой. Нам надо загородить скабокс от взгляда игрока. Для этого потребуется создать 3d скайбокс.
Самый простой способ - создание коробки скайбокса в центре которого находится sky_camera
Внутри коробки скабокса создаем вторую коробку - затемнение имеющую любую текстуру на ваш вкус. От звездного неба до тулз блэка. Эту коробку нужно переконвертировать в func_brush Зададим этой коробке имя, к примеру sky
Теперь у этой браши можно менять прозрачность от 0 до 255
Добавим аутпуты на таймере.
Код: Выделить всё
"OnTimer" "sky,Alpha,150,2,-1"
"OnTimer" "sky,Alpha,175,2.5,-1"
"OnTimer" "sky,Alpha,150,59,-1"
"OnTimer" "sky,Alpha,175,58.5,-1"
"OnTimer" "sky,Alpha,225,57.5,-1"
"OnTimer" "sky,Alpha,50,61,-1"
"OnTimer" "sky,Alpha,25,61.5,-1"
"OnTimer" "sky,Alpha,255,4,-1"
"OnTimer" "sky,Alpha,200,3,-1"
"OnTimer" "sky,Alpha,225,3.5,-1"
"OnTimer" "sky,Alpha,75,0.5,-1"
"OnTimer" "sky,Alpha,100,1,-1"
"OnTimer" "sky,Alpha,125,1.5,-1"
"OnTimer" "sky,Alpha,50,0,-1"
"OnTimer" "sky,Alpha,125,59.5,-1"
"OnTimer" "sky,Alpha,100,60,-1"
"OnTimer" "sky,Alpha,75,60.5,-1"
"OnTimer" "sky,Alpha,0,62,-1"
"OnTimer" "sky,Alpha,200,58,-1"
Для большей реалистичности конечно можно сделать солнце через спрайт и двигать его по небу, при этом меняя параметры контролера теней, но это увиличит нагруженность карты лишними данными. К сожалению ent data очень быстро переполняется и на саму карту уже может остаться очень мало. Приходится выбирать - много красоты или много геймплея.
Сам я не использую коробку в скайбоксе. Вместо коробки я использую вращающийся полый шар - модель на внутреннюю поверхность которой можно нанести любую нужную текстуру. Это дает ночное вращающееся небо.
Данный способ имеет смысл применять только если карта открытого типа. Так как нет смысла делать это для карт без скабоксов, где все действие - в помещениях.
Есть большой недостаток в данном способе.
light_environment отвечает за освещение не только брашей но и пропстатиков. Соотвественно модели в проп статике будут неосвещенными даже днем, поскольку параметр выставлен Ambient 200 200 200 10.
Выход - либо делать проп динамики либо менять текстуры моделей на свои.
Так например если в .vmt заменить "LightmappedGeneric" на "unlitgeneric", то модели будут независимы от освещения.
Пример
Данным способом я делал карты на играх Obsidian Conflict, Synergy, TF2