Настройка динамических теней и отражений графики

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

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Настройка динамических теней и отражений графики
Сложная
~3 рабочих дня
Часто задаваемые вопросы
Наши компетенции
Какие этапы разработки игры?
Последние работы
  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    671
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    860
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    533

Настройка динамических теней и отражений графики

Динамические тени и отражения — самые прожорливые части рендер-пайплайна по GPU-времени. Настроить их «по умолчанию» не получится: каждый проект требует своего баланса между качеством и производительностью. На мобильном устройстве 2-мегапиксельный Shadow Map для одного Directional Light — это катастрофа. На десктопе отсутствие Screen Space Reflections в шутере от первого лица бросается в глаза сразу.

Тени: где теряется производительность

Shadow Casting работает через дополнительный рендер-проход — Shadow Caster Pass. Каждый объект, входящий в зону видимости тени, рендерится повторно с depth-шейдером в Shadow Map текстуру. Чем больше источников с тенями, тем больше дополнительных проходов.

Самое болезненное — Spot Light или Point Light с включёнными Shadow Casting на мобильных платформах. Point Light рендерит Shadow Map в виде cubemap — 6 граней, 6 рендер-проходов для одного источника. На сцене с 5 такими источниками это 30 дополнительных рендер-проходов каждый кадр. На мобильных устройствах это не влезает в 16-ms бюджет.

Практический подход: оставляем Shadow Casting только на Directional Light (основной направленный источник), Point и Spot Lights переводим в режим без теней и компенсируем их отсутствие через Blob Shadow проектор или Decal с мягкой тенью под персонажем. Игрок не замечает, что тень «ненастоящая», если её форма правдоподобна.

Для Shadow Distance критически важно выставить адекватное значение. В Unity это Quality Settings → Shadow Distance. Типичная ошибка — оставить дефолтные 150 единиц для мобильного проекта с видом сверху, где дальняя видимость — 30 единиц. Всё лишнее за этим расстоянием Unity всё равно рендерит в Shadow Map, но никогда не показывает.

Shadow Cascades для Directional Light

Directional Light с одним Shadow Map без каскадов даёт либо детальные тени вблизи при потере качества вдали, либо охватывает всю дальность при низком разрешении вблизи. Shadow Cascades делят Shadow Map на зоны: ближняя зона получает высокое разрешение, дальняя — низкое.

Для PC-проектов 4 каскада — стандарт. Для мобильных — 2 каскада максимум, а лучше 1 с небольшим Shadow Distance. Распределение каскадов (Cascade Split) по умолчанию в Unity равномерное, но лучше работает логарифмическое: 0.05 / 0.15 / 0.35 — большая часть разрешения Shadow Map уходит на первые метры перед камерой, где детализация тени заметнее всего.

Shadow Normal Bias и Shadow Bias — параметры, которые определяют, есть ли «тенеакне» (shadow acne, полосатые артефакты самозатенения) или «летающие тени» (peter panning, тени оторваны от объектов). Normal Bias 0.4, Bias 0.05 — отправная точка для большинства сцен. Для тонких объектов (листья, решётки) Normal Bias нужно снижать до 0.1–0.2, иначе тень исчезает полностью.

Отражения: Screen Space vs Probe-based

Screen Space Reflections (SSR) — постпроцессинговый эффект, работающий только с тем, что находится в кадре. Дёшево и убедительно для горизонтальных поверхностей (пол, вода), но ломается на краях экрана и не показывает то, что находится за камерой. В HDRP настраивается через Volume → Screen Space Reflection, ключевой параметр — Minimum Smoothness (поверхности ниже этого значения не получают SSR, что правильно — матовые поверхности не отражают).

Reflection Probes работают везде, где SSR не справляется: вертикальные поверхности, отражение потолка в полу, интерьеры. Baked Reflection Probe — снимок кубической панорамы в конкретной точке пространства, запечённый заранее. Realtime Reflection Probe пересчитывается во время игры.

Проблема Baked Probes — статичность. Если в сцене есть анимированные объекты (флаги, вода, персонажи), они не попадают в отражение. Компромисс: Realtime Probe с Refresh Mode On Awake для объектов, которые меняются редко (открывающаяся дверь), и Baked для всего остального.

Box Projection — обязательная настройка для интерьеров. Без неё Reflection Probe ведёт себя как бесконечно удалённый источник, и отражение не совпадает с реальной геометрией комнаты. С Box Projection и правильно настроенным Box Size зеркало на стене будет показывать корректную перспективу.

Кейс: вода с отражением на мобильном устройстве

На проекте с изометрическим видом требовалась река с правдоподобными отражениями на Android. SSR — недоступен (OpenGL ES 3.0 на целевых устройствах плохо переваривает postprocess stack). Baked Reflection Probe давал статичную картинку без неба.

Решение: кастомный шейдер воды на ShaderGraph с искажением UV через Normal Map (имитация волнения) + Reflection Probe в Realtime режиме с Refresh Mode Every Frame, но с очень низким Shadow Resolution (128×128) — он отражал только небо и горизонт. Для динамических объектов (лодки) добавили Planar Reflection Camera — отдельная камера рендерит сцену с перевёрнутой Y-осью в Render Texture, которую шейдер воды смешивает с Reflection Probe через Fresnel-зависимость. Результат выглядел убедительно при стоимости одного дополнительного рендер-прохода в 60% разрешении.

Диагностика и инструменты

Frame Debugger разбирает Shadow Caster Pass по каждому источнику — сразу видно, кто «жрёт» время. GPU Usage в Profiler показывает мс на каждый рендер-проход с Shadow Casting.

Для Reflection Probes — Rendering Debugger в режиме просмотра Reflections → Probe Volume: видно, какой зонд влияет на конкретную поверхность и корректен ли Box Projection.

Задача Сроки
Настройка теней для одной сцены (PC/console) 1–3 дня
Настройка теней с оптимизацией под мобильные 3–7 дней
Reflection Probes для комплекса интерьеров 3–5 дней
Полный пайплайн теней + отражений, несколько платформ 2–4 недели

Стоимость рассчитывается индивидуально после анализа рендер-пайплайна и целевых платформ.