Привет. Сегодня хотелось бы написать о такой вещи, как отражение света от поверхностей и рассеивании света в видеоиграх. Всё началось с замечательной конторы 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. Обратите внимание на шахту системы вентиляции и на то, как приломляется свет.
Игры становятся всё более и более реалистичными и, возможно, скоро они будут передавать всю физику реального мира.
Если есть какие-то замечания/предложения- буду рад прочитать!