Оптимизация xcom 2 для слабых пк: Как повысить FPS в XCOM 2: War of the Chosen, запустить игру на слабом ПК и получить 60 FPS

Проблемы с производительностью в игре XCOM 2 / Хабр

Привет! Меня зовут Александр, я руководитель программистов компьютерной графики в Gaijin в проектах CRSED и Enlisted. Иногда, в свободное время, я исследую как устроена графика в других играх и нахожу там что-то интересное.

Недавно я решил разобраться, почему XCOM 2 тормозит на моём ноутбуке. В ходе изучения рендера этой игры я нашёл ряд мест, которые можно было бы без проблем ускорить. Результаты моего небольшого исследования вылились в видео:

Ниже представлена расшифровка этого видео.


Добрый день!

Вероятно, вы играли в игру XCOM 2 или хотя бы слышали о ней. Она вышла в 2016 году. Сделана на движке Unreal Engine 3.5. Если оценивать XCOM как игру в целом, мне она понравилась. Увлекательный геймплей, приятная картинка, интересная история.

Единственная проблема, с которой я столкнулся, — это низкий FPS, в особенности на кадрах с выстрелами крупным планом. На базе и в тактическом виде эта проблема менее заметна. Средний FPS у меня был в районе 25-30. И мне стало интересно, выжимает ли игра все доступные мощности из моей ноутбучной GTX 1050 или можно сделать лучше. Сейчас я покажу вам 6 оптимизаций, которые могли помочь разработчикам  улучшить производительность данной игры.

Захват кадров

Для анализа графики я использовал RenderDoc версии 1.12. Он без проблем захватил несколько кадров, которые я потом просмотрел. Я взял один кадр из меню, кадр базы, кадр на тактической карте и кадр с выстрелом.

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

«Жирный» G-buffer

Первая оптимизация связана с уменьшением размера G-buffer’а. Самый долгий проход — это заполнение G-buffer’а (>16 мс). Это видно как на таймингах различных проходов, так и на общем таймлайне.

Всего в G-buffer входит 5 текстур в формате RGBA16F, то есть текстуры имеют 4 16-битных канала и содержат вещественные числа.

Для разрешения 1080 требуется около 80 Мбайт видеопамяти для всего этого, что не так уж и много для современных видеокарт, но проблема в том, что все эти текстуры нужно заполнить. Запись в текстуру намного дороже чем чтение, поэтому много используемых текстур — это норма, а много рендертаргетов — уже не очень хорошо.

Итак, G-buffer содержит следующие текстуры:

  1. Цвета эмиссивных (т.е. светящихся) материалов (причём альфа-канал этой текстуры пустой).

  2. Альбедо или просто цвет без учета освещения (альфа-канал содержит Ambient Occlusion).

  3. Нормали (в альфа-канале хранится номер одного из 4 материалов)

  4. Параметры материалов (цвет металла + roughness).

  5. Дополнительные нормали для анизотропных материалов (транслюсентность в альфа-канале — это параметр, показывающий насколько поверхность пропускает свет сквозь себя)

У текстуры эмиссива можно было бы удалить четвертый канал. И тем самым вместо 16 Мб потребуется 12 Мб.

Текстуру альбедо вполне можно было бы хранить как 4 8-битных канала с нормализованными вещественными числами (то есть числами от 0 до 1). Это уменьшило бы эту текстуру в 2 раза. До 8 Мб.

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

Материал принимает всего 4 различных значения, значит, отлично пакуется в 2 бита. Предположим, что эти два бита мы положили к параметрам материалов. Тогда для нормалей остаются 2 канала по 16 бит каждый. Всего 8 Мб для моего разрешения экрана.

Параметры материалов оставим без изменения, за исключением кодирования номера материала в эту же текстуру.

Последняя текстура — параметры для транслюсентных материалов. Первые 3 компоненты — это единичные векторы, значит, их тоже можно закодировать в 2 вещественных числа. Остаётся 3 канала. Причём транслюсентные материалы не эмиссивные. По крайней мере, в захваченных кадрах я такого не видел. Значит, можно объединить эту текстуру с текстурой эмиссива, и на неё мы теперь тратим 0 Мб.

Итого, нам нужно 12 Мб для эмиссива и транслюсентности, 8 Мб для диффуза, 8 Мб для нормалей и 16 для параметров материалов. Всего 44 Мб. Почти в два раза меньше памяти. Думаю, это сильно бы ускорило проход для заполнения G-buffer.

Отсутствие объектов в предварительном проходе

Другая оптимизация, которая могла бы уменьшить количество записываемых данных в G-buffer, — это более агрессивное использование предварительного прохода (prepass). Prepass — это предварительная отрисовка сцены в буфер глубины. Выполняется она с целью уменьшить количество перезаписей пикселей G-buffer’а за счёт отбрасывания пикселей, не прошедших тест глубины. Текущий предварительный проход оптимизирует отрисовку, но можно добиться и лучших результатов.

