Обман игроков, или как устроены отражения в играх.
Довольно часто разработчики игр пытаются сделать отражения в своих играх как можно более правдоподобными, но знаете ли вы, что с отражениями в реальной жизни они не имеют ничего общего. Практически всегда это обман. Создать эффект отблеска зеркал, переотражения на воде, преломление света от осколков стекла помогают многочисленные ухищрения и упрощения создателей игр. Сегодня нескольких таких методах мы и поговорим.
1. Рендер сцены с нескольких ракурсов. (planar reflections)
Это пожалуй самый распространённый метод создания зеркальных поверхностей в играх. Сцена (видимая игроком часть локации) рендерится (рендер — отрисовка кадра, либо сцены) с нескольких точек, далее уже накладывается на слой, которому нужно создать эффект отражения. Этот процесс добавляет много «гемороя», так как рендер сцены «съедает» очень много ресурсов компьютера, соответственно разработчикам игр требуется дополнительное время на оптимизацию. Довольно часто о таком методе вспоминают только под конец создания проекта, поскольку приоритет стоит у более важных аспектах игры (Например проработка персонажей, создание ландшафта и проработка мира). Пример на скриншотах внизу.
2.Полностью созданная зеркальная комната.
Это был очень популярный способ до начала 2000-х годов. Использовался метод в 99% случаев только для создания зеркал. Он ещё более ресурсозатратен, чем первый способ, зато очень простой в создании. Для начала создаются две абсолютно одинаковых комнаты, выставляется всё те же объекты, те же источники света, вообщем обе комнаты просто дублируются. Самое главное то, что вместо зеркала было просто отверстие в другую комнату, а другая комната просто отражалась по горизонтали. Естественно и сам персонаж в комнате-зеркале spawnился(создавался) и отрисовывался заново. По причинам всё большего нарастания количества объектов в локациях данный метод на сегодняшний день мало кем используется. Пример на скриншотах внизу.
3. Screen-space reflections (упрощённая трассировка лучей).
SSR (Screen-space reflections) появилась задолго технологии RTX от Nvidia, но в целом использует похожий принцип. Однако, в отличие от технологии Nvidia, такой метод задействует трассировку только для тех объектов, которые находятся в поле зрения игрока, остальные же объекты не просчитиваются для экономии ресурсов ПК. Это логично, так как технология впервые появилась в 2011 году, и представила её компания Crytek в своей Crysis 2, а после и в Crysis 3, в то время мощность видеокарты просто не позволяла разработчикам рендерить лишнее. Сейчас же такая технология присутствует во всех современных «движках» («движок» — ПО для создания игры) таких как Unreal Engine 4, Unity, CryEngine и других. Пример на скриншотах внизу.
4. Qube maps (кубическая карта).
Способ очень популярный, хотя не без своих изъянов, таких например как отсутствие игрока в отражении, поскольку кубическая карта «prerender» объект («prerender» объект — объект, отрисованый до присутствия персонажа в локации) а также большая степень размытия, из за чего qube maps нельзя использовать для зеркал. Кубическая карта состоит из шести граней куба, у которого на каждую грань «накладывается» своя текстура. Каждую текстуру можно увидеть только по отдельности, смотря в одно из шести направлений. Определяется такая текстура в зависимости от того, куда смотрит центральная точка на экране игрока. Метод используется как в настоящее время, так и в недалёком прошлом, так как не требует большого количества ресурсов ПК. Саму технологию представила Nvidia в 1999 году вместе со своей видеокартой GeForce 256. Примеры на скриншотах.
5. RTX (Ray Tracing). Трассировка лучей от Nvidia.
Многие считают, что RTX просчитывает тени, источники света и отражения также, как и в реальной жизни, но это не так. Ray Tracing это тоже лишь имитация, но основанная на природных и физических явлениях. Вообще в целом RTX — это целый набор различных технологий, таких например как: создание динамических теней; реалистичных отражений; реалистичных источников света, а также степень их преломления от объектов (перечислена лишь малая часть, на деле их гораздо больше). Благодаря тому, что в видеокартах серии RTX имеются RT ядра и достигается высокая производительность и приемлемый FPS, так как нагрузка на просчёт отражений ложится на них, а не на видеоядро. На самом деле, такой метод может работать и на видеокартах линейки GTX (пример: GTX 1080, 1070), но производительность будет очень низкой. Немного о том, как работает сама технология: это метод комбинированной отрисовки кадра, где отлеживается траектория лучей света во всех точках пространства. Он даёт возможность определить степень освещённости, степень отражения и преломления объектов. Даже сейчас, в 2020 году использовать «на полную» RTX не получается, так как мощности нынешних видеокарт всё ещё не хватает, но будем надеяться на лучшее. Примеры RTX на скриншотах внизу.
6. iRAY. Трассировка лучей на GTX видеокартах.
iRAY на самом деле редко используется непосредственно в играх, зато очень часто использовалась (пока на замену не пришёл RTX) в создании 3D моделей для этих самых игр. О том как работает «Nvidia iRAY» достаточно мало информации, но принцип схож с трассировкой лучей на видеокартах 2000 серии, хотя и с большим количеством упрощений и послаблений (так как до недавнего времени работала только на GTX видеокартах, поддержку RTX добавили в прошлом году). Примеры на скриншотах ниже (с помощью него созданы источники света, отражения на полу на первом скриншоте и в окнах на втором скриншоте).
7.Global illumination и shadow map (глобальное освещение и карты теней).
8. Дополнительная камера.
Этот способ довольно редко используется в играх, так как требует очень много ресурсов и в целом он очень похож на способ #1, однако он очень прост в реализации, поэтому его используют в основном неопытные разработчики. Суть в том, что помимо камеры игрока (через неё вы видите всё, что происходит на экране) создаётся ещё одна с таким ракурсом, чтобы кадр для последующего отражения получился естественным. Далее на полученный кадр накладываются эффекты (самый частый из них это размытие) и для экономии ресурсов понижается разрешение (но даже с пониженным разрешением ресурсов требуется слишком много). Кроме высокого потребления ресурсов ПК, ещё одним недостатком является статичность кадра, то есть где бы ваш персонаж не встал, отражение не перестроится (хотя через «множество костылей» это можно реализовать, но это очень глупо, поскольку есть способы лучше, тот же SSR). Примеры на скриншотах внизу.
Сегодня вы узнали для себя чуть больше об отражениях в играх, надеюсь вы не жалеете о потраченном времени на прочтение, я же в свою очередь за уделённое мне время вас благодарю. (Можете также посмотреть новый блог о самых популярных игровых условностях у меня в профиле, мне будет приятно если именно вы его прочитаете)
Как работают отражения в играх. Краткая история от рейкастинг-игр до RTX
Привет. Сегодня хотелось бы написать о такой вещи, как отражение света от поверхностей и рассеивании света в видеоиграх. Всё началось с замечательной конторы 3D Realms, которве выпустили свой ответ DOOM- Duke Nukem 3D. В игре было много весёлых и интересных механик, но самой крутой, как я считаю, стали зеркала. Тащемта, зеркалами они и не являются. Это всего лишь отражённая зеркально такая же комната, внутри которой находится такой же зеркальный спрайт ГГ, который повторяет за игроком все движения. Тогда это было круто, но немногие понимали работу этих псевдозеркал.
Но рендерить сразу две комнаты было очень сложно и потому сообразительные ребятки из Nvidia в 1999 году выпустили свой очередной опус: nvidia geforce 256. Одной из её самых крутых особенностей была поддержка cube maps — кубических карт отражений. Для создания кубической карты из центра локации захватываются шесть плоских изображений, которые ужимаются и наносится на плоскости невидимого для игрока куба, после чего его грани сглаживаются — получается панорамный шар, затекстуренный изнутри.
Так создавались отражения в Half-Life 2, Crysis и многих других играх, которые выходили в начале нулевых.
Но и этого разрабам показалось мало.
В 2011 году гении из Crytek добавила в Crysis 2 шейдер, который получал отражения при помощи трассировки лучей только к видимым на экране объектам, используя информацию с предыдущих стадий рендеринга. Эта технология получила название screen space reflections (или просто SSR), и сейчас используется повсеместно.
SSR — ресурсозатратный процесс, но нагрузка на движок получается ниже, чем от дополнительного рендера, который использовался в том же Duke Nukem.
Для отражения SSR использует только те ресурсы, которые видит сам игрок. Если какой-то объект хотя бы частично остаётся за кадром, то и его отражение в воде или в витрине не будет прорисовываться до конца. И это было одним из камнем предкновения: представьте, что вы стоите на берегу озера. Кристальная гладь воды отражает лес на том берегу. И вот вы увидели красивый камушек у себя под ногой. Вы наклоняетесь чтобы поднять его, лес пропадает из вашего поля зрения и вы видите, что вместе с ним пропало отражение и теперь вы видите только синюю воду. Страшно, да? А ведь это до сих пор используется в играх и в движках.
SSR часто применяют в комбинации с другими методами отражения. Например, в том же Spider-Man от Insomniac Games стеклянные фасады небоскрёбов чередуют SSR с кубическими отражениями. Первые используются в важных для сюжета местах и улицах с плотным трафиком — в отличие от cube maps, SSR может убедительно показать отражения пешеходов и автомобилей, хотя и искажает перспективу.
На первом скриншоте видно, как исчезает отражение модели игрока (unreal engine 4). Это были самые наичестнейшие отражения на тот момент
Но честный просчёт физики света и отражений был для обычных геймеров чем-то, что находится за гранью реальности и доступно только таким серьёзным корпорациям, которые делают фильмы и 3D мультфильмы, таким как Disney или Warner Brothers.
Но не так давно такой гигант, как ранее упомянутая Nvidia, выпускает линейку видеокарт RTX, которые меняют в корне представления о реалистичном свете. Это был прорыв! Теперь каждый, кто отдаст более 1к мёртвых американских президентов, может получить это чудо техники себе. Честные отражения, рассеивание света и его преломления в зависимости от типа поверхности: всё это стало реальностью. Игры стали ещё более реалистичными. На сводах пещер появились честные каустики, свет, проходя в окно комнаты не просто освещал её, но рассеивался от пола на стены, создавая максимально реалистичную модель освещения. Теперь игры стали более похожи на реальный мир.
Различия между ванильным Quake 2 и модом Quake 2 RTX. Обратите внимание на шахту системы вентиляции и на то, как приломляется свет.
Игры становятся всё более и более реалистичными и, возможно, скоро они будут передавать всю физику реального мира.
Физически корректный рендеринг и пост-эффекты.
В этом блоге разработчиков Rise of the Tomb Raider мы узнаем о технологиях и эффектах, используемых в игре для создания богатого правдоподобного окружения.
Физически корректный рендеринг и пост-эффекты.
Майк Оливер (Mike Oliver) – технический арт-директор
Одной из главных задач в Rise of the Tomb Raider было создать богатое, правдоподобное окружение, которое основано на реальности. Окружение, в котором игроки чувствуют личную связь с Ларой и ее приключением. Это очень сложная задача из-за ограничений игровой среды и постоянно меняющегося мира. Физически корректный рендеринг и пост-эффекты очень помогают в решении этой задачи.
Физически корректный рендеринг – относительно новая технология в видео играх, но она широко применяется в кинопроизводстве многие годы. Она позволяет художникам точно имитировать материалы реального мира и условия освещения. Поверхности достоверно отражают и преломляют свет, основываясь на свои свойства поглощения и рассеивания. В целом они выглядят и ведут себя более реалистично и естественно. Правильное освещение достигается с помощью изображений, которые имитируют реальные условия освещения. Совмещение этих технологий очень помогает в создании правдоподобного и реалистичного окружения.
Пост-эффекты также играют важную роль в создании правдоподобного мира. Это фильтры, которые применяются к миру и придают финальный вид и целостность.
Ниже список часто используемых технологий и эффектов в Rise of the Tomb Raider.
- Освещение по ключевым изображениям
Освещение по ключевым изображениям – технология, когда световая информация заложена в текстуру, так называемый "зонд". "Зонды" проектируют световую информацию на окружающую область, имитируя реалистичные условия освещения. Ниже пример комнаты, освещенной только прямым светом (слева), и та же комната, но с примененным световым зондом (справа). Эта техника позволяет художнику создавать сцены с меньшим количеством света, в то же время увеличивается возможность изменять условия и повышается качество.
- Физически корректные материалы
Чтобы извлечь пользу из новой модели освещения по ключевым изображениям, использованной в Rise of the Tomb Raider, мы также внесли корректировки в работу с материалами для поддержания физически корректных материалов. Физически корректные материалы позволяют более точно и естественно передавать поверхности, которые сохраняют свои свойства в различных условиях освещения. Эти материалы состоят из 3 частей. Альбедо, резкость и отражение. Альбедо определяет интенсивность цвета на поверхности. Отражение отвечает за металлические свойства поверхности, а резкость – сколько отраженного света рассеивается.
- Спецэффекты
Наряду с работой физически корректного рендеринга, мы добавили и улучшили число эффектов постобработки. Эффекты постобработки – завершающие штрихи, которые художники применяют к сцене, чтобы соединить все элементы. Они в значительной мере отвечают за вид и восприятие Rise of the Tomb Raider.
- Цветокоррекция
Цветокоррекция – пост-эффект, повсеместно используемый в Rise of theTomb Raider. Цветокоррекция позволяет художникам внести корректировки в готовые отрендеренные изображения, например, изменить яркость, насыщенность, контраст и перераспределение цветов. Этот эффект достигается с помощью "таблицы преобразования". Таблица преобразования представляет собой текстуру 256×16 которая содержит всю информацию об изменениях цвета. Это очень мощная функция в Rise of the Tomb Raider, потому что она является финальным штрихом, задающим настроение, повествование и эмоциональное состояние в уровне.
Ниже несколько вариаций того, что можно достичь с помощью цветокоррекции. Таблица преобразования слева – рендер из игры без применения цветокоррекции. А справа – используемая в данном конкретном уровне таблица преобразования. Теплые и фантазийный таблицы преобразования ниже еще один пример того, как можно легко изменить тон и настроение местности.
- Адаптивная тональная компрессия
Адаптивная тональная компрессия – еще одна технология в современных видеоиграх, которая появилась благодаря физически корректному рендерингу. Сцены теперь освещаются в HDR, это означает, что они могут быть исключительно яркими.
Телевидение, как и наши глаза, не может визуализировать такой световой диапозон без корректировки. Адаптивная тональная компрессия автоматически переносит этот широкий диапазон света в диапазон, который могут передать мониторы. В Rise of the Tomb Raider это больше всего видно при смене яркости, когда вы выходите из темной местности на свет. Освещение ведет себя так, как если бы вы смотрели на все своими глазами.
- Преграждение окружающего света в экранном пространстве
Рассеянное затенение – технология рендеринга, используемая для расчета доли пространства, на которое влияет рассеянный свет. Области, на которые он действует меньше, более темные и затемненные. В мире Rise of the Tomb Raider рассеянное затенение играет очень важную роль, потому что оно помогает интегрировать объекты в окружение и делает их более реальными.
- Размытие в движении
Размытие в движении – пост-эффект, часто используемый в Rise of the Tomb Raider. Так как большая часть геймплея сосредоточена на исследовании и перемещении, мы использовали размытие в движении, чтобы помочь создать правдоподобное окружение, создавая ощущение скорости, непрерывности движения и целостности.
- Глубина поля зрения
Глубина поля зрения – диапазон между ближайшей и дальней точками, который находится в фокусе. В Rise of the Tomb Raider мы используем глубину поля зрения, чтобы разделить элементы переднего плана и фона, а также обратить внимание игрока на ключевые области.
- Отражения в экранном пространстве
Отражения в экранном пространстве – еще одна новая функция, добавленная в Rise of the Tomb Raider. Это мало затратный способ отражать окружение, которое помогает интегрировать Лару в среду и создать правдоподобный мир.
- Экранные блики
Экранные блики – едва различимая функция, которую мы используем во всей игре. Блики появляются на грязи на линзе камеры, во время разных условий освещения, обычно это маленькие частицы пыли или капли. Мы используем эту технологию для улучшения общей атмосферы и ощущений в Rise of the Tomb Raider.
- Объемное освещение
Объемное освещение – 3D эффект, который имитирует лучи света в окружении, такие как свет, проходящий через окно. Он помогает создать правдоподобную атмосферу, с которой взаимодействует персонаж. К тому же, это отличный механизм повествования, который используется для указания игроку на интересные места.
Отражение в играх. Как работают, различия и развитие технологий.
Предлагаю продолжить серию видео про настройки в играх. Напомню, что на сайте уже есть статьи про сглаживания, а также про синхронизацию кадров.
На этот раз предлагаю рассмотреть то, как делались отражения в играх. Как они делаются сейчас, и как происходила эволюция технологии, и почему существует так много кардинально различных подходов к реализации отражения.
Математика говорит, что ничего сложного в этом нет
Казалось бы — в чём может быть проблема? По сути — математика процесса отражения не такая уж и сложная.
Нужно всего то рассчитать положение камеры как бы за стеной в зеркальном месте от настоящей игровой камеры, а потом отрендерить всё с положения этой виртуальной камеры, а потом вставить полученную картинку в место где установлена зеркальная поверхность.
На деле, конечно, для такой топорной реализации нужна масса костылей. Допустим, если можно зайти за такую стену, то есть, условно есть отражающий столб, то виртуальное положение камеры будет загораживаться другими объектами, то есть нужно не переносить камеру, а пересчитывать видимую область для отражения, либо вкидывать вагон костылей, добавляя какие-то исключения видимости.
А теперь вспоминаем, что игровые движки для оптимизации отсекают невидимые объекты на этапе подготовки кадра, то есть учитывания зеркала должно быть до начала отрисовки кадра.
Естественно есть ряд прочих недостатков. Во первых — отражающих поверхностей может быть много. Допустим — каждое окно здания.
Очевидно, что если для каждого окна попытаться отрисовать свою область, то уже существенными будут затраты не только на отрисовку, но и на расчёт областей для которых потребуется отрисовка, то есть проблемы подъедут ещё раньше, чем на видеокарту рухнет основной объём работы. А если отражающая поверхность криволинейная, то разработчикам игры придётся попрощаться с евклидовой геометрией, так как работать с топорным методом отражений она перестанет.
Естественно даже один источник отражения может уменьшить FPS в два раза, так как сцен надо рендерить две. Опять же вспоминаем, что источников отражений может быть много.
На деле — задача сделать отражение совсем не так проста, как хотелось бы и как выглядит на первый взгляд.
Есть кардинально разные подходы
И методов построения отражений довольно много, я их разделяю на три группы. Одна группа методов — это построение дополнительных пространств для реализации отражений, вторая группа — преобразование имеющейся графики на экране для того чтобы использовать её в отражениях как один из фильтров постобработки. И третий метод — воспроизведение картинки такой, какой она была бы при использовании виртуальной камеры, в общем — то как я описывал в топорном методе. Но естественно есть свои ухищрения, так что в реальности эти методы были не столь прожорливы.
Перечислил я эти методы не в последовательности их появления, то есть на самом деле — изначально появились методы третьеей группы, так как это математически самые правильные методы, но применимы они могли быть только в не реалтайм графики, особенно если речь идёт про попытки сделать отражения от криволинейных поверхностей. Трассировка лучей, естественно, также относится к методам реального отображения объектов в игровой локации, но в играх этот метод появился совсем недавно.
Дополнительные камеры
А вот самый примитивный метод реальной картинки отражений — это дополнительные камеры, изображения которых вписанные в некоторые объекты.
И появились такие вещи в первую очередь в гоночных играх где необходим обзор сбоку и сзади от основного направления движения.
Тут, как вы понимаете, в экран встраивается изображение со второй камеры и естественно такой метод отбирает много производительности. Поэтому в гоночных играх может быть до половины настроек графики — это настройки качества зеркал. Просто потому что у обычного изображения и изображения для зеркал равные и одинаковые по сложности графические конвейеры, но отдельные опции отрисовки можно отключать, чтобы падение производительности было не таким сильным. Это самый топорный метод, но учитывая, что зеркало должно быть в кадре постоянно — разработчики игр приносят в жертву производительность. Правда есть игры, где игровая механика требовала применение подхода дополнительных камер и кроме гонок, например в игре Portal.
Где один портал показывает картинку с виртуальной камеры положения второго портала.
При этом в игре — за порталом не создавалось дополнительное пространство, то есть за порталом не строилась дополнительная локация, а в момент пересечения портала — игрок мордой просто упирался в интерактивную текстуру показывающую другую камеру, ракурс которой определялся относительно текущего положения игрока около портала и потом игрока телепортировало на другой портал в этой же локации.
Да в общем-то сурс генерировать уровни и не умел. Planar Reflections сейчас применяется довольно редко так как имеются другие более гибкие и менее затратные по производительности методы.
Как вы понимаете — в обычных играх сложно разобраться с производительностью, когда вы подходите к зеркалу, то есть можно оптимизировать игру под какое-то среднее железо и 90% времени всё будет нормально, но стоит только в кадре появиться зеркало, которое реализовано такой технологией, как сразу же возникнет сильная просадка по производительности.
Поэтому для игр в которых зеркало было не постоянным элементом картинки — честные методы пришли далеко не сразу.
Дополнительные пространства и виртуальные зазеркалья
И тут мы переходим к группе методов с отрисовкой дополнительных пространств.
Наиболее неожиданный метод — это дублирование локации в зазеркальном мире. То есть рядом с локацией строится её зеркальный клон, в которой перемещаются все персонажи из нормального мира.
Метод этот, понятное дело, очень костыльный и для больших открытых локаций не подходит, так как нужно было бы за каждым зеркальным объектом построить всё окружение. То есть если в городе 10 зеркал, то за ними должны скрываться видимые части 10 городов. Это накладывало бы чрезвычайно большие рамки на левелдизайн, так как отражения бы занимали слишком много места в локациях, я уже не говорю про то, что они увеличивали бы нагрузку на процессор и видеокарту.
В общем — метод этот крайне ограничен и в текущий момент в виде реальных локаций не применяется. Но теперь представьте, что у вас есть город с кучей окон, водной гладью, лужами и прочими подобными предметами.
В них должны отражаться одни и те же объекты. Ну то есть сам город. И игроделы вывернули идею дополнительной локации наизнанку. И решили, что для зазеркалья можно не делать отдельные локации внутри основной, а можно поместить основную локацию внутрь невидимой окружающей локации, созданной специально для отражений.
Что касается реализации, то по сути никакого пространства создавать и не надо, нужно текстурировать внешнее окружение, получив так называемый куб мепс, а затем накладывать эту текстуру на объекты вокруг которых этот кубмепс был получен.
Так как текстуры были получены от внешних объектов, а накладываются на внутренние — то зеркальный разворот отражений появляется естественным образом. Проблема только в том, что кубмепс для реальной игровой сцены проблематично получить в реальном времени. Для его получения нужно было бы получить отрисовку сцены с 6 сторон с прогрузкой кучи лишней геометрии, а затем её накладывать на зеркальный объект.
В общем — по мощностям это не вывозимый объём для того чтобы делать его для в играх. Поэтому кубмепсы делаются из максимально упрощённой локации, либо в принципе заранее заготавливаются для каждого зеркального объекта, то есть хранятся как обычная текстура, которая накладывается на предмет исходя из расположения игрока относительно зеркального объекта.
В целом — лично для меня накладывание этих вывернутых текстур напоминает почему-то популярную иллюзию (купить такую можно тут например) с дракон, который следит за наблюдателем.
Смотришь ты внутрь объекта, а накладывается текстуры от наружных.
Ну и естественно главный недостаток того, что это делается не с настоящим миром — это то, что в таких отражениях нельзя отразить игрока, нельзя отразить любые динамические объекты, проезжающие машины, разрушаемые объекты и т.д.. А порой игроделы вообще забивают на то, чтобы исправлять кубмапсы в процессе доработки игры и в отражении можно увидеть кубмапсы из недоделанной игры, то есть отражаются те вещи, которых в игре нет, или не отражаются даже статические объекты, которые в игре есть, но которых не было на момент разработки игры и создания кубмепса. Или пререндеренные кубмепсы смещены относительно тех мест, где они должны были быть созданы.
Комбинации методов
Ну и, конечно, тут начинаются первые комбинации методов. Зачастую отражений кубмепсами хватает для большинства задач, а не хватает их только в паре мест, в которых нужно отражение игрока. То есть в зеркалах для того чтобы в них смотреться.
Опять же для этого тоже применялись полноценные зеркальные комнаты, но дополняя кубмапс вируальным игроком — в целом можно уже получить и отражение игрока.
Естественно в таких случаях — это не отражение игрока, а отражение другого персонажа, который выглядит и дейсвует как персонаж. Отсюда берется и множество глюков зеркал в играх где применяются набор разных технологий, которые должны друг на друга накладываться.
Иногда возникают проблемы с отрисовкой игрового персонажа, иногда персонаж может подгружиться с запозданием, а иногда наоборот потусторонний игрок загружается, а окружение — нет.
Как правило игроделам приходится ещё и находить такой ракурс расположения зеркала, чтобы сделать сшивку технологий менее заметной. Ну то есть опять же есть ограничения в левел дизайне. Некоторые разработчики вообще создают отдельные локации только из-за того, что в них надо будет поместить зеркало.
Screen Space Reflections
Но есть и кардинально иной подход к созданию отражений. Дело в том, что зачастую отражается то, что уже есть в кадре.
То есть иногда надо применить немного геометрии и сделать реальное отражение в отражающих объектах взяв уже отрисованные куски кадра. Из плюсов — эта технология не требует дополнительных расчётов графики и является элементом постобработки. То есть накладываются дополнительные текстуры из уже отрисованного кадра. В чистом виде такой вид применяется редко по очень важной причине — его отражения геометрически неверны. Дело в том, что когда мы смотрим на отражения — мы видим объекты которые между нами и зеркалом с разных сторон. Естественно — Screen Space Reflections не может показать нам обратную сторону объекта.
Аналогично и с освещением. В зеркальных отражениях — тени объектов направлены под другими углами. Естественно Screen Space Reflections не может родить эти изменения в отображении. Ну и главный недостаток — как только какой-то объект скрылся из кадра или его закрыл другой объект, который ближе к камере — этот объект пропадает и на отражениях.
Что касается искажения геометрии — несмотря на то что оно сильное — его не очень видно, за исклюением случаев, когда мы играм от третьего лица и видим в отражении затылок персонажа.
Также — появление отражений трассировкой сильно расслбило разработчиков, которые делают игры уже исходя их того что они должны выглядеть нормально с DXR, а как они выглядят без него — уже никого не волнует. Например в Control выключив отражение трассировкой можно наловить очень много кринжатины.
Раньше разработчики подстраивали локации и отражающие поверхности в них под имеющиеся технологии так чтобы в уровнях было видно минимум технических дефектов. И эти ограничения очень значимые, по сути используя скрин спейс рефлекшен надо было следить за тем чтобы между отражающей поверхностью и камерой ничего не находилось, так как это корректно отразить было невозможно. И всё надо было размывать чтобы скрыть детали, иначе косяки были бы слишком заметны.
DXR off DXR on
Так как у технологии есть сильные недостатки — она может быть комбинирована с другими методами. Допустим на поддержку скрин спейс рефлекшен для мест, отражений, которые не подгружены могут подрисовываться куб мепсы. Проблема в том, что эти отражения отличаются по детализации, качеству и соответствию геометрии, так что нужно продумывать как будут выглядеть переходы и где они возможны. Гораздо проще состяковать скрин спейс рефлекшен с отражениями трассировкой.
В текущий момент, если в играх есть поддержка DXR отражений, то обычно отражения трассировкой работают для близких объектов, чтобы уменьшить радиус на котором работают лучи, а за дальние отражения отвечает спейс скрин рефлекшенс.
Таким образом можно избавиться от большей части проблемных мест скрин спейс рефлекшенс.
Трассировка лучей
Ну, и конечно, осталось кратко рассказать про отражения трассировкой. Я отношу этот метод к категории честных отражений, то есть в ту группу, где дополнительные камеры. Естественно общего в реализации этих технологий ничего нет. Но есть общие плюсы — отражается то что есть в игровом движке с сохранением всей геометрии и с правильной работой света и тени, в отличие от скрин спейс рефлекшенс. Имеется виду света и тени не трассировкой, а хотя бы — в рамках используемых технологий движка игры. Достоинства этого методы в том, что сохраняется одна камера, и всё изображение строится исходя из её положения. Отражения учитывают всю внешнюю геометрию. В этом кроются и недостатки — в окрестностях камеры — отключается оптимизация по отсечению объектов вне поля зрения, то есть увеличивается нагрузка на этап подготовки кадров, из-за этого для работы трассировки требуется не только мощная видеокарта, но и центральный процессор. Видео с тестами насколько игры становятся прожорливее на центральный процессор от включения трассировки на канале, кстати было уже года два назад.
Ну и, конечно, очень сильно возрастает нагрузка на видеокарту, что является главным и, по сути, единственным недостатком данной технологии. По показанным отрывкам вы можете ещё и увидеть, что видеокарты настолько недостаточно, что на построение картинки требуется копить лучи с нескольких кадров, из-за чего появляются шлейфы и размытия при резких движениях.
Но есть и огромные плюсы — нет ограничений на сложность отражений и на сложность геометрии отражающих объектов. Кроме того — рассеянные отражения, а также — увеличение размытости отражений при удалении от шершавых поверхностей выглядят как и в жизни и обеспечиваются естественным следствием применяемых алгоритмов.
Видно как при удалении от стола падает чёткость в отражении (это настоящее фото)
То есть для поверхности надо задать её шероховатость и все нужные эффекты появятся автоматически, так как они симулируются естественными алгоритмами, описывающими то как это происходит в реальности. Нет ограничений по сложности поверхностей. Подходят любые формы отражающих поверхностей, что не может работать с планар рефлекшнс.
В общем — у каждой из технологий есть ограничения и недостатки. Естественно меньше всего ограничений у самых новых технологий, но и по требуемым производительностям — они самые жрущие, так что пока им помогают менее совершенные варианты.