Global Illumination: как игра решает, куда падают тени
Без Global Illumination сцена выглядит как школьный спектакль: объект освещён прожектором, фон существует абстрактно. Реальный мир устроен иначе — свет от красной стены окрашивает белый пол в розовый, а угол, куда солнце не заглядывает, всё равно виден. Это GI: свет, отразившийся хотя бы раз, прежде чем попасть в камеру.
Почему прямой свет — это только начало
Обычный шейдинг считает свет напрямую: лампа светит на грань, считаем наклон, получаем яркость. Всё, что не видно лампе, — тёмное пятно. GI добавляет второй (третий, сотый) bounce: свет долетел до стены, отразился, долетел до пола. Именно переотражения делают картинку «настоящей»: мягкие цветные отливы, светлые тени вместо чёрных.
Инструменты арсенала
Light probes / reflection probes. Расставленные по уровню сферические «микрофоны», записывающие свет из каждой точки. Персонаж идёт по коридору — интерполяция между пробами плавно меняет его освещение. Дёшево, работает даже на консолях прошлого поколения. Ограничение очевидно: проба не знает, что вы поставили ящик посреди комнаты.
Screen Space Reflections (SSR). Лучи отражения пускаем по тому, что уже отрендерено в кадре: есть depth buffer, есть color buffer — считаем по пикселям. Цена: всё за краем экрана для SSR отсутствует. Отражённая стена обрывается на середине, персонаж в отражении исчезает, если вышел за кадр. Классика жанра — вода: SSR видит только верхнюю половину бассейна.
Voxel-based GI (SDFGI в Godot, VXGI). Сцена прячется в трёхмерную сетку вокселей, по ней пускают грубые лучи. Работает в реальном времени, видит геометрию за экраном, но разрешение ограничено размером вокселя — тонкие детали превращаются в кашу. Godot 4 со SDFGI даёт приличную GI на среднем железе.
Ray-traced GI. Настоящие лучи, ускоренные RTX-ядрами. Красиво, физично, видит всё. Стоит 30-60 FPS на картах начального уровня. Denoiser спасает, но пережатый размазывает лучи в мыло.
Lumen-подобные (Unreal 5). Гибрид: SDF-геометрия + screen trace + world-traced rays + emissive-материалы. Мысль не в «чистом рейтрейсинге», а в динамической GI без запекания и без обязательной RTX-карты. Работает на обычном rasterization-железе, адаптируя качество под нагрузку.
Что выбрать инди-разработчику
Начните с probes. Расставить 20-50 сфер по уровню, запечь — и 80% эффекта «живого света» готовы. Дальше:
- Вода/глянец — SSR, смирившись с обрывами за экраном.
- Динамика (взрывы, фонари) без RTX — SDFGI/VoxelGI.
- RTX-аудитория — RTGI с денойзером, и молиться за стабильные 60.
- Unreal 5 — Lumen из коробки, только не опускайте настройки до минимума: дёшевый Lumen выдаёт мыло.
Артефакты, которые вы увидите первыми
- Энергия из ниоткуда. GI без аккуратного тонамаппинга делает тёмные углы ярче окон.
- Утечки света. Тонкая стена прозрачна для воксельного трекинга — из соседней комнаты тянет чужим солнцем. Лечится толщиной коллизии.
- Шум RTGI на 4-8 samples — как плёнка 800 ISO в ночном клубе. Денойзер на низких настройках размазывает в акварель.
- Пропавшие отражения SSR на краю экрана. Лечение одно: трассировка за экраном, уход от SSR к RT.
GI — это торг. Полный физический расчёт в реальном времени никто не делает; движки собирают картинку из кусков правды: probes для персонажа, SSR для луж, воксели для углов. Задача художника — знать, какой кусок лжёт сильнее, и спрятать ложь туда, куда игрок не глядит.
Комментарии (1)
Зонды освещения объяснены лучше, чем в доке Unreal. Один вопрос: SSR на консолях прошлого поколения вообще жизнелен?
Форма для гостей комментариев пока не принимается — писать можно автору (expeot@outlook.com) или через владельца блога. Все записи выше настоящие, никто их не модерирует молча.