Что такое «оптимизация игр» и почему на самом деле тормозит компьютер

Автор: Евгений Щербань, 07 декабря 2016, 10:54

Стоит начать обсуждение новой игры для ПК, как наружу тут же вылезет злополучное слово «оптимизация». Deus Ex: Mankind Divided? «Похоже, что эту игру ВООБЩЕ не оптимизировали», — пишет один игрок в Steam. Metro: Last Light? «Если вкратце, то игра тормозит, а оптимизация выполнена ужасно», — пишет другой игрок на Reddit.

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

Что такое оптимизация, и чем ее измерить?

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

*a = b*c + b*c + b*c*

Если вместо этого мы определим:

*d = b*c, то у нас получится a = d + d + d*

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

Ребята из польской геймдев-компании QLOC предлагают следующее определение оптимизации — это когда игра работает с одинаковой частотой кадров на широкой линейке девайсов, включая самые слабые платформы. Дин Секулич из Croteam оптимизирует игры уже 20 лет и уверен, что даже сравнение приблизительно одинаковых игр с одинаковыми настройками графики будет крайне поверхностным. Ден рекомендует копать глубже и думать как кодер.

Современные эффекты и производительность

Если вы разочарованы быстродействием новой игры, скорее всего виной тому один из этих эффектов.

Разрешение экрана. Вероятно, самый простой параметр для сравнения — это разрешение экрана т.к. он состоит всего из двух чисел. Например, 1920 на 1080. 

Сглаживание. Это эффект, который делает визуальные объекты менее угловатыми (т.к. сглаживает углы) за счет добавления новых деталей. С точки зрения оптимизации, это довольно сложный эффект. Если простое FXAA или SMA сглаживание задействуют минимум ресурсов, то сложные процессы вроде мультисэмплинга и суперсэмплинга, заставят попотеть вашу видеокарту. При этом мультисэмплинг является сложным мерилом оптимизации так как может по-разному нагружать систему в зависимости от способа реализации. А вот суперсэмплингом отлично работает схема, схожая с разрешением экрана т.к. у него есть цифровой коэффициент, который является метрикой нагрузки на систему.

Освещение и тени. Поверхности и окружающая атмосфера напрямую зависят от освещения, которое относится к основам 3D графики, одновременно являясь ее Священным Граалем и проклятием. Здесь все просто - чем реалистичнее картинка, тем больше в ней динамических теней и источников света. А чем их больше, тем выше нагрузка на систему. Сегодня чаще всего в играх используют освещение, которое можно упрощенно назвать глобальным и объемным.

Там, где есть свет, должны быть и тени. В современных играх в основном используют два источника теней, работающих в реальном времени: «рассеянное затенение», которое снижает интенсивность общего освещения (зависит от близлежащих объектов) и «прямое затенение». Рассеянное затенение мы впервые увидели в Crysis и оно требовало очень много ресурсов. Сегодня это обыденность, на смену которой пришли новые технологические «обжоры» вроде воксельного рассеянного затенения или затенение отдаленных пространств.

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

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

Прочие визуальные эффекты Что еще за прочие эффекты? Например те, которые имитируют оптические свойства камеры. Как правило, они не слишком ресурсоемки. Исключение — эффект размытия БОКЕ, которое как бы смазывает участки изображения вне фокуса камеры, для придания картинке большей реалистичности. Еще одна относительно новая разработка — это эффект «отражения на экранном пространстве». Хотя он и не ест ресурсы так, как традиционные техники отражения, которым необходимо заново просчитывать участки картинки в отражении. Третья категория ресурсоемких эффектов - это физическое моделирование объектов, необходимое для реалистичной имитации волос и одежды, а также жидкостей, газов, мусора и их динамического взаимодействия.

Особенности оптимизации

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

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

В компании QLOC, где, в основном, занимаются портированием консольных игр на ПК, «средние» настройки - это стандартные настройки графики для консолей. Когда ребята из QLOC заканчивают отладку общей системы визуализации и ключевых характеристик, то вносят коррективы для каждой конкретной игровой платформы. При этом «минимальные» системные требования подразумевают, что игра должна хорошо работать на низких настройках. Если требования не соблюдены, компания не предоставляет техническую поддержку. В случае «рекомендуемых» требований, игра должна хорошо работать на высоких настройках с разрешением 1080p.

Как оценивать оптимизацию игры

Недавний Survival Horror Dying Light с открытым миром, прожорливой дальностью прорисовки и сменой времени суток, кажется отличным пациентом для анализа. Игра получила спорные оценки во многом из-за своей оптимизации. Игроки, жаловались на то, что Dying Light не соответствовала стандартам на максимальных настройках графики, хотя эти самые стандарты они брали с потолка. Как оказалось позже, в первой версии игры для ПК разработчики ограничили дальность прорисовки на 55% т.к. в качестве мерила использовали мощное железо современных консолей.

Выглядела бы игра более «оптимизированной» со 100%? Сомневаюсь. Зато я уверен, что она съела бы на обед вашу видеокарту. Была бы она при этом лучше оптимизирована? Разумеется нет. Именно поэтому Dying Light – отличный пример того, насколько сложно объективно оценить качество оптимизации и факторов, которые должны учитывать разработчики при портировании.

Похожая история недавно произошла с Deus Ex: Mankind Divided, в которой важную роль имеет настройка сглаживания MSAA. Поскольку в игре используется отложенное освещение и затемнение – универсальная техника визуализации, которая делает намного менее эффективной простую реализацию MSAA с аппаратным ускорением — сглаживание давало большую нагрузку на видеокарту, чего никто не ожидал.

Игра редко представляет из себя монолитную сущность, которая либо оптимизирована, либо нет. Не оптимизироваными могут быть отдельные эффекты, но не игра в целом (прим: речь идет о больших игровых проектах). Это особенно бросается в глаза, когда разработчики внедряют в движок совершенно новые эффекты. Например, в Crysis мы впервые увидели рассеянное затемнение. В сравнение с современными образцами, оно тормозило и в целом было плохо оптимизировано. А в недавней Rise of the Tomb Raider – в целом хорошо оптимизированной и красивой игры – был не самый лучший пример оптимизации воксельного рассеянного затенения. Но в этом то и прелесть ПК, что модный тяжелый эффект 2010 года будет шикарно оптимизирован через пару лет.

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

Трудности оптимизации

Сам процесс создания оптимального кода (в том значении, которое используется в информатике) достаточно трудоемок. Для Дина Секулича из QLOC «худший кошмар оптимизации» — это «смотреть как выполнение верхней функции в профайлере занимает 3% времени».

Профайлер — это инструмент, позволяющий программисту увидеть, сколько времени у программы уходит на выполнение каждой функции и ранжировать их по порядку. Когда верхняя функция занимает 3% времени, это означает, что если вам удастся вдвое сократить время ее выполнения, то общая производительность программ ускорится на 1,5%. Но это титанический труд и задачи здесь редко повторяются. «Поэтому в оптимизации программы не бывает простых и очевидных решений», — говорит Дин.

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

Подводя итог

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

И напоследок прошу, будьте менее строги к оптимизаторам! Если они, конечно, действительно не облажались. Хотя новомодные и ресурсоемкие спецэффекты бывают бесполезны сегодня, они раскроются завтра. Их наличие лучше, чем их отсутствие. Они не делают игру не оптимизированной. Я всегда считал, что возможность вернуться к высококлассной игре много лет спустя и увидеть, как раскроется ее красота, является одним из главных преимуществ ПК как платформы. И было бы грустно видеть, как оно сводится на нет из-за недальновидных суждений об оптимизации.

Для тех, кто хочет знать больше