Хитрости в разработке игрового арта #3 ЛОД'ы и декали

Fallout 3 – Edges

Маленькая деталь, которая меня очень впечатлила в fallout 3, это как они обыграли разбитые края на бетонных обломках. Вы только посмотрите на этот элемент! Выглядит классно, будто бы это high poly. Но если посмотреть на этот же объект сбоку, то становится ясно, что всё не так просто…

fallout3

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

Вот так выглядит сетка этого объекта(картинка ниже). Сначала я подумал, что они использовали дополнительную геометрию на краях, но скриншот сетки вроде как опровергает эту теорию.. но об этом поговорим в конце заметки.

Порывшись в файлах игры, я нашел ту самую текстуру сколов, которую мы наблюдали во время игры. Также интересно, что в fallout они использовали диффуз, у которого разрешение вдвое больше, чем у нормала. Поэтому на следующей картинке diffuse и normal текстуры так отличается по размерам.(Красным я отметил ту часть, которую мы видели раньше на скриншотах)

stone_decaltexture

Кстати говоря, интересно что разработчики сохранили specular map в альфа канале карты нормалей. В данном случае, на этих декалях используется абсолютно белая карта specular. Я не могу понять, почему разработчики не использовали альфа канал по стандартному назначению. Обычно, когда у текстуры нет альфа канала, его значение и так автоматически = 1.0, то есть абсолютно белому. Но наверняка есть какая-то причина делать именно так, которую я пока что не могу понять.

Давайте поговорим о декалях. Throttlekitty заметил, что разработчики используют декали в комбинации с параллакс маппингом. Насчет последнего я не уверен, потому что обычно для создания параллакса требуется карта высот(в дополнение к карте нормалей), но её я тут не вижу.

Wichenroder скинул ссылку на мануал для CryEngine, где объясняется как такое возможно.

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

stone_wireframes02

Для того, чтобы разузнать чуть больше, я установил GECK(инструмент для создания модов в Fallout). С его помощью удалось убрать лишние объекты и узнать кое что новенькое:

house_example

Falk подметил, что, возможно, художники расставляли все декали в движке и сохраняли их в качестве префаба. Таким образом, левел дизайнеры могли бы создавать вариации объектов просто расставляя префабы в разных местах.

Мой коллега Markus посоветовал попробовать использовать Intel GPA для того, чтобы копнуть немного глубже. И с помощью этого классного инструмента я смог сделать вот такой скриншот:

fallout3_noalphatest

Нет, я не закрасил часть текстуры черным цветом, как вы могли подумать. Я просто отключил Alpha1/Alphatest и получил вот такой вот результат. Это не доказательство, но неплохой аргумент в пользу того, что они использовали именно доп. геометрию для этих углов.

В итоге, не так давно мне удалось пообщаться с одним чуваком из Crytek, который знаком с другим чуваком из Crytek, который в прошлом работал в Bethesda. Он сказал мне, что в Bethesda они делали это именно так, как это было описано на странице по cryengine. Также он сказал, что они не парились насчет дополнительной геометрии для декалей, потому что просто удаляли их на ЛОД’е…Умно.

Assassins Creed 3 – LoD Blending

Пока мой коллега Matthias записывал гифки для статьи по окнам в AC3, я был вынужден запускать игру на низких настройках графики, чтобы иметь хоть сколько-то нормальный fps. Грустно, но это дало мне возможность обратить внимание на другой интересный аспект этой игры, а именно - на способ переключения лодов (LOD - level of details. Для тяжелых ассетов всегда делают несколько дополнительных вариаций с меньшим полигонажем, чтобы не отрисовывать на дальних дистанциях нагруженные модельки) На высоких настройках графики вы этого не увидите т.к они переключаются почти незаметно на дальних дистанциях.

Посмотрите на гифку снизу. Видите как поверхность объекта становится шумной и в конце подменяется на более детализированный ЛОД? Выглядит как результат работы alpha1/alphatest.

lodchange01

Я знаю как минимум две(даже три) техники, как можно подменять лоды между собой.

1. Без использования смешивания. Сначала вы видите один объект, а как только подойдете чуть ближе, он моментально меняется на более детализированную версию.

2. Плавная подмена с помощью alpha8.

3. “Шумная” подмена с помощью alpha1/alphatest (как на гифке выше)

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

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

lodproblem01

Источник: https://www.garagegames.com/community/forums/viewthread/90667

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

Оригиналы:

https://simonschreibt.de/gat/fallout-3-edges/ - про Fallout 3

https://simonschreibt.de/gat/assassins-creed-3-lod-blending/ - про Assassins Creed 3

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

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