Как разработчики оптимизируют игры
Перейти к содержимому

Как разработчики оптимизируют игры

  • автор:

Как работает оптимизация игр?

Как работает оптимизация игр?

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

Оптимизация игры — это процесс повышения производительности для улучшения игрового процесса и визуального восприятия.

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

Зачем оптимизируют игры?

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

А для того, чтобы получить безумно красивое изображение и высокий FPS, игре требуется очень мощное железо, часто превосходящее даже то, что есть в наличии у игроделов. Не говоря уже об обычных пользователях.

Чтобы вы лучше понимали, приведем немного цифр. Производительность встроенного видеочипа в Sony Playstation 4 (базовая версия) — 1,84 Тфлопс. Одна из самых популярных, но уже относительно устаревших видеокарт Nvidia GeForce GTX 1060, выдает около 4 Тфлопс. При этом ее ресурса уже не хватает на самые требовательные ПК-игры в высоком разрешении.

Так как же разработчики умудряются выпускать шедевры вроде God of War или Last of Us 2 на устаревшей «начинке» PS4? Да так, что подобные тайтлы не только не режут глаза, но и заставляют восхищаться такими пейзажами, каких не увидишь в реальной жизни?

У них есть свои профессиональные секреты и хитрости, о которых сейчас и пойдет речь.

Мир существует, пока я его вижу

Отображение сотен объектов на экране и работа со светом и тенями — это самые ресурсоемкие процессы, требующие больших мощностей. Что придумали разработчики, дабы снизить нагрузку с видеокарты?

Они заставляют ее рендерить (отрисовывать) только те объекты, которые видит игрок. Например, в GTA V за спиной игрока город, люди, автомобили просто не существуют (но вы этого не замечаете). И это логично, так как тратить ресурс видеокарты на симуляцию жизни огромного города, который вы все равно не видите, было бы преступлением.

Вот как это работает на примере Horizon Zero Dawn.

А здесь еще нагляднее.

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

Про историю с Silent Hill не слышал, наверное, только ленивый. В 1999 году производительность Sony PlayStation была такой низкой, что отобразить относительно большой мир не было возможности. Тогда разработчики окружили игрока туманом, который ограничивает дальность видимости. Это позволило оптимизировать игру под возможности консоли. Но самое важное, что такое «случайное» решение стало визитной карточкой серии. Туман добавлял в игру элемент мистики и как нельзя лучше играл на атмосферу Silent Hill.

Исчезающие объекты

Для улучшения производительности разработчики часто избавляются от дополнительных объектов путем их исчезновения. Пропадающие после выстрела гильзы или исчезающие тела поверженных противников — такое можно встретить минимум в половине шутеров. Представьте Serious Sam, Painkiller или любой другой «мясной» шутер, где тела не пропадают. Игроку пришлось бы как минимум идти «по колено в крови».

Клонирование

Копирование текстур и объектов — это самый часто используемый способ оптимизации игры. Возьмите любую игру, и вы найдете кучу одинаковых предметов. Особенно это бросается в глаза в старых играх. Например, в шутере FEAR большая часть офисов, включая предметы на столах, стулья и прочее выглядят, как под копирку. Так и есть — это одни и те же модели. Такой подход плох лишь тем, что делает игру менее уникальной и разнообразной. Зато повышает FPS.

В играх с открытым миром тоже много подобного копирования. Здания в Mafia или GTA часто не блещут разнообразием: одни и те же «бетонные коробки» просто разбросаны по разным частям игровых локаций, чтобы не слишком бросаться в глаза. Что уже говорить про рядовых НПС: уникальны лишь сюжетно значимые персонажи, а вот «массовка», бродящая по улицам, разнообразием не отличается.

Текстуры и мегатекстуры

Еще одна «фишка» игроделов под названием «мегатекстура» была разработана отцом шутеров от первого лица Джоном Кармаком. Мегатекстура покрывает весь ландшафт игрового уровня (вместо десятков и сотен мелких текстур). Ближайшие к игроку части мегатекстуры отображаются с максимальной детализацией, но по мере удаления окружающий мир становится «менее качественным». Это напоминает реальную жизнь — ведь мы не можем видеть объекты на расстоянии также хорошо, как непосредственно вблизи.

Принцип работы мегатекстуры на схеме. Зеленая область — высокая детализация, красная — низкая, желтая — средние значения.

