ПРЕДИСЛОВИЕ
Довольно часто разработчики игр пытаются сделать отражения в своих играх как можно более правдоподобными, но знаете ли вы, что с отражениями в реальной жизни они не имеют ничего общего. Практически всегда это обман. Создать эффект отблеска зеркал, переотражения на воде, преломление света от осколков стекла помогают многочисленные ухищрения и упрощения создателей игр. Сегодня нескольких таких методах мы и поговорим.
МЕТОДЫ
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). Примеры на скриншотах внизу.
КОНЦОВКА
Сегодня вы узнали для себя чуть больше об отражениях в играх, надеюсь вы не жалеете о потраченном времени на прочтение, я же в свою очередь за уделённое мне время вас благодарю. (Можете также посмотреть новый блог о самых популярных игровых условностях у меня в профиле, мне будет приятно если именно вы его прочитаете)
ССЫЛКИ НА ВСЕ ИСТОЧНИКИ
i.ytimg.com/vi/Ltcfj9ff0e0/maxresdefault.jpg i.ytimg.com/vi/45pfvYX-fxU/maxresdefault.jpg i.ytimg.com/vi/H33lW9MWpdg/maxresdefault.jpg i.imgur.com/eFyusZW.jpg upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Skybox_example.png/220px-Skybox_example.png i.redd.it/rbfno5ztsti11.png sakibsaikia.github.io/images/KF2-SSR-1.png uengine.ru/wp-content/DocPics/PostProcess/SSR/GlossyScreenSpaceReflection.jpg pbs.twimg.com/media/DmSFwj9X4AE4CzL.jpg 3dnews.ru/assets/external/illustrations/2017/07/04/954940/sm.Crash_Bandicoot_Col_PS4_Review_16.800.jpg docs.unrealengine.com/Images/Engine/Rendering/LightingAndShadows/PlanarReflections/PlanarReflections_Enabled.jpg www.native-game.com/wp-content/uploads/2018/12/planar-Reflections-UE4.png leogaming.net/img/news/uploads/58839d2455c9bmaxresdefault.jpg fotogora.ru/img/blog/or/2019/10/10/15635.jpg i.ytimg.com/vi/TF0AkVnPzYo/maxresdefault.jpg www.nvidia.com/content/dam/en-zz/ru_ru/Solutions/design-visualization/iray/design-pro-visualization-products-iray-features-iray-vr-843-u.jpg forums.unrealengine.com/filedata/fetch?id=1148704&d=1430000856 cdn1.epicgames.com/ue/item/RealtimeGI_Spotlight_screenshot_01-1920x1080-cc06052e8a5a2992df3e4c0a725ecd53.png
Лучшие комментарии
Но не помешало бы добавить ссылку на литературу/контент, на основе которого сделали этот Пост.
Чтобы другие не придирались, а здесь такие найдутся и поставят минус без комментариев.
Подозреваю, что вдохновлялись Вы одним из свежих роликов XYZ.
Поместить источники можно под спойлер, как это сделал bodiesobtained в своём последнем посте — stopgame.ru/blogs/topic/103272
Ссылки на картинки можно было не добавлять)
про GI написал наотъебись, и вообще-то соврал: это не одна технология, а большое семейство технологий. GI может как использовать карты теней, так и обходиться без них: например GI может быть реализован через Cone Tracing или Ray Tracing (у него в этом случае отдельное имя — RTXGI).
GI — это вообще-то не про отражения и лучи света, а про реалистичное оствещение.
— GI — чрезвычайно интересная и увлекательная тема. Рарзберись в ней. Я тебя уверяю: это не меньше чем на пару недель. Там у каждой технологии есть свои плюсы и минусы, каждая по-совему интересна.
Азазин, например, объяснял «запотевшие» зеркала в Мафии 3 дымом от пригорающих задниц игроков)