11 июня 2020 11.06.20 43 33K

Обман игроков, или как устроены отражения в играх.

+85
Лучший блог недели
1000 ₽

ПРЕДИСЛОВИЕ

Довольно часто разработчики игр пытаются сделать отражения в своих играх как можно более правдоподобными, но знаете ли вы, что с отражениями в реальной жизни они не имеют ничего общего. Практически всегда это обман. Создать эффект отблеска зеркал, переотражения на воде, преломление света от осколков стекла помогают многочисленные ухищрения и упрощения создателей игр. Сегодня нескольких таких методах мы и поговорим. 

МЕТОДЫ

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 (глобальное освещение и карты теней).

  • Технология GI (GI — global illumination (глобальное освещение)) очень давно используется в играх для создания лучей света и отражения их от поверхностей, а также преломления. Технология в целом связана не с отражениями, а с построением и правильным прелоилением лучей света, однако без этой технологии многие методы создания отражений просто не работают. Само понятие — глобальное освещение включает в себя множество технологий, (например: Light Propagations Volumes(LPV); Distance Field Ambient Occlusion(DFAO); Distance Field Global illumination(DFGI); Screen Space.) но практически все они базируются на построении лучей света. DFAO например работает (в Unreal Engine) только от света от неба, то есть солнца, другие источники света игнорируются. Метод позволяет создать более реалистичный свет и немного упростить разработчикам процесс создания проекта. До этой технологии применялось только прямое освещение, но оно выглядело весьма не реалистично, с приходом же глобального ситуация стала на порядок лучше. Также прямое освещение работает статично и не перестроится для игрока если потребуется (Глобальное же освещение работает динамически). Но метод не лишён недостатков, один из таких — гораздо бОльшая затрата времени на «render» сцены. 
  • Shadow map (Shadow map — карты теней) используются как нетрудно догадаться для создания теней в играх. (Вообще GI и Shadow Map мало связаны друг с другом, однако решил объединить в один пункт, так как мало что интересного можно написать). Сам метод очень старый (1978 года выпуска), и до сих пор несмотря на эволюционные изменения базируется всё на тех же принципах, что и много лет назад. Как же он работает? Помимо карты нормалей и основной текстуры для 3D моделей рисуется ещё и карта теней, её вы и видите когда какой-нибудь объект отбрасывает тень. Самое главное достоинство в том, что такой метод позволяет наблюдать за тенью с разных ракурсов и она динамически перестроится для игрока. (Для построения таких карт используются например такие технологии: Distance Field Soft Shadows (DFSS); Cascaded Shadow Maps(CSM)). Карты теней неразрывно связаны с Qube Maps, так как работают во взаимодействии друг с другом, слой отражений кубической карты может накладываться на карту теней (Часто разработчики «играют» с прозрачностью тех или иных слоёв), тем самым получая более реалистичную графику. Примеры GI и Shadow map на скриншотах ниже.

8. Дополнительная камера.

Этот способ довольно редко используется в играх, так как требует очень много ресурсов и в целом он очень похож на способ #1, однако он очень прост в реализации, поэтому его используют в основном  неопытные разработчики. Суть в том, что помимо камеры игрока (через неё вы видите всё, что происходит на экране) создаётся ещё одна с таким ракурсом, чтобы кадр для последующего отражения получился естественным. Далее на полученный кадр накладываются эффекты (самый частый из них это размытие) и для экономии ресурсов понижается разрешение (но даже с пониженным разрешением ресурсов требуется слишком много). Кроме высокого потребления ресурсов ПК, ещё одним недостатком является статичность кадра, то есть где бы ваш персонаж не встал, отражение не перестроится (хотя через «множество костылей» это можно реализовать, но это очень глупо, поскольку есть способы лучше, тот же SSR). Примеры на скриншотах внизу.

 КОНЦОВКА 

Сегодня вы узнали для себя чуть больше об отражениях в играх, надеюсь вы не жалеете о потраченном времени на прочтение, я же в свою очередь за уделённое мне время вас благодарю. (Можете также посмотреть новый блог о самых популярных игровых условностях у меня в профиле, мне будет приятно если именно вы его прочитаете)

ССЫЛКИ НА ВСЕ ИСТОЧНИКИ

 

Лучшие комментарии

На этот раз получилось оригинально — полезный материал, от меня (+).
Но не помешало бы добавить ссылку на литературу/контент, на основе которого сделали этот Пост.
Чтобы другие не придирались, а здесь такие найдутся и поставят минус без комментариев.
Подозреваю, что вдохновлялись Вы одним из свежих роликов XYZ.


Поместить источники можно под спойлер, как это сделал bodiesobtained в своём последнем посте — stopgame.ru/blogs/topic/103272
Так и есть, решил написать материал благодаря XYZ. Ссылки на все исто добавлю буквально в течение пары часов. Благодарю за конструктивную критику снова.
Спасибо за отличный блог. Было приятно прочитать.
Приятно слышать. И тебе спасибо за тёплые слова.
ССЫЛКИ НА ВСЕ ИСТОЧНИКИ

Ссылки на картинки можно было не добавлять)
В Mafia 3 для отражения в стекле используются шейдеры. (Практически тоже самое, что первый способ в статье) Во всём виновата криворукость разработчиков, в Unreal Engine например такой подход повсеместно используется и особых проблем не возникает. Кстати в Мафии 3 проблемы не только с отражениями, там вся игра «утопает» в багах.
Стоит принять во внимание то, что Quake ll вышел в 1999 году и движок вообще не был приспособлен к какой-либо трассировке лучей, поэтому «артефакты изображения» имеются.
Аффтар,
про GI написал наотъебись, и вообще-то соврал: это не одна технология, а большое семейство технологий. GI может как использовать карты теней, так и обходиться без них: например GI может быть реализован через Cone Tracing или Ray Tracing (у него в этом случае отдельное имя — RTXGI).
GI — это вообще-то не про отражения и лучи света, а про реалистичное оствещение.
— GI — чрезвычайно интересная и увлекательная тема. Рарзберись в ней. Я тебя уверяю: это не меньше чем на пару недель. Там у каждой технологии есть свои плюсы и минусы, каждая по-совему интересна.
Благодарю, хотя я лично не вижу в этом блоге ничего особенного.
Если без шуток — RTX рили кайфовая вещь если ее допилить. В мультиплеере ее никто юзать не будет т.к. чем меньше всяких улучшалок — тем выше ФПСы, а вот в какой нить хорошей игре на прохождение, условном CP2077, это очень сильно поможет (если ее правильно сделать) погружению и визуалу.
Да. Потому что за идею, а не за деньги. (Можешь глянуть новый блог. Сегодня написал.)
Познакомился с рейтрейсингом через Quake II RTX и оценил как достоинства так и недостатки технологии. Из редко выделяемых достоинств — очень круто выглядят прозрачные и полупрозрачные объекты. Из недостатков — тени от подвижных объектов оставляют еще весьма заметный шумовой след.
Вероятно ты прав, но RTX не очень просто интегрировать в движок, да и в самом проекте придётся удалять все источники света, и заменять их лучами RTX. (Естественно все источники света останутся, если трассировку не включать).
спасибо, тоже хотел задать этот вопрос

Азазин, например, объяснял «запотевшие» зеркала в Мафии 3 дымом от пригорающих задниц игроков)
Азазин, например, объяснял «запотевшие» зеркала в Мафии 3 дымом от пригорающих задниц игроков)

Ты прав, хотя я отказался от своего косаря.
Не в курсе, ни в Garrys Mod ни в Half Life не играл.
Читай также