Мегатекстура размещается на жестком диске. По мере необходимости она подкачивается в оперативную память, потребляя гораздо меньше ресурсов, чем при традиционном подходе с большим количеством разных текстур.

Если же в игре используется множество текстур, то разработчики поступают аналогично: текстуры на расстоянии детализированы слабо и наоборот. 3D-модели вдалеке урезают до 2D: для игрока разница не видна, а вот видеокарта скажет спасибо за уменьшение нагрузки. Уменьшение разрешения текстур на расстоянии, снижения количества полигонов у объекта, отключение шейдеров — все это тоже относится к оптимизации и применяется повсеместно.

Освещение

Генерация реалистичных лучей света, их отражение от поверхности и создание теней — один из самых ресурсоемких процессов. Поэтому разработчики часто просто избавляются от теней на больших расстояниях и стараются использовать как можно меньше отражающих свет текстур.

Уменьшение числа объектов с динамичными тенями также положительно сказывается на повышении производительности игры.

Загрузочные экраны

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

В современных играх, таких как Last of Us, Uncharted или God of War, от многочисленных подзагрузочных экранов избавились насовсем. Новые части локации там загружаются, пока персонажи ведут диалог или решают головоломки. Хитроумное решение надо признать.

Стоит упомянуть важный нюанс: оптимизация консольных игр проще, чем ПК-тайтлов. Это обусловлено тем, что разработчики консольных игр заранее знают технические возможности оборудования, под которое они создают свои творения (например, PS4). В то время как разлет аналогичных характеристик у владельцев ПК весьма велик: у кого-то компьютер «древний» с видюхой из нулевых, а у другого — суперсовременная машина. Это во многом объясняет, почему консольные игры часто превосходят ПК-конкурентов, в том числе и графически: сказывается лучшая оптимизация.

Оптимизация ассетов

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

Игровой ассет или игровой ресурс — цифровой объект, преимущественно состоящий из однотипных данных, неделимая сущность, которая представляет часть игрового контента и обладает некими свойствами. Понятие «игрового ассета» используется при разработке компьютерных игр по отношению к тем элементам контента, которые обрабатываются ресурсной системой как неделимые (атомарные, элементарные) сущности.

А еще можно часть объектов, на которые игроки чаще обращают внимание, сделать высокодетализированными (например, лицо персонажа), а на второстепенные детали — траву, камни, одежду героя тратить как можно меньше ресурсов. Так поступили, например, создатели Fallout 4.

Оптимизация кода

Это относится уже к самой что ни на есть «внутренней кухне» игры. Например, FPS повышает использование всех ядер процессора при сложных внутриигровых вычислениях. Или оптимизация кода игры, когда выгоднее использовать константу (какое-то постоянное значение, часто используемое в игре), чем заставлять процессор рассчитывать эту величину каждый раз заново. Это справедливо и для графики: разумнее применять некий часто используемый спрайт, сохранив его в файл, чем каждый раз отрисовывать его с помощью кода.

Настройки для пользователя

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

Заключение

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

Многие современные проекты выходят настолько «сырыми», что не покидает ощущение: разработчики просто «забивают» на пользователя в погоне за скорейшим релизом и желанием «отбить бабки». Вместо того, чтобы довести игру до ума, ее выбрасывают на рынок, она получает кучу негативных отзывов и рецензий и «погибает», утягивая в пучину банкротства студию-разработчика и издателя. Например, так случилось с легендарными сериями Heroes of Might and Magic, Disciples, Gothic.

Как оптимизируют графику в играх

Доклад программиста игровой графики Васифа Абдуллаева.

Иллюстрация: Катя Павловская для Skillbox Media

Леон Балбери

Леон Балбери

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

В 2021 году в рамках онлайн-сессии From Zero to Game на азербайджанском портале Gamepons программист Васиф Абдуллаев затронул тему оптимизации графики в видеоиграх с позиции разработчика. В рамках своего выступления он объяснил, что такое оптимизация, как разработчики оптимизируют графику в играх, зачем они это делают и каких усилий им это стоит.

Редакция «Геймдев» Skillbox Media делится основными тезисами этого доклада.

Васиф Абдуллаев

