Как работают отражения в играх?
В реальном мире зеркала и блестящие поверхности отражают окружающий мир, но в видеоиграх все работает немного иначе. Разработчикам постоянно нужно думать о том, как заставить отражения работать на пользу виртуальным мирам. Портал hotwogeek.com рассказал, к каким хитростям прибегают создатели игр, чтобы сделать реалистичные отражения.
До расцвета трехмерного рендеринга старые двухмерные игры использовали самые разные трюки для создания иллюзии отражений. Например, если персонаж бежит по водному уровню, разработчики могли перевернуть его спрайт и наложить на поверхность воды, обработав фильтром. А если персонаж вдруг встает перед зеркалом, то всего-то и нужно, что перевернуть его спрайт по горизонтали.
Когда на рынок пришли трехмерные игры, отражения начали требовать иного подхода. Довольно популярным трюком были «порталы» — отзеркаленные копии комнат. Так, в Duke Nukem 3D каждое зеркало было, по сути, окном в другую комнату, где копия персонажа двигалась синхронно игроку.
Другой распространенной техникой были планарные отражения: рендеринг сцены от перспективы рефлективной поверхности, такой как зеркало или водная гладь. Метод довольно эффективный, но затратный в плане вычислительных ресурсов. По крайней мере, он был затратным на первых порах. Планарные отражения до сих пор используются в играх, просто в сочетании с другими трюками, чтобы добиться правильного сочетания производительности и графики. Например, они часто встречаются в Half-Life 2.
Еще один популярный метод для создания фейковых отражений — кубические карты. Шесть изображений окружения помещаются на шесть граней виртуального куба, после чего размываются. Это хороший трюк для блестящих объектов, вроде машин или лобовых стекол, из-за чего им часто пользуются разработчики гоночных игр. Несмотря на свой почтенный возраст, кубические карты по-прежнему применяются в индустрии.
Но, пожалуй, самым популярным современным методом рендера отражений можно назвать SSR — Screen Space Reflection, или пространственные отражения. SSR не требует дополнительного рендера: вместо этого динамические отражения генерируются за счет информации о сцене, что экономит вычислительные ресурсы.
Правда, из-за того, что SSR может генерировать отражения только для объектов на экране, техника также создает различные артефакты графики. Пространственные отражения на блестящих полах или поверхности воды обрезаются по краям экрана, потому что там нет видимых объектов. Кроме того, объекты в отражении будут периодически исчезать и появляться вновь по мере того, как они покидают поле зрения игрока.
SSR также не работает на, собственно, зеркалах. Именно поэтому зеркала в играх, использующих этот метод, часто «замыленные», грязные или похожие на отполированный металл. Проблема в том, что зеркала отражают все, что находится позади игрока… Но для того, чтобы отражения появились, объекты должны быть в поле зрения. А если игра от первого лица, то игрок не может отражаться в зеркалах, потому что его не видно на экране.