При записи G-buffer’а некоторые пиксели перерисовываются до 24 раз.

Судя по вызовам драйвера, между prepass’ом и G-buffer пассом нет никаких копирований текстуры глубины или чтений этой текстуры на CPU. Значит, теоретически, всю геометрию, которая рисуется в G-buffer, можно было нарисовать в prepass’е. Таким образом, можно было бы сделать ещё быстрее. И учитывая, что это самый долгий проход во всём кадре, оптимизация не была бы лишней.

Не используется инстанцирование

Оставим пиксельные оптимизации и обратимся к геометрии. Как вы могли заметить (обратите внимание на вызовы DrawIndexed на предыдущем скриншоте), объекты рисуются строго по одному. Это связано с тем, что для отрисовки используется вызов DrawIndexed вместо DrawIndexedInstanced, который позволяет рисовать несколько одинаковых объектов за раз.

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

Level of Details

И последняя оптимизация связанная с рисованием сцены — это система level of details. Нет смысла рисовать детализированную геометрию, если она вдалеке и занимает пару десятков пикселей.

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

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

Полноэкранный SSAO (Screen Space Ambient Occlusion)

Второй по длительности проход после заполнения G-buffer’а — это подготовка текстуры SSAO. Она занимает от 8 до 10 мс. И проблема этого прохода в том, что он полноэкранный.

Как я рассказывал на стриме по GTAO, подобные эффекты лучше делать в половинном разрешении экрана. У профессионалов из Activision Blizzard получилось уместить отрисовку AO в половину миллисекунды. Они замеряли на PlayStation 4, а я на ноутбуке и сравнивать время таким образом не до конца корректно. Тем не менее отмечу, что у моей видеокарты в 2.5 раза меньше GFLOPS, а вычисление AO в игре медленнее в 20 раз чем в статье от Blizzard. В общем, думаю можно сделать вывод, что полноэкранный проход для AO может быть значительно ускорен.

Depth of Field

И последнее очевидное узкое место — это depth of field. В XCOM реализован очень интересный подход к этому эффекту. Рисуются 3 миллиона треугольников. Каждый из них соответствует пикселю текстуры в половинном разрешении экрана.

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

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

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

Как оптимизировать DayZ Standalone? — гайд по оптимизации FPS

DayZ

Содержимое

  • Оптимизация FPS DayZ Standlone для слабых компьютеров
    • 1. Установка параметров запуска.
    • 2. Конфиги.
    • 3. Самое простое – графика.

Даже когда DayZ была всего лишь пользовательским модом к Arma II, оптимизация игры была делом избранных и требовала недюжинных познаний как в прописывании команд, так и в визуальных настройках. Немногое изменилось с выходом DayZ Standalone. Лаги, подвисания и слайд-шоу портят удовольствие от игры, а покупать новое железо нет возможности? Представляем вашему вниманию сборку полезных рекомендаций по оптимизации игры DayZ Standalone:

1. Установка параметров запуска.

Перейдем в Steam -> Библиотека -> правый клик по игре -> «Свойства».
Выбираем вкладку «Общие», потом – «Параметры запуска». Начинаем писать:
-winxp. Вся визуальная составляющая начнет обрабатываться ТОЛЬКО с помощью DirectX 9. Графика особо не пострадает, однако игра может начать вылетать при соврачивании. Но прирост FPS от 5 до 20 (в зависимости от локации) этого стоит.
ВАЖНО! Если у вас Windows 7 и новее, то команду использовать нельзя.
-cpuCount= После равно установите количество ядер вашего процессора (от 2-х до 4-х, если не знаете сколько, то писать не рекомендуется)
-maxMem= Максимальный размер оперативной памяти, выделяемой на игру. Указывать надо точное значение (1 Гб=1024). Например, если у вас 2 гигабата памяти, то прописывайте 2048, если 8 — 8192 и т.д.
-maxVRam= Максмальный размер памяти видеокарты, задействованный при игре.
-high Команда запуска игры в высоком приоритете. Если параллельно используются другие программы (RaidCall, Skype, TeamSpeak, Интернет-браузеры и т.д.) то они могут нещадно лагать.
-nosplash – просто незначительно ускорит загрузку игры.
Между параметрами следует ставить пробел, это важно.

2. Конфиги.