Более пяти лет занимается разработкой мобильных и десктопных игр в небольших инди-командах и крупных студиях. Он специализируется на программировании геймплея, шейдеров компьютерной графики и мультиплеера в движках Unity и Unreal Engine. Сейчас сотрудничает с турецкой студией Coconut Game.

Что такое оптимизация

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

В разработке игр выделяют две категории оптимизации:

  • Оптимизация кода, которая по большей части влияет на CPU. Ею занимаются программисты, ответственные за геймплей, UI, боевую систему и прочие важные элементы игры;
  • Оптимизация графики — более сложный процесс, в котором задействованы оба процессора. За этот вид оптимизации отвечают программисты игровой графики и технические художники.

Зачем оптимизировать графику в играх

  • Разработчик всегда заинтересован в том, чтобы его игра хорошо продавалась. Но далеко не каждый игрок может похвастаться наличием современного железа. Согласно статистике Steam, на март 2023 года доля систем с видеокартой NVIDIA GeForce GTX 1060 составляет 7,85% от общего числа сборок (для сравнения: у лидера NVIDIA GeForce RTX 3060 — 10,67%). Проект с современной, но неоптимизированной графикой будет сильно тормозить на системе с относительно слабой видеокартой или не запустится вовсе. А это значит, что в игру смогут сыграть далеко не все. Таким образом, оптимизация увеличивает охват аудитории.
  • У каждой платформы — консолей, портативных устройств, смартфонов, планшетов — своё железо. Если разработчик планирует мультиплатформенный релиз, игра должна идеально работать на всех заявленных устройствах. Поэтому её нужно оптимизировать.
  • И наконец, оптимизированная графика — залог плавного геймплея без просадки кадров, даже если в сцене много детализированных объектов.

Примеры игр с хорошей оптимизацией:

  • Metal Gear Solid 5: The Phantom Pain — стелс-экшен с открытым миром и динамическим освещением выдаёт 60 кадров в секунду на PS4 и Xbox One, при этом качество картинки на PS3 и Xbox 360, где игра тоже доступна, ничуть не хуже (пусть и частота кадров на этих платформах ниже).
  • Marvel’s Spider-Man — плавный геймплей в сочетании с детализированным открытым миром реализован как на PS4, так и на портированной ПК-версии.

Важно помнить, что оптимизация графики в большей степени зависит не от навыков программиста или возможностей технологии, а от того, как работают с движком программисты игровой графики и 2D/3D-художники.

Графические API

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

Примеры графических API:

  • ПК — Vulkan, DirectX 11/12, OpenGL, Metal.
  • Мобильные платформы — Vulkan, OpenGL, Metal.
  • консоли — DirectX, PSGL, GNM.

У каждого графического API свой синтаксис кода, язык программирования шейдеров и совместимость между устройствами. Из списка выше можно увидеть, что некоторые интерфейсы поддерживают кросс-платформенность. Но основная их логика сводится к выводу изображения на экран методом растеризации или трассировки лучей в реальном времени. Современные игровые движки поддерживают сразу несколько графических API.

Vulkan и DirectX 12 можно отнести к «современной» категории интерфейсов. Мы привыкли считать, что понятие «современный» подразумевает более упрощённый подход. Однако код рендеринга для простого треугольника в Vulkan занимает около 1000 строк, а в OpenGL — менее 100.

Всё дело в том, что такой тип API не прячет все данные в функции, а даёт разработчику гибкость для оптимизации, особенно в отношении CPU.

К слову, шейдер — это тоже тип программы для рендеринга, которая определяет итоговый вид поверхности объекта в сцене: наложение текстур, рельефность, взаимодействие со светом (поглощение, рассеивание, отражение, преломление и так далее). Шейдеры взаимодействуют с графическим ускорителем и написаны в основном на языках HLSL или GLSL. Но в большинстве случаев разработчики не взаимодействуют с кодом шейдеров напрямую, а настраивают их в движке. Например, шейдеры в Unreal Engine можно собрать с помощью нодов во встроенном редакторе.

Нюансы работы с игровыми движками

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

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

Следует помнить, что идеального игрового движка не существует. Даже проекты на нашумевшем Unreal Engine 5 нуждаются в оптимизации по нескольким причинам:

  • Многие до сих пор играют на слабом железе.
  • Инновационная технология Nanite с возможностью отрисовки миллионов полигонов не работает на мелких объектах вроде растений.
  • Трассировка лучей или различные сценарии освещения могут негативно влиять на производительность.

