Сезонные вариации: одна локация, четыре погоды

8 окт 2026 · 6 мин · 💬 1

Мне предложили сделать «деревню в четыре сезона». Я прикинул: четыре сцены, четыре набора текстур, четыре раза свет — полгода работы, если честно. В итоге собрал всё за три недели, и геометрию не тронул ни разу. Секрет банальный: сезон — это не новая локация, это новая настройка старой.

Что меняется на самом деле

Зима — это лето, у которого: температура света холоднее, небо серее, трава спрятана под снегом, на крышах лежит белая шапка, а на дороге каша из грязи. Ни одна стена не сдвинулась. Дерево не стало другим деревом. Это те же объекты, одетые в другую погоду.

Отсюда главный принцип: разделяй статику и «погоду». Геометрия, коллизия, модульные kit'ы — неизменны. Всё сезонное выносим в три слоя:

  1. Материалы. Не новые материалы, а вариации старых. У меня каждый шейтер окружения принимает параметр season_mask или просто переключается на другой набор текстур через Material Instance (Unreal) / Node Group override (Blender). Трава: летом зелёный альфа-лист, зимой — тот же меш с маской снега. Тот же куст, те же координаты.
  2. Декали и доп. меши. Снег на крышах — это не изменённая крыша, а отдельный тонкий меш-«шапка» поверх, включаемый слоем WINTER. Лужи, грязь, иней на окнах — декали. Осенние листья на дороге — те же самые billboard-кусты, перекрашенные в рыжий.
  3. Свет и атмосфера. Лето: солнце 5500K, небо голубое, экспозиция обычная. Зима: 7000K, солнце ниже, туман плотнее. Ночь: тот же комплект, только солнце выключено, луна + lamp-посты горят, экспозиция минус два стопа.

Material swap без боли

Чтобы перекраска не превратилась в ад, с самого начала:

  • Единый UV на всю локацию. Если у каждого дома свой развёрнутый мир, снег ляжет криво. Мой выбор — world-space признаки: высота, нормаль, «вверх» (dot(N, Z)), а не UV-координаты. Тогда снег ложится на все горизонтальные поверхности автоматически, на любой крыше из kit'а.
  • Палитра через параметры, а не через «впечённые» текстуры. Бетон, дерево, кровля — базовые альбедо нейтральные, оттенок меняется параметром. Осенняя листва — HSL-сдвиг зелёного, а не новая карта.
  • Слой = кнопка. В движке держу четыре префаба-«сезона», каждый включает свой набор декалей, подменяет инстансы материалов и выставляет свет. Переключение — одна строка кода, а не ручная пересборка сцены.

Грабли

  • Снег там, где его не бывает. Каша на дороге, но сухая скала? Снег по нормали: всё, что круче 60°, обязан быть чистым — иначе выглядит как белая краска. Проверяйте маску «по вверх» строго.
  • Ночь = выключить солнце. Получается чёрный экран. Ночью нужны источники: луна как key, небо как fill, окна и фонари как акценты. И глаз адаптируется: экспозицию поднимайте, иначе игрок слепнет.
  • Четыре набора текстур вместо четырёх инстансов. Классика: художник делает «зимнюю траву» отдельной текстурой — и через полгода забыл, где какая. Держите одну базу и маску.

Сезонность — это не про контент, а про архитектуру материалов. Постройте слой «погоды» отдельно от слоя «геометрии» — и пятый сезон обойдётся вам в пару вечеров. А не в полгода.

Комментарии (1)

Форма для гостей комментариев пока не принимается — писать можно автору (expeot@outlook.com) или через владельца блога. Все записи выше настоящие, никто их не модерирует молча.