Теперь покопаемся в конфигурации игры, то есть в .cfg файлах. Интересуют нас только два: «DayZ.cfg» и «[ваш ник]DayZProfile.cfg».
Они находятся в папках:
«Мои документы» -> «DayZ» ->
«Мои документы» -> «DayZ other profiles» ->
Редактировать можно с помощью любого текстового редактора, но если их нет, то можно использовать и блокнот (WordPad). Для поиска требуемых параметров воспользуйтесь встроенным поиском.
Меняем в DayZ.cfg:
GPU_MaxFramesAhead = 1;
GPU_DetectedFramesAhead = 1; (Проставляем в этих параметрах единицу)
Меняем в [ваш ник]DayZProfile.cfg:
sceneComplexity= указывайте от 200 000 до 50 000.
viewDistance= от 1800 до 1200. Помните, чем ниже параметр, тем меньше вы будете видеть.
preferredObkectViewDistance= Стоит выставить не более 1000, но и не менее 800.
terrainGrid= устанавливаем от 3,125 до 3,5
shadowZDistance= от 100 до 200. Чем ниже, тем хуже дела будут с тенями.
Сохраняем изменения и закрываем оба файла.
После этих изменений вы будете лакомой добычей для кемпера или снайпера, но зато производительность вырастет просто в разы.

3. Самое простое – графика.

Видео:
Отключаем VSync
Ставим разрешение на 100%
Качество – все выставляем на самые низкие значения, а если есть возможность – отключаем. Естественно, размытые и нечеткие пейзажи перенесут вас в детство, в Medal Of Honor, но что поделать, ради оптимизации и вожделенных 60 FPS приходится идти на жертвы.

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

Исправление производительности XCOM 2 | Rock Paper Shotgun

Большая уродливая муха в восхитительно смертоносной мази XCOM 2 [официальный сайт] заключается в том, что игра Firaxis работает как Psy-Zombie на довольно многих ПК — даже на тех, которые имеют относительно монструозные системы. Это не всеобщее горе — например, у Адама он работает нормально, поэтому он упоминает только проходящие проблемы в своем обзоре, но на моем немного превосходящем ПК я даже не могу достичь золотых 60 кадров на минимальных настройках, а на высоких он падает до однозначные числа. В любом случае повсюду наблюдаются огромные разочаровывающие всплески задержек, а мой компьютер работает так необычно сильно, что я почти уверен, что мог бы поджарить зефир над задним вентиляционным отверстием.

Смотреть на YouTube

Я далеко не одинок, как можно быстро понять, взглянув на форумы Steam, официальные доски объявлений или Reddit. Чертовски обидно переходить черту от абсолютно бессмысленных визуальных жертв к активно раздражающей медлительности. Firaxis и 2K ничего не сообщают о том, в чем проблема или когда появится исправление, хотя они сообщают нам, что «знают, что у некоторых игроков возникли проблемы с производительностью», и что они изучают это. К счастью, тем временем вы можете кое-что сделать, в том числе одно необычное исправление, которое почти удвоило мою собственную частоту кадров.

Во-первых, вот полное заявление 2K, предоставленное нам, хотя по сути это повторение того, что они сказали в другом месте:

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

Они также обращают ваше внимание на этот FAQ по устранению неполадок, но, к сожалению, это очень общий материал, такой же полезный, как пена для бритья на Sectoid. (Хотя, если у вас возникают сбои или проблемы с установкой, есть еще несколько полезных вещей, которые можно попробовать).

Вот то, что вы действительно должны сделать, чтобы XCOM 2 работала значительно лучше — хотя это не приведет вас к священным 60/Максимуму, и вам все равно придется страдать от диких всплесков в частота кадров. Некоторые из них являются внутриигровыми настройками, некоторые требуют погружения в меню драйвера вашей видеокарты, что, как я понимаю, является врагом, неизвестным для некоторых людей, но, честно говоря, на самом деле это не так уж сложно. Если вы уже знакомы с графическими параметрами XCOM 2 и не добились больших успехов, я призываю вас сразу перейти к совету 7 — исправлению на стороне драйвера, которое почти удвоило мою собственную частоту кадров.

1) Отключить сглаживание в игре (Настройки — Графика)

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

2) Уменьшить или отключить Ambient Occlusion (Настройки — Графика)

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

3) Уменьшите тени и качество теней (Настройки — Графика)

YMMV на этом, но повозитесь и посмотрите, что у вас получится. В частности, качество теней на максимальном или высоком уровне сейчас достаточно серьезное требование.

4) Отключить отражения экранного пространства (Настройки — Графика)

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

5) Отключите вертикальную синхронизацию и сглаживание частоты кадров (Настройки — Видео)

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

6) Включите адаптивную/динамическую вертикальную синхронизацию в драйверах вашей видеокарты

Итак, теперь мы идем в темноту. Это включит более эффективную форму вертикальной синхронизации, но потребует входа в настройки драйвера вне игры. Во-первых, возьмите последние версии драйверов с соответствующего сайта, например, NVIDIA или AMD, чтобы мы могли быть уверены, что вы не используете встроенные драйверы Windows, в которых отсутствуют нужные нам параметры.