Как происходит рендеринг

Рендеринг, или отрисовка изображения, производится с помощью вычислений центрального процессора. В результате игрок видит на экране набор кадров или анимацию 3D-объектов с учётом их расположения, текстурирования, освещения и других характеристик. Различают однопоточный рендеринг с синхронным воспроизведением вычислений и многопоточный, во время которого задействовано несколько ядер процессора. Во втором случае нагрузка распределяется равномерно.

Есть два метода рендеринга на графическом процессоре — с помощью трассировки лучей и с помощью растеризации 3D-моделей. Последний более распространён, поэтому его стоит рассмотреть подробнее.

Известно, что сцены в игре состоят из 3D-объектов. В свою очередь, каждый из них состоит из примитивов: точек, линий и треугольников (иногда квадратов). Задача программы, ответственной за растеризацию, — получить из этих исходных примитивов фрагменты (пиксели) итогового изображения.

Краткое описание стадий, обозначенных на схеме выше:

  • Сборщик входных данных (Input Assembler) — чтение данных примитивов (точек, линий и треугольников) из заполненных буферов и сбор данных в примитивы, которые будут использоваться на следующих этапах. Также на этой стадии прикрепляются значения, созданные системой для повышения эффективности шейдеров.
  • Этап шейдеров вершин (Vertex Shader Stage) — обработка отдельных вершин шейдером для получения преобразованного атрибута.
  • Этап тесселяции (Tesselation Stage) — преобразование геометрии и формирование набора небольших объектов (треугольников, точек и линий).
  • Этап шейдера геометрии (Geometry Shader Stage) — обработка целых примитивов: треугольников, линий, точек и смежных с ними вершин.
  • Этап средства программной прорисовки (Rasterizer) — урезание примитивов, которых нет в представлении, и их подготовка для следующего этапа шейдера пикселей. Векторные данные (фигуры или примитивы) преобразуются в растровое изображение из пикселей для отображения трёхмерной графики в режиме реального времени.
  • Этап шейдера пикселей (Pixel Shader Stage) — приём интерполированных данных для примитива и генерация данных для пикселей (например, данных о цвете). На этой стадии доступны расширенные возможности, такие как попиксельное освещение и постобработка.
  • Этап слияния и вывода (Output Merger) — выходные данные (значения пиксельного шейдера, информация о глубине и наборе элементов) объединяются с содержимым целевого объекта отрисовки, буферами глубины и набором элементов для окончательного результата.

Примечание

Этапы растеризации могут варьироваться в зависимости от архитектуры графического процессора. Более подробно обо всех стадиях (в контексте Direct3D) можно прочесть в официальной справке Microsoft.

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

Профилирование

Один из важных аспектов оптимизации — использование профайлеров. Это инструменты, с помощью которых можно получить информацию об элементах, снижающих производительность в конкретных сценах. Также профайлер отображает работу низкоуровневых модулей API. В отличие от общепринятых стандартов, инструмент измеряет производительность в миллисекундах (ms), а не в частоте кадров в секунду.

Профилировать графику можно непосредственно в движке (Unreal Insights для Unreal Engine, Unity Profiler для Unity) или с помощью сторонних утилит. Среди последних наиболее известны RenderDoc, NVIDIA Nsight, Radeon GPU Profiler и Pix.

Работая с профайлером, следует обращать внимание на несколько моментов:

  • Профайлер необходимо запускать на целевой платформе — не стоит оптимизировать мобильную игру на ПК.
  • Профилируйте готовый билд, а не проект: редакторы игровых движков используют очень много ресурсов.
  • Старайтесь профилировать игру в разных условиях, ведь тактовая частота CPU и GPU зависит от нагрева и уровня заряда устройства. В этом могут помочь утилиты для оверклокинга — например, GPU Boost от NVIDIA или PowerTune от AMD.

Способы оптимизации графики в играх

Использование уровней детализации (LOD)

Нет смысла размещать объекты с высокой детализацией на дальнем расстоянии, так как игрок их всё равно не увидит. К тому же это приведёт к снижению производительности из-за овершейдинга мелких деталей. Модели с низким уровнем детализации не нуждаются в освещении — для них достаточно unlit-материалов. Для текстурирования в этом случае нужно использовать только карту альбедо в низком разрешении.

