Хитрости в разработке игрового арта #2 Окна

Не сочтите за странность, но я очень люблю окна, так что позвольте мне показать вам самые классные экземпляры, которые я когда либо видел в играх.

Я уже разбирал ранее то, как создали эффект присутствия помещений за окном в Assassins Creed 3 в прошлой статье, но я всё таки напомню вам основные моменты. Вот так это выглядит в игре:

Интерьер тут создается с помощью размытой текстуры, которая тайлится и двигается с помощью Bump Offset Mapping, чтобы зафейкать параллакс..по крайней мере я так думаю.

Этот способ хорошо подходит для Assassins Creed 3, он придает стеклу матово молочный вид, что соответствует тому времени, в котором происходит игра, но существует ещё много других способов достичь лучшего результата и именно о них речь пойдет в этой статье.

Saints Row - безумная игра. В ней даже окна безумные(в хорошем смысле). В них используется схожая с Assassins Creed 3 техника, но в данном случае вместо мыльных текстур используются четкие. Я и подумать не мог, что это может работать так хорошо:

Давайте разберемся. Что вы видите в ночной версии текстуры парикмахерской? Вам не кажется что что-то пропало? Точно, плакаты!

Они накладываются отдельно поверх окон. Ниже вы можете видеть текстуру плакатов:

Какие-то подозрения появляются только если посмотреть на всё это дело под определенным углом:

sr3_window_horizontally_01

Также хорошо то, как незаметно тайлится текстура, создавая в месте перехода тайла угол комнаты. Выглядит вполне правдоподобно. Ниже вы можете видеть демонстрацию этого эффекта:

С Saints Row пока что всё, давайте посетим Bioshock.

Как по мне, так это самый продвинутый способ создание окон в играх. Что вы видите тут?:

bi_window_parallax

На первый взгляд это простая деревянная комнатка, в которую поставили парочку объектов для создания лучшего параллакс эффекта, верно? Но давайте посмотрим внимательней:

Для тех, кто не в курсе, скажу, что левелдизайнеры добавили в игру моменты, когда Элизабет подходит к этой витрине и заглядывает в окно. Это классная деталь, но вот что героиня игры не делает(а мой друг, который показал мне это, сделал), так это не заглядывает в эту витрину с другой стороны:

bi_window_all_sides_01

Если бы это место создали таким образом, который я описал выше, получили бы мы такой эффект? Нет.

Если кратко, то это ещё один безумный трюк с использованием шейдеров. Я порылся в файлах игры и нашел ту самую текстуру, которую использовали для создания этой витрины:

Я не уверен насчет предназначения каналов(для создания карты нормалей вроде этой нужно всего два канала, так что остальные, похоже, отвечают за эффект искажение для стекла), но красный канал выделяет зону, в которой находится фигурка орла, которая выполнена с помощью спрайта. Вот так выглядит фактическая текстура, которая регулируется с помощью тех каналов выше:

bi_window_texture_interior_01

Постойте, но ведь область с орлом движется быстрее, чем те игрушки на фоне, разве не должно быть какого-то разрыва между ними? Это ведь тоже самое, как когда ты вырезаешь и перетаскиваешь какой-то объект в фотошопе, на его месте остается пустое место, которое нужно чем-то заполнить...именно для это существует вторая текстура:

bi_window_texture_interior_02

Кроме того, что мы уже разобрали, можно обратить внимание ещё на две интересные вещи:

1. Если посмотреть на гифку ниже, можно заметить, что у стекла есть что-то вроде общего отражения(если попробовать рассмотреть стекло под определенным углом, то можно заметить, что это просто какое-то голубоватое отражение). По-моему это хороший способ чтобы:

а) сделать стекло более реалистичным

б) избежать всех этих искажений, которые мы могли видеть в SR3

bi_window_all_sides_01

Ниже можно увидеть как спрайты игрушек поворачиваются вслед за нами:

Итак, мы только что увидели очень классный шейдер, который создали волшебниками в области кода...но зачем вся эта морока? Почему нельзя было использовать обычный шейдер для стекла, а всё остальное создать с помощью геометрии? Я уверен, что правильных ответов больше, но вот две главные причины по моему мнению:

1. Создание такого шейдера с помощью кода экономит очень много времени в сравнении с созданием того же самого с помощью более традиционных методов, особенно если речь зайдет о внесении каких-то глобальных изменений в готовый ассет.

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

Перевод был подготовлен в рамках проекта CgTranslate.

Спасибо за внимание и удачи!