Затем выполните любое из следующих действий:

NVIDIA

Щелкните правой кнопкой мыши на рабочем столе, выберите «Панель управления NVIDIA», «Настройки 3D», «Управление настройками 3D», затем на правой панели нажмите «Настройки программы». Нажмите «Добавить» и перейдите к исполняемому файлу XCOM 2, который по умолчанию находится в папке C:\Program Files (x86)\Steam\SteamApps\common\XCOM 2\Binaries\Win64, если вы используете 64-разрядную версию Windows, или C:\Program Files (x86)\Steam\SteamApps\common\XCOM 2\Binaries\Win32, если у вас старомодный 32-битный тип. В списке, который появляется в разделе «Укажите настройки для этой программы», прокрутите вправо вниз, чтобы найти «Вертикальная синхронизация». Нажмите на это и в раскрывающемся меню выберите «Адаптивный». Затем нажмите «Применить» в правом нижнем углу.

AMD

К сожалению, это немного сложнее, чем аналог NVIDIA, поскольку вам нужно загрузить и установить стороннюю панель управления, хотя это уважаемое приложение. Он носит название RadeonPro. У меня нет Radeon на моем ПК, поэтому я не могу дать пошаговые инструкции, но это должно помочь вам пройти через худшие из них. Концепция аналогична приведенной выше, но нужная вам настройка называется Dynamic V-sync, а не Adaptive.

7) Это biggie , который означал, что я мог играть в игру в основном с высокими настройками и обычно видел частоту кадров в 50 или выше, хотя большие всплески не исчезли. Это связано с тем, сколько кадров ваша видеокарта обрабатывает впереди, что при более высоких настройках означает более плавную частоту кадров в теории, но, как и в случае с вертикальной синхронизацией, может означать, что вы в конечном итоге застряли на более низкой частоте, чем на самом деле способна ваша карта. Уменьшите эти предварительно отрендеренные кадры с 3 по умолчанию до всего 1, и вы получите большой, очень большой прирост (хотя имейте в виду, что MSAA и SSAO все равно потребуют огромных потерь, поэтому оставьте их тоже). Вот как:

NVIDIA

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

AMD

Опять же, у меня нет карты, чтобы проверить это самостоятельно, и снова эта опция отсутствует в собственной панели управления AMD, поэтому вам придется установить RadeonPro, как указано выше. Параметр, который вам нужен, называется «Размер очереди переворота», а не «Максимум предварительно обработанных кадров», и вы можете найти его на вкладке «Дополнительно» Radeon Pro — здесь есть руководство. Опять же, установите его всего на 1, а затем наслаждайтесь усилением.

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

Поди разберись.

Пожалуйста, поделитесь своими советами и жалобами на производительность ниже.

Чтобы узнать больше о XCOM 2, посетите наш путеводитель по XCOM 2.

Проблемы с производительностью :: XCOM 2 General Discussions

Проблемы с производительностью

Понятно, что некоторые (многие?) пользователи испытывают проблемы с производительностью игры, некоторые более серьезные, чем другие.

Многие люди обнаруживают, что они решаются, если вы отключите некоторые графические настройки. Похоже, что автоопределение игры может быть немного оптимистичным, когда оно выбирает настройки за вас. У меня самого были большие проблемы, пока я не переключил AO на Tile AO, не выключил один или два эффекта, не выключил пару вещей. Другие люди сообщают, что переход с MSAA на FXAA стал большим улучшением. Отключение вертикальной синхронизации в игре также может помочь; если вы хотите ограничить частоту кадров, используйте адаптивную вертикальную синхронизацию в панели управления nvidia (если вы используете nvidia).

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

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

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

По вопросам, отличным от производительности, обращайтесь в другую закрепленную ветку, http://steamcommunity.com/app/268500/discussions/0/412446292767978257/

Дополнительное примечание: некоторые люди добились улучшения, установив игру на тот же логический диск как Steam. Если у вас возникли проблемы и игра установлена ​​на другом логическом диске, может быть, попробуйте переместить ее?

Дополнительное предложение от пользователя: кажется, что игра работает намного плавнее при запуске в режиме отладки из инструментов SDK.

Также:
Заикание и изменчивость. Не совсем уникально для XCOM 2, но некоторые пользователи испытывают неприятные заикания, прерывистое зависание (или прерывистое отсутствие зависания) и тому подобное, когда у них подключен сетевой адаптер USB (обычно привязанный мобильный телефон или UB wi-fi). ). Быстрое решение — отключить его, но это, очевидно, приведет к удалению вашего интернет-соединения. Более полное объяснение дал пользователь здесь: http://steamcommunity.

Leave a Comment