Реалистичные отражения в реальном времени — одна из самых заметных и одновременно затратных задач графики. Разработчики решают её тремя основными подходами: статическими кубическими картами, отражениями в экранном пространстве (Screen Space Reflections, или SSR) и планарными отражениями через дополнительную виртуальную камеру. В статье разбираем последний метод: его математическую основу, алгоритм рендеринга, сильные и слабые стороны.
Что такое планарное отражение
Планарное отражение (planar reflection) — метод визуализации точных зеркальных отражений на плоских поверхностях с помощью дополнительной виртуальной камеры, отражённой относительно плоскости. Метод работает поточечно: это означает, что каждый пиксель отражающей поверхности получает данные из отдельно отображённого «зеркального» кадра.
Геометрически идея простая: где бы ни находилась основная камера, программа строит её «зеркальную копию» — как если бы позади зеркала стояла такая же камера. Она направлена в обратную сторону и фиксирует сцену «с той стороны стекла». Точно так же отражается и вектор «взгляда» камеры. Операция полностью автоматическая: программа анализирует плоскость зеркала, её положение и направление, куда повёрнута поверхность. Она мгновенно рассчитывает, где должна стоять зеркальная камера и в какую сторону развёрнута.
Важный нюанс — создание «отражённого мира». Всё, что расположено «под» плоскостью отражения относительно основной камеры, отбрасывается: рендерится только та часть сцены, которая видна в зеркале. Это делает метод точным, но требует от программы дополнительных вычислений.
Нужно понимать разницу между планарным методом и другими подходами: это не готовая текстура (т. е. изображение, которое «натягивается» на трёхмерный каркас) и не приближение через экранное пространство, а полноценный второй рендер (визуализация) сцены под новым углом. Основная камера снимает мир как обычно, а зеркальная — точно так же, но с другой стороны плоскости. При этом у зеркального отражения меняется «право» и «лево», прямо как в жизни. Из-за этого треугольники, из которых состоят 3D-модели, движок обходит в обратном порядке — иначе программа приняла бы отражённые грани за «изнанку» и не показала бы их вовсе.
Как создаются планарные отражения
Пошаговый алгоритм построения одного кадра с планарным отражением выглядит так.
- Определение плоскости отражения. Задаётся точкой на плоскости и её позицией в пространстве. Обычно плоскость совпадает с полом, поверхностью воды или зеркалом на стене.
- Создание отражённой камеры. Движок ставит вторую камеру в точно такую же точку с обратной стороны, разворачивает её и подгоняет угол обзора. Представим это так: если взгляд направлен в зеркало сверху вниз под углом 30°, зеркальная камера должна смотреть снизу вверх под тем же углом. Настройки поля зрения обычно берут такие же, как у основной камеры, — иначе отражение получится искажённым.
- Настройка плоскости отсечения. Зеркальная камера не должна видеть всё, что находится за пределами съёмки, — иначе на отражении появились бы куски стены или дно за поверхностью воды. Плоскость зеркала становится границей: всё, что ближе к «изнанке», не визуализируется.
- Рендеринг сцены в render texture. Кадр отрисовывается с «точки зрения» отражённой камеры как отдельная текстура. Часто используются упрощённые шейдеры (мини-программы, которые управляют графикой в играх и 3D-редакторах) и уменьшенное разрешение. Это не влияет на итоговое качество.
- Оптимизация. Отключение лишних слоёв, снижение детализации для дальних объектов, использование текстур меньшего разрешения.
Для каждого из этих шагов достаточно нескольких строк кода. Разработчик задаёт плоскость зеркала и запускает готовую функцию отражения — она сама пересчитает положение зеркальной камеры, её направление и параметры отсечения изображения.
Как работают в экранном пространстве
После записи отражения в render texture система рендерит зеркальную плоскость как обычный объект и проецирует на неё полученную текстуру. Экранное пространство здесь играет ключевую роль: чтобы найти нужный кусочек отражения для каждой точки пола или зеркала, движок использует её положение на экране.
Схема работает так:
- шейдер определяет, какому пикселю экрана соответствует точка зеркала;
- по этому экранному положению он берет нужный фрагмент из заранее записанной текстуры отражения;
- полученный цвет накладывается на пол или зеркало.
Поскольку основная и зеркальная камера снимают одну и ту же сцену, объекты на картинке из зеркала идеально совпадают по расположению с объектами в основном кадре. Именно это позволяет считывать отражение прямо по экранным координатам.
Есть и более гибкий способ: движок восстанавливает точное положение точки в трёхмерной сцене (по глубине пикселя) и уже потом решает, где на текстуре отражения искать нужный цвет. Этот вариант удобен для нестандартных случаев — неровных поверхностей, воды с волнами, зеркал с каплями воды.
Смешивание с обычным цветом материала происходит для каждого пикселя отдельно. Это позволяет добавлять шероховатость, лёгкое размытие в зависимости от того, насколько далеко находится отражённый объект, рябь на воде и плавные переходы между глянцевыми и матовыми участками. Интенсивность отражения регулируется параметром «зеркальности», который задает пропорцию смешивания цвета отражения и базового цвета материала..
Одна из известных проблем метода — параллакс: если отражающая поверхность неровная или содержит мелкие детали, текстура отражения «уплывает». Это происходит потому, что render texture рассчитан для идеально плоской поверхности. Смягчить эффект можно двумя способами: слегка размыть картинку или подправить её положение с помощью подсказок о глубине кадра.
Программы обучения
1349
Как метод применяется в реальных играх
Технологию используют там, где нужно показать блеск. Например, при создании гладкой воды, начищенных полов, зеркал, мокрых от дождя тротуаров или стеклянных фасадов небоскрёбов. Планарные отражения идеально подходят для сцен с одной большой плоскостью и высокими требованиями к точности отражения. Их можно увидеть в таких играх, как:
- Control (Remedy Entertainment) — стеклянные и мраморные поверхности в офисных интерьерах Федерального бюро контроля;
- Mirror's Edge Catalyst (DICE) — глянцевые полы небоскрёбов Города Стекла;
- Hellblade: Senua's Sacrifice (Ninja Theory) — водоёмы в мистических локациях;
- Inside (Playdead) — водные поверхности в атмосферных сценах.
Какие преимущества и недостатки у метода
Планарный метод — не универсальный, и его сильные и слабые стороны стоит понимать до внедрения.
Преимущества:
- Абсолютная точность отражённого изображения. Геометрия, цвета, освещение соответствуют физике зеркала.
- Корректная работа с динамическими объектами. Движущиеся персонажи, эффекты частиц, изменяемое освещение отражаются правильно и без задержки.
- Отсутствие артефактов окклюзии (визуальных дефектов или ошибок рендеринга), свойственных методу Screen Space Reflections. При взгляде вниз отражение не исчезает, потому что источник данных не ограничен экраном.
- Чёткость не зависит от направления взгляда. Под любым углом отражение остаётся стабильным;
- Работает с эффектами постобработки. Тени, свечение, глобальное освещение применяются к отражённому кадру.
Недостатки:
- Кратное увеличение вычислительной нагрузки. Фактически сцена рендерится дважды, часто с упрощённой геометрией и в меньшем разрешении.
- Жёсткое ограничение одной плоскостью. Если зеркал много и они повернуты в разные стороны, приходится множить скрытые кадры для отрисовки каждого зеркала либо сочетать метод с другими технологиями.
- Необходимость ручной настройки. Разработчик задаёт плоскость, отсечение, разрешение текстуры — это повышает трудозатраты команды.
- Ошибка отображения, когда предмет проходит сквозь зеркало или воду. Половина объекта отражается сама в себе, из-за чего на стыке появляются швы, мерцание и дыры.
- Текстуры с отражениями — одни из самых тяжелых файлов в игре. Памяти видеокарты просто не хватает, чтобы хранить столько качественных картинок одновременно.
Сравнение с альтернативными техниками
Существует другие популярные приёмы.
- Screen Space Reflections (SSR). Это самый бюджетный способ. Движок берёт данные о цвете пикселей из основного кадра и отражает их. Плюс — не тратится время на второй рендер сцены. Но есть и минусы: отразить можно только то, что попало в экран. Всё, что осталось за кадром или спрятано за стеной, для этого метода невидимо. Кроме того, SSR сильно зависит от угла обзора: при взгляде под скользящим углом качество деградирует.
- Статические и динамические кубические карты. Cubemap хранит панорамный снимок окружения, выборка выполняется по направлению отражения. Хорошо подходят для сложных геометрических форм — сфер, цилиндров, изогнутых поверхностей. Метод не требует дополнительного рендеринга и работает быстро. Минусы: размытость, несоответствие точной геометрии сцены, отсутствие корректных самоотражений подвижных объектов. Использование динамических кубических карт сглаживает базовые недостатки метода, но затраты производительности сравнимы с планарным отражением, а итоговая детализация остается неудовлетворительной.
Планарные отражения — золотая середина для конкретной плоской поверхности, когда нужна максимальная точность. Они дороже SSR по вычислениям, но точнее; менее гибкие, чем кубические карты, но детальнее. На практике методы часто комбинируют. Классическая схема: планарные отражения для воды и мраморного пола, SSR для остальных зеркальных поверхностей в кадре, статические кубические карты как резервный вариант для дальнего окружения.
Что ждёт технологию в будущем
С появлением мощных видеокарт отражения в играх стали рассчитывать по законам физики — через трассировку лучей (RT). Теперь отражать можно любые объекты на самых разных поверхностях — например, в кривом зеркале или воде, на стекле — без хитрых программных трюков. Но для этого всё ещё нужен мощный компьютер, а разработчикам приходится ограничивать точность расчётов, чтобы игра не тормозила.
Поэтому планарные отражения ещё долго останутся актуальными благодаря своей скорости и надёжности. Метод используется для поддержки устройств без трассировки лучей и как более дешёвая альтернатива для плоских поверхностей. Кроме того, гибридные схемы, где часть отражений считается через RT, а часть — через планарный метод, уже применяются в проектах уровня Cyberpunk 2077 и Alan Wake 2.