Оптимизация текстур

Всегда подключайте MIP-мэппинг в настройках текстур. МIP-мэппинг создаёт несколько копий одной текстуры с разной детализацией. Такой подход сводит полосы от швов на моделях к минимуму и предотвращает возможные проблемы в результате сглаживания.

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

Выбор между упреждающим и отложенным рендерингом

Упреждающий рендеринг (Forward Rendering) — стандартный метод рендеринга «из коробки», который используется в большинстве движков. GPU получает данные о геометрии, проецирует её и разбивает на вершины. Затем происходит преобразование вершин в геометрию и дальнейшее её разделение на фрагменты или пиксели. Они подвергаются финальной отрисовке, после чего передаются на экран. При этом освещение в сцене вычисляется отдельно для каждой вершины и каждого фрагмента в зоне видимости с учётом количества источников света.

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

Иногда под отложенным рендерингом подразумевают отложенное освещение (Deferred Shading / Lighting) — модификацию отложенного рендеринга, которая уменьшает размер G-буфера за счёт большого количества источников света в кадре.

Почему важно обращать внимание на метод отрисовки при оптимизации? Допустим, в сцене 100 объектов, в каждом из них порядка 1000 вершин. В таком случае в кадре будет 100 000 полигонов, которые легко обработает видеокарта. Но когда эти полигоны попадают на стадию фрагментного шейдера, запускается процесс вычисления освещения в сцене. А так как при стандартном методе расчёты освещения ведутся по отдельности для каждого сегмента, при выводе изображения не исключены задержки.

В случае со сложными сценами с динамическим освещением или множеством источников света лучше обратить внимание на отложенный рендеринг, так как в этом случае освещение вычисляется для каждого пикселя всего один раз, что улучшает производительность. Например, в Unreal Engine 5 этот тип рендеринга используется по умолчанию. Однако у него есть свои недостатки — в частности, несовместимость с некоторыми платформами. Поэтому выбор метода рендеринга в пользу оптимизации зависит от задач разработчика и специфики игрового движка.

Усечение геометрии (Occlusion Culling)

Если в сцене много статических объектов, геометрию, которая находится вне зоны видимости, отсекают. Это можно сделать как в самом игровом движке, так и с помощью динамических систем на базе GPU.

При настройках усечения обращайте внимание на минимальный размер окклюдера. Окклюдеры — это объекты, позволяющие отсекать геометрию, которая находится за ними. Например, на скриншоте ниже выставлено значение 5. Это значит, что все объекты выше или шире 5 метров не будут отображаться позади окклюдера таких объёмов, что экономит время рендеринга. Размер окклюдера во многом зависит от геймдизайна игры.

Если речь идёт об усечении динамических мешей, в этом случае стоит использовать пул объектов, то есть повторно применять сущности вместо их создания и уничтожения.

Игрок не сможет детально рассмотреть объекты малого размера, расположенные на дальнем расстоянии. Поэтому в движке настраивают дистанцию усечения, исходя из размеров мешей. В Unity это делают с помощью кода, а в Unreal Engine — с помощью инструмента Cull Distance Volumes.

GPU-подход к спецэффектам

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

Демонстрация вертексной анимации
GIF: лекция Васифа Абдуллаева на Gamepons / YouTube

Работа с шейдерами

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

  • Рассмотрите текстурирование с использованием карты параллакса в качестве альтернативы.
  • Уменьшайте тесселяцию в зависимости от расстояния камеры.

Также следует воздержаться от большого количества конструкций ветвления (if) в коде шейдеров. GPU лучше воспринимает параллельный код.

Кроме того, старайтесь сократить количество входных параметров шейдера. Оставьте только те, что можно изменить во время выполнения. Используйте минимальную точность шейдеров, особенно при разработке мобильных проектов. И обращайте внимание на занятость шейдеров.

Дополнительные рекомендации

И ещё несколько общих рекомендаций, которые помогут улучшить оптимизацию игры.

  • Проверяйте и профилируйте эффекты постпроцессинга. Если они сильно влияют на задержку — рассмотрите другие варианты.
  • Отслеживайте производительность при наличии теней и используйте каскадные теневые карты.
  • Помните, что запекание освещения менее ресурсоёмкое, чем освещение в реальном времени.
  • Существует несколько способов создания определённых спецэффектов — выберите самый эффективный метод, подходящий вашему проекту.
  • Не забывайте, что использование системы частиц может негативно повлиять на производительность.
  • Если есть возможность, измените значение счётчика цепочки буферов и проверьте результат.
  • Используйте динамическое разрешение.

Помните, что оптимизация графики в играх зависит от общего визуального стиля проекта, жанра, целевой платформы и специфики игрового движка. Рекомендации, приведённые в этом материале, а также углублённое изучение и понимание внутренних процессов рендеринга помогут улучшить производительность вашего проекта.

Читайте также:

  • Что такое PBR-текстуры
  • Что такое постобработка
  • Что такое запекание текстур

Как оптимизируют игры

bannerbanner

Каждое игровое устройство — консоль или конкретная конфигурация компьютера предоставляет так называемый «бюджет»: максимальное количество каждого конкретного типа контента, с которым он может работать, сохраняя при этом разрешение и частоту для комфортной игры. В этот бюджет входят память для двухмерных текстур (например, стены), память для сложных трёхмерных текстур, для звука, анимации и так далее.

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

Как оптимизируют игры?

Максимальное количество каждого конкретного типа контента

Фото: nerdbot.com

Всё начинается с графической оптимизации игры. К примеру, в финальной версии некоторые текстуры видны только с большого расстояния. Их размер — 512×512 пикселей, хотя занимают они только 100×100 пикселей экрана. Разработчики уменьшают их до нужного количества, что помогает увеличить производительность без потери качества игры.

Также выполняется оптимизация полигонов (совокупность вершин, граней и рёбер, определяющих форму многогранного объекта): некоторые трёхмерные полигоны можно сделать двухмерными, не испортив их внешний вид. Чем меньше на карте 3D-полигонов, тем игра становится менее требовательной для «железа» компьютера или консоли.

Обрезаются многие ресурсозатратные функции: например, тени, которые видны на расстоянии больше сотни метров или детали крупного здания вдалеке.

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

Так же важна работа с кодом игры: чем он проще, тем легче компьютеру и консоли его обработать.

Хитрости разработчиков

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

Чем больше в игре разных моделей, тем сложнее прогружать текстуры и рендерить их. Поэтому разработчики копируют текстуры — это один из самых простых способов оптимизации. Лес или крупный город часто состоят из пяти-десяти повторяющихся моделей. К примеру, в первой части Call of Duty использовалось всего пара видов зданий, но расставлены они были настолько удачно, что никто не обращал на это внимания.

Разработчики шутера Rage не стали заморачиваться с большим количеством моделей и использовали мегатекстуру. Мегатекстура — огромное полотно, которое полностью покрывает ландшафт или объект. Его условный размер 150000×150000 пикселей. Чтобы оперативная память компьютера смогла обработать такой объём данных, картинка автоматически теряла детализацию на большом расстоянии от игрока.

В крупных играх с открытым миром игроделы заставляют объекты появляться перед вами и исчезать, пока вы их не видите. К примеру, города, машин и людей в GTA V вне поля зрения игрока не существует.

Обрезаются многие ресурсозатратные функции

Фото: appdevelopmentcompanies.co

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

Чтобы обновить ресурсы и не заставлять игрока смотреть на долгий Loading…, вводят «загрузочные коридоры». Часто новая глава игры начинается с долгой загрузки: в это время полностью обновляются локации и текстуры. Затем внутри главы происходят подгрузки частей уровня — их скрывают сюжетными роликами (как в Uncharted) или общением между персонажами и головоломками (как в The Last of Us).

В последнем God of War нет ни одного загрузочного экрана. Кратос (главный герой) проходит по долгому открытому коридору, разговаривая со своим спутником.

Некоторые хитрости оптимизации стали важной частью игры и её лора. Для полного отображения открытого мира Silent Hill требовались ресурсы, которых не было у Playstation. Чтобы оптимизировать игру под консоль, разработчики ввели тот самый туман. Он полностью покрывал город и добавлял гнетущей атмосферы. Но главное: он скрывал части локации, которые не прогружались. Впоследствии туман стал главным атрибутом серии — даже когда в нём уже не было необходимости.

Оптимизация игр для консолей это миф – мой негативный опыт владения PlayStation 4

