Как стать автором
Обновить

Перевод: Анатомия игрового движка Total War, Часть 1

Время на прочтение3 мин
Количество просмотров11K
Автор оригинала: Tamas Rabel is lead graphics programmer at Creative Assembly, working on the Total War games.


Добрый день, уважаемые читатели. Вашему вниманию предлагается перевод увлекательной серии статей по архитектуре игрового движка Total War.

Кому интересно, добро пожаловать под кат!

Позвольте мне начать с поверхностного разбора законченного рендера Total War: Attila. В следующих нескольких статьях я расскажу вам о серьёзных изменениях и оптимизациях, которые были сделаны во время разработки Total War: Warhammer.

Тени


Каждый новый кадр начинается с отрисовки теней от основного направленного источника света. Используются каскадные карты теней: 2 — 4 каскада в зависимости от настройки графики. Ландшафт не отрисовывается в карту теней, но для стратегии реального времени, как вы могли уже представить, мы отрисовываем огромное количество маленьких объектов по сравнению с шутерами от первого или третьего лица, которые рисуют меньше, но более детально. На скриншоте ниже изображен финальный кадр движка Total War: Attila.



Ландшафт


Ландшафт — одна из самых важных частей в нашей игре. Будучи стратегией в реальном времени, ландшафт в нашей игре несколько отличается от ландшафта в играх от первого лица. Мы ориентируемся на средние-дальние дистанции, а не на ближние. Ландшафт должен быть разбит на повторяющиеся паттерны – тайлы, и иметь плавный переход между различными видами ландшафта. Также должно поддерживаться мгновенное перемещение при щелчке игрока по миникарте, что создает дополнительные трудности с потоковыми техниками. Также на карте находится множество мешей (часть скалы, к примеру), которые должны смешиваться с текстурами ландшафта, которые, в свою очередь, сами являются комбинацией нескольких слоев.

Каждое поле боя содержит множество тайлов, кусков, на которые разделена карта. В играх серии Total War глобальная карта огромна, поэтому невозможно заставить художников и моделеров создать её целиком вручную. Для того, чтобы справиться с этим, они используют тайлы. Сам тайл можно представить в виде отдельной карты. Однако когда вы начинаете битву на карте компании, поле боя собирается из окружающих тайлов которые могут быть разные – как по размеру, так и по форме. В результате получается, что каждое поле боя собрано из нескольких тайлов, где каждый тайл использует свой собственный набор текстур. Чтобы спрятать артефакты при сшитии тайлов, мы смешиваем их текстуры.

К примеру, представьте Т-образное пересечение тайлов леса, пустыни и болота. Каждый тайл содержит 8 слоёв текстур, и в некоторых точках необходимо смешать текстуры всех трёх тайлов, что означает потенциальное смешивание 24 слоёв на каждый пиксель. Каждый слой содержит текстуры –нормали и отражающую/блестящую, что означает 24×3 = 72 текстур на пиксель. У нас нет ограничений, как много тайлов/слоёв могут смешиваться.

Что бы удовлетворить все нужды, сначала мы отрисовываем только карту глубины (включая сгенерированный ландшафт и меши, созданные художниками). После мы пробегаем screen-space алгоритмами по каждому тайлу, каждый из которых имеет собственную карту смешивания и проецирует слои на геометрию, которую вы можете представлять как большую спроецированную декаль.

GBuffer


В GBuffer хранится 3 текстуры в следующем виде:



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

Вы также могли заметить, что мы используем рассеивающий/отражающий материал, а не цветной/металлический. Это некая традиция, и мы в процессе изменения.

Освещение


Большая часть освещения поступает от основного направленного источника света. Существует статистически просчитанная BRDF модель, которая физически правильна и дает распределение микрофасетов, основанное на гауссовом распределении. Впервые эта модель была представлена в Total War: Rome II. Это дает идеальные (невытянутые) зеркальные отражения сферы и позволяет работать с размером солнечного диска.

Total War: Attila имеет свою реализацию системы глобального затенения (ambient occlusion).

Частицы


Частицы создаются на CPU, но симулируются и обрабатываются на GPU. Поддерживаются три типа GPU частиц: квад (quad), спроецированные декали и ненаправленный источник света. Поверх всего этого находится CPU пайплайн с ограниченной функциональностью для частиц, состоящих из мешей.

Tonemapping


Мы используем tonemapping оператор, основанный на кривой с автоматическими уровнями, которые, в свою очередь, основаны на средней/минимальной/максимальной яркости на экране.

Пайплайн Total War: Attila (упрощённый)




В следующей статье мы рассмотрим, как замеряется производительность в Total War и взглянем на основные шейдерные оптимизации, позволяющие получить нужную производительность.

От переводчика PS:
О некоторых темах («Tonemapping» и «зеркальные отражения сферы») у меня есть только теоретические поверхностные знания, поэтому был бы очень признателен за конструктивную критику и комментарии к переводу.
Теги:
Хабы:
+8
Комментарии5

Публикации

Истории

Работа

Программист C++
129 вакансий
QT разработчик
7 вакансий

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн