~3 мин чтения

Освещение и тени

Directional, Point, Spot — и почему статичный свет можно "запечь" заранее.

Иллюстрация: Освещение и тени

Свет в 3D-сцене — то, что превращает геометрию из плоского силуэта в объёмную картинку. Unity поддерживает realtime и baked (запечённое) освещение, и в реальном проекте они комбинируются.

Типы источников света

  • Directional Light — солнце. Бесконечно далёкий источник параллельных лучей. Один на сцену обычно достаточно.
  • Point Light — лампочка. Свет во все стороны от точки, с радиусом затухания.
  • Spot Light — фонарик. Конус из точки, с углом и радиусом.
  • Area Light — прямоугольный/дисковый источник для запекания (в realtime — только в HDRP).

Каждый Light имеет цвет, интенсивность (в люменах или unitless — зависит от пайплайна) и mode: Realtime, Mixed или Baked.

Realtime, baked и mixed

ModeКогда вычисляетсяСтоимостьПрименение
RealtimeКаждый кадрВысокаяДвижущиеся источники, время суток
BakedОдин раз в редактореНулевая в рантаймеСтатичная архитектура, интерьеры
MixedПрямой — realtime, непрямой — bakedСредняяГлавный солнечный свет, динамические тени
Almost everything is mixed

В большинстве проектов главный directional свет ставят в Mixed-режим: прямые тени динамические, непрямое освещение и тени от статичной геометрии запечены. Это лучший баланс качества и производительности.

Baked GI и Light Probes

Global Illumination (GI) — это про непрямое освещение: свет, отражённый от стен и пола. В Unity GI запекается через Progressive Lightmapper (CPU или GPU). Результат — текстуры lightmap для статичной геометрии.

Для динамических объектов lightmap не подходит — они двигаются. Вместо этого используется Light Probes: сетка “сэмплов” освещения, размещённая в сцене (компонент LightProbeGroup). Динамический объект интерполирует освещение из ближайших probe’ов.

Adaptive Probe Volumes — современная замена в URP 17

В Unity 6 (URP/HDRP 17+) появились Adaptive Probe Volumes (APV) — автоматическая сетка проб с переменной плотностью (больше проб в детализированных зонах). Не нужно вручную ставить LightProbeGroup. Активация для URP: Edit → Project Settings → Quality → дабл-клик на активный URP Asset → секция Lighting → Light Probe Lighting → Light Probe System: Adaptive Probe Volumes. Запекание spacing — в Window → Rendering → Lighting → Adaptive Probe Volumes (отдельная вкладка). Для новых проектов — стандартный выбор.

Запекание (грубо):
  1. Отметьте статичные объекты как "Static" → Contribute GI.
  2. Разместите Light Probes в нужных зонах (где могут быть динамические объекты).
  3. Window → Rendering → Lighting → Generate Lighting.
  4. Ждёте от минут до часов в зависимости от сцены.

Reflection Probes — то же самое для отражений. Сферические или box-проектируемые карты окружения, по которым материалы (особенно металлические) узнают, что отражать.

Тени

У каждого Light есть параметры теней:

  • Shadow TypeNo Shadows / Hard Shadows / Soft Shadows.
  • Shadow Resolution — разрешение shadow map.
  • Shadow Strength / Bias / Normal Bias — настройка артефактов (acne, peter-panning).

Realtime-тени — одна из самых дорогих вещей в кадре. На мобильных часто отключают все тени, кроме одной от directional light, и то с малым shadow distance (URP позволяет настраивать каскадные тени и их дальность).

Cookie не дёшевы

Light Cookie — текстура, проецируемая через источник света (как стенсил кинопроектора). Полезно для красивых паттернов от листвы. Но это дополнительный sampler в шейдере — на слабом железе избегайте.

Skybox и Ambient

Skybox — фон в дальнем поле, обычно cubemap. Также служит источником ambient-освещения: даже без прямых источников мир не будет в полной темноте. Настраивается в Window → Rendering → Environment:

  • Skybox Material — материал с типом Skybox/Cubemap или Skybox/Procedural.
  • Source для Environment Lighting: Skybox / Gradient / Color.
  • Intensity Multiplier — насколько ярко окружение освещает сцену.

Хороший приём для уличной сцены — HDRI cubemap из реальной фотосферы (есть библиотеки бесплатных HDRI, например PolyHaven). HDRI задаёт сразу и фон, и общее освещение.

Что обычно “ломает” освещение у новичка

  1. Слишком много Point Light’ов в realtime. В URP forward-рендере каждый light добавляет стоимость на каждый видимый объект. Ограничьте 4–8 активных, остальные — baked или disable по расстоянию.
  2. Все объекты non-static, поэтому GI не работает. Помечайте статичную геометрию как Static и запекайте.
  3. Auto Generate включён на больших сценах. Это пересчитывает GI после каждого изменения — медленно. Выключите и запекайте вручную через “Generate Lighting”.
  4. Нет Light Probes в зонах с динамическими объектами — они выглядят неосвещёнными или плоскими.

В следующей главе — анимация: как двигается ваш персонаж.