Недавно я уже писал, что продал свою PlayStation 4 из-за низкой производительности и полностью перешёл на ПК-гейминг. Адепты консолей утверждают, что разработчики игр отлично оптимизируют их для приставок, а на компьютеры забивают. Разберёмся, как обстоят дела на самом деле.

7 сентября 2020, понедельник 00:03
Met74 [ ] для раздела Блоги

реклама

Сегодня поговорим на такую интересную тему, как оптимизация консольных игр. Недавно я уже писал, что в этом году продал свою PlayStation 4 и полностью перешёл на ПК-гейминг. Адепты консолей утверждают, что разработчики игр отлично оптимизируют их для приставок, а на компьютеры забивают. Разберёмся, как обстоят дела на самом деле.

реклама

Поделюсь своим личным опытом. В октябре 2018 года, в день выхода Red Dead Redemption 2, я забрал свой диск предзаказа и в приподнятом настроении отправился домой играть. Первые пару часов всё было отлично — игра держала хоть и низкие, но стабильные 30 FPS. Проблемы начались чуть позже, в первой более или менее крупной локации — городе Валентайн.

На видео (начиная с 3:15) мы наблюдаем, как даже в небольшом поселении частота кадров падает до 25. И это не редкие «дропы», а постоянный низкий фреймрейт. Я уже молчу о том, что творилось в крупном портовом городе Сен Дени — там просадки были гораздо жёстче. О какой комфортной игре тут вообще может идти речь? Кое-как, скрепя сердце, я всё же допрошёл RDR2.

реклама

Но нормально поиграл только через год: уже на мощном компьютере, имея стабильные 60 FPS при 2К разрешении. И получил колоссальное удовольствие.

Второй знаковый пример — Battlefield 1. Игра вышла осенью 2016 года, купил я её сперва на ПК. Тогда у меня была еще довольно слабоватая конфигурация (AMD FX 8320 и видеокарта Radeon 290). В сетевых баталиях на 64 игрока частота кадров сильно проседала, игровой опыт был так себе.

Будучи молодым и неопытным, наслушавшись сказок про консольную оптимизацию, я сделал себе подарок на Новый 2017 год — купил игру в PS Store. Ход моих мыслей был следующим. А может, я чего-то не знаю? Может, действительно разработчики гораздо больше времени уделяют полировке игры на приставках и мне удастся нормально поиграть?

реклама

После первого же запуска я испытал нереально разочарование. Невооруженным взглядом было видно дикие просадки. На доказательном видео выше — около 40 FPS в среднем (с дропами до 25). Игра не просто не держит минимально необходимые для сетевой стрелялки 60 кадров: до такой отметки FPS практически не поднимается! Думаю, примерно такая же ситуация и в последнем Battlefield 5.

Идём далее: The Witcher 3. Даже после семи патчей, что на PS4, что на Xbox One — просадки до 20 FPS.

Как в это вообще возможно играть? Оптимизация? «Не, не слышал». Хорошо, что Ведьмака я проходил уже на свежем ПК, со 100 кадрами при максимальных настройках графики.

реклама

Ну и последний пример. Давайте возьмём эксклюзив для PlayStation 4. Ведь, как известно, именно их разработчики полируют до блеска, выжимая все соки из приставки. Хоррор Until Dawn вышел ещё в 2015 году, именно тогда я и пытался в него поиграть.

И что же мы видим? Снова 20 кадров в секунду — вот уж действительно, cinematic experience! Игру, кстати, я так и не прошёл до конца — невозможно было играть в это неоптимизированное чудовище.

Подводя итоги. На множестве примеров я доказал вам, что консольная оптимизация — это просто миф. Причём сделал это не на какой-то «индюшатине», а на популярнейших игровых хитах ААА-класса. Как же так получается, ведь консоли имеют строго фиксированное железо, неужели нельзя добиться хотя бы стабильной «тридцатки» в любой игре? По факту, разработчики давно забили на оптимизацию, а Sony и Microsoft перестали предъявлять жёсткие требования к качеству проектов. Ведь даже на старших версиях (PS4 Pro и Xbox One X) встречаются аналогичные примеры. Хотите нормальный игровой опыт — покупайте мощный ПК. А когда очередной адепт консолей будет с пеной у рта рассказывать вам, как же круто и плавно он играет на своей приставочке — плюньте этому человеку в лицо!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *