Добрый день, уважаемые читатели. Вашему вниманию предлагается перевод увлекательной серии статей по архитектуре игрового движка Total War.
Часть 1
Часть 2
Часть 3
Часть 4
Часть 5
Кому интересно, добро пожаловать под кат!
Позвольте мне начать с поверхностного разбора законченного рендера 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» и «зеркальные отражения сферы») у меня есть только теоретические поверхностные знания, поэтому был бы очень признателен за конструктивную критику и комментарии к переводу.
ссылка на оригинал статьи https://habrahabr.ru/post/314744/
Добавить комментарий