Что делать если появились фризы в играх

admin

Микрофризы в играх при достаточно высоком и стабильном ФПС

Имеется ПК со следующими характеристиками:
1050ti (от Zotac, mini версия)
i3 6100 (3.7 ГГц)
8Гб ОЗУ
Seageate хард на 500Гб
Монитор Full Hd
Windows 10 LTSB
Проблема заключается в том, что многие игры лагают, за исключением некоторых, например WoT.
И то, до обновления 1.0.
Я переустанавливал Windows, ставил 7ку — не помогает.
В играх отличный фпс, как у обзорщиков/тестеров с ютуба, но при 50-60фпс все равно лагает, очень неприятно причем.
После обновления танков до 1.0 многие жаловались, как и я, на долгую загрузку карт. Всем помогла только смена HDD на SSD; но я такой возможности пока не имею, поэтому ограничился дефрагментацией HDD, что достаточно ускорило загрузку карт, да и варгейминг выпустил патч, чуть исправляющий ситуацию.

Я стал думать, что проблема в жестком диске. Потому что те же танки идут на ультрах спокойно при фпс более 60 и не лагают, кстати; бф4 играю тоже без проблем, идеально все без лагов. Так идут некоторые игры.
Но! ГТА5 например идет на 50-60 фпс, но микрофризы не дают играть. Все настроил как надо, даже на минималках, при увеличении фпс до 60-70 лаги не уходят.
Ладно ГТА5, Firewatch лагает еще сильнее.

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

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

В чем может быть проблема? Буду очень благодарен любым идеям.
Я склоняюсь к проблемному харду изначально, так вообще пк собрано недавно, около года назад.
Но как это проверить?

P.S. Вспомню что-то еще, дополню вопрос.

1524913228
1524913254
1524913281 P.S.S. Добавил скриншоты. Кажется, количество используемой в играх виртуальной памяти, то ест ь файла подкачки изменить нельзя. В системе стоит ограничение на 512 мб, а в играх используется более 3 гигов. Да и как будто это не влияет на игры, так как в танках все нормально, а в firewatch с тем же количеством фпс лагает жутко, причем на минималках.

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

ГТА5 например идет на 50-60 фпс, но микрофризы не дают играть. Все настроил как надо, даже на минималках, при увеличении фпс до 60-70 лаги не уходят.

Я склоняюсь к проблемному харду изначально, так вообще пк собрано недавно, около года назад.
Но как это проверить?

Поставить заведомо исправный диск. Только так.

Установи МСИ Афтербёрнер и понаблюдай за загрузкой железа в играх.

Проблема заключается в том, что многие игры лагают, за исключением некоторых, например WoT.
И то, до обновления 1.0.
Я переустанавливал Windows, ставил 7ку — не помогает.
В играх отличный фпс, как у обзорщиков/тестеров с ютуба, но при 50-60фпс все равно лагает, очень неприятно причем.
После обновления танков до 1.0 многие жаловались, как и я, на долгую загрузку карт. Всем помогла только смена HDD на SSD; но я такой возможности пока не имею, поэтому ограничился дефрагментацией HDD, что достаточно ускорило загрузку карт, да и варгейминг выпустил патч, чуть исправляющий ситуацию.

Я стал думать, что проблема в жестком диске. Потому что те же танки идут на ультрах спокойно при фпс более 60 и не лагают, кстати; бф4 играю тоже без проблем, идеально все без лагов. Так идут некоторые игры.
Но! ГТА5 например идет на 50-60 фпс, но микрофризы не дают играть. Все настроил как надо, даже на минималках, при увеличении фпс до 60-70 лаги не уходят.
Ладно ГТА5, Firewatch лагает еще сильнее.

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

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

В чем может быть проблема? Буду очень благодарен любым идеям.
Я склоняюсь к проблемному харду изначально, так вообще пк собрано недавно, около года назад.
Но как это проверить?

Здравствуйте. Не знаю, решён-ли данный вопрос. Дам совет. Производительность нового пк чаще всего падает из-за так называемого энергопотребления. В windows 10 по умолчанию стоит энергосбережение. Из-за этого мощным видеокартам в требовательных играх (и не только) не хватает питания, следовательно — появляются микрофризы и статтеры. Для того, чтобы частично (а иногда и совсем) убрать микрофризы перейдите в Панель Управления > Электропитание. В данное вкладке необходимо чтобы у вас стоял пункт «Максимальная производительность». На новой винде чаще всего стоит пункт «Экономия энергии» или «Сбалансированный».

Источник

Почему тормозят игры и что с этим делать

q93 c198e7a00ebd9fa107574b00c01d09433b5daf744782b8eb9c4fdf1a195ec527

q93 fd91e755ed342879088f45b27fbbab17aaa4346076f47dc3e6994a5d5f73a686

Содержание

Содержание

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

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

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

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

Аппаратные проблемы

Процессор

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

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

q93 bf6b4bc6aff0b025e8feb3c754697ae358992dc5fc340deb5667c46f06021c38

Проверить легко: нагружаем CPU с помощью теста стабильности, следим за температурой и частотой ядер. Современные камни рассчитаны на стабильную работу до 90–100 градусов, поэтому при достижении этих цифр частота может снижаться.

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

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

q93 b7b7c0c0330492de07d3e4b8522c79a8d2255bc55570810433a1d2e393b83c3d

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

Решение: подобрать новый процессор с большей мощностью на ядро (IPC) или разогнать старый. О том, как разогнать процессоры Intel и AMD рассказывали в статьях Клуба.

Процессор отдыхает. Если процессор загружается всего на 40–60 %, и при этом все тормозит, нужно искать причину в других комплектующих.

Видеокарта

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

Читайте также:  К чему снится опоздать на самолет и не улететь женщине

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

q93 5df0b99ce19b9047c5921486c0b092cab6155cccd51595dd09a125131d302cf8

Проверить легко: ставим высокие настройки графики, играем 5–10 минут и следим за температурой и частотой. Если температура не прекращает подниматься и преодолевает отметку в 75–80 градусов (для актуальных поколений настольных ускорителей этого уже достаточно), то частота начнет снижаться до базовых значений, минуя правила TurboBoost. Кстати, игру можно заменить на шерстяной FurMark.

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

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

q93 30226c4b7b0325da84764d5109f351c1d0156cabd42feec2b895a82fa440c07a

Проверить легко: ориентируемся на класс видеокарты и системные требования. Логично, что GTX 1060 уже не потянет новинки на высоких даже в 1080р, как это было с прошлыми проектами (например, Ведьмак 3). Зато RTX 3070 будет спокойно играть в Cyberpunk 2077 на максимальных настройках в разрешении 1440p, при этом график кадров не должен опускаться ниже 60 даже в самых нагруженных сценах.

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

Оперативная память

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

Мало памяти. Для повседневной работы компьютер использует только собственный объем оперативной памяти. Когда возрастает нагрузка, и программе необходимо еще больше памяти, система может обратиться к буферу (файл подкачки) на системном диске. В этом случае устаревшие данные выгружаются из ОЗУ на диск, а новые записываются в оперативку. Соответственно, если игре необходимо 6 Гб свободной памяти, а на компьютере всего 8 Гб, и 2 Гб уже занято системой и программами, то для нормальной работы компьютера придется скидывать данные из ОЗУ на диск. А это медленная память, которая не обеспечивает нужную скорость передачи данных, особенно для игр.

q93 8724c0f8a068a9ef0f6ae65c8224c5f34719d61acaad5bbea706602c506607d0

Проверить легко: современным играм необходимо минимум 16 Гб оперативной памяти, из которых поле запуска системы остается не более 14 Гб.

Решение: докупить еще один комплект оперативной памяти или заменить на более емкие модели.

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

q93 5dbdcba1d462519fa11f4c3aa907572415370a4cfd27d32be2f4a2f33bedb168

Проверить легко: запускаем тест AIDA Memory Test и смотрим, какие цифры появятся в окошках Read, Write и Copy.

Решение: актуальные системы с оперативной памятью типа DDR4 показывают от 40 000 МБ/с по всем показателям, чего вполне достаточно для всех задач. Но существуют комплекты памяти с заводским разгоном (XMP), при активации которого можно повысить частоту и снизить тайминги. Это хорошо для любых задач.

Оперативная память может давать сбои и ошибки, которые не вешают систему полностью, а лишь снижают производительность. Поэтому необходимо проверить ОЗУ с помощью программы MemTest86 или TestMem5. Особенно, если она работает в разгоне.

Накопитель

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

q93 314ad52055b98a0d0255d707f455e333d88b4863a28294487bd9bbde229465ac

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

Решение: иметь под рукой хотя бы обычный SATA SSD для игр.

Как и оперативная память, любой SSD-накопитель может иметь битые чипы, поврежденные секторы или контроллеры, поэтому необходимо обязательно «прогнать» поверхность диска на битые ячейки. Это можно сделать с помощью программ Victoria или HDDScan.

Другое оборудование

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

Программные проблемы

Операционная система

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

q93 355a6d55c5548e1df07b0229940090e1b43967e25d6e1e4cadb9ab3346083e03

Решение: защищить компьютер от сетевых атак и вредноносного ПО с помощью антивируса.

Драйверы

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

q93 d0ae488ce52da76ad0e1c864932d1917688a23b4dd0b5d6a8aa1c2ddfa818193

Например, с обновлением драйвера компания Nvidia добавила поддержку новых игр — Assassin’s Creed Valhalla и включила поддержку новых функций для Cyberpunk 2077. В то же время, некоторые части кода стали работать со сбоями: драйвер Nvidia 461.09 содержит ошибку, которая не позволяет графическим редакторам редактировать RAW-фотографии с ускорением на видеокарте. То же самое может касаться и багов в играх.

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

Оптимизация игр

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

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

q93 d9c68f8c4c57bfa0cc7bc2bb6074b0950f3c9c0782262d0d5b61d068a83e76fc

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

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

Тормозит — не значит медленно

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

q93 a6c391c44f1755402fe49521635b79667a2e93fa61c528a7687855bf47be46be

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

Читайте также:  К чему снится бывший муж подруги

Что делать

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

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

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

Источник

Ста-ста-статтеринг, или откуда в игре берутся микрофризы и как с ними бороться

Представьте себе: вот вы ждете новую часть вашей любимой игры и, наконец, она выходит. Специально под это дело вы обновили свой ПК: установили новейшие ЦП и ГП, увеличили объем оперативки и даже заменили жесткий диск на SSD. Теперь игра должна запускаться у вас гладко, как шелк, с первого же экрана загрузки и до самого конца.

Вот вы скачиваете себе ранее оплаченный предзаказ. Завершается установка, вы запускаете игру. Все идет хорошо: игра «летает» с частотой кадров 60 FPS. Или, во всяком случае, так говорит вам счетчик кадров в оверлее вашего ГП. Но что-то идет не так. Вы водите мышкой туда-сюда и замечаете, что игра… фризится.

Как это возможно? Какие еще фризы при 60 FPS?

Это может казаться смешным до тех пор, пока не столкнешься с этим сам. Если вы встречались с такими фризами, то наверняка уже успели их возненавидеть.

Это не лаги. Не низкий фреймрейт. Это статтеринг. При высоких FPS и идеальной сверхбыстрой конфигурации.

Что это такое, откуда взялось и есть ли способ от него избавиться? Сейчас разберемся.

image loader

Со времен появления первых аркадных автоматов в 70-ых годах видеоигры работают на 60 FPS. Обычно предполагается, что игра должна работать с той же скоростью, что и дисплей. Только после популяризации 3D-игр нам пришлось столкнуться и принять более низкую частоту кадров. Еще в 90-х годах, когда «3D-карты» (которые теперь называют «графическими процессорами») начали заменять программный рендеринг, люди спокойно играли с частотой 20 кадров в секунду, а 35 FPS считалась уже частотой для серьезных соревнований по сети.

Теперь же мы располагаем сверхбыстрыми машинами, которые, конечно же, могут летать на 60 FPS. Тем не менее… похоже, что недовольных производительностью теперь стало больше, чем когда-либо. Как это возможно?

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

Если вы пробежитесь по игровым форумам, то, вероятно, встретите в заголовках тем что-то вроде такого:

image loader
ПК-геймеры часто жалуются, что игры страдают от статтеринга даже при отсутствии проблем с частотой кадров.

Можно предположить, что это единичные случаи, но такие допущения развеивает статистика поиска в Google:

image loader
За последние 5 лет статтеринг стал (относительно) большей проблемой, чем производительность.

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

Десятилетие поиска причин статтеринга

Пациент точно жив. Просто часто фризится.

Впервые автор столкнулся с этой проблемой где-то в 2003 году во время работы над Serious Sam 2. Люди стали сообщать о случаях, когда во время тестирования на пустом уровне движения экрана и мыши оказывались не плавными. Это сопровождалось очень специфическим паттерном на графике частоты кадров, который команда разработки назвала «сердцебиением».

Первой мыслью было то, что где-то в коде закралась ошибка, но никто не смог ее найти. Казалось, что проблема появлялась и исчезала случайным образом — при перезапуске игры, перезагрузке компьютера… но стоило изменить какой-либо параметр производительности, и она исчезала. Затем можно было поменять параметр обратно, и все продолжало работать идеально. Проблема-призрак.

Очевидно, проблема была не только в «Сэме». При запуске других игр она возникала точно так же, наводя на мысли, что тут что-то с драйверами. Но появление статтеринга не зависело от производителя вашего графического процессора. Оно имело место даже при разных API (OpenGL, DirectX 9, DirectX 11…). Единственное, что оставалось общим, так это что статтеринг появлялся то тут, то там на некоторых машинах и игровых сценах.

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

Затем внезапно, в один прекрасный зимний день в начале 2013 года, ребята из Croteam обнаружили еще один пример этой проблемы, который на тот момент можно было относительно последовательно воспроизводить — на этот раз на одном из уровней в «Серьезном Сэме 3». Они долго возились с той сценой, пока вдруг не осенило. Все было настолько просто — неудивительно, что целое десятилетие это ускользало от всеобщего внимания.

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

Что происходило все это время

Вот как это выглядит, когда игра «тормозит» даже при 60 FPS. Вы могли испытать нечто подобное, играя в любую современную игру, и, вероятно, первым делом подумали бы, что игра не оптимизирована. Что ж, давайте пересмотрим эту теорию.

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

Однако это происходит только тогда, когда вы воспроизводите всю анимацию целиком. Если бы вы перебирали ее покадрово, то никаких разрывов бы не обнаружили.

Как такое возможно?

Давайте рассмотрим это подробнее. Ниже представлено параллельное сравнение идеального плавного видео и видео со статтерингом:

image loader
Шесть последовательных кадров с точной синхронизацией. Наверху — правильно расположенные кадры, внизу — кадры со статтерингом.

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

Самые внимательные могут заметить еще одну любопытную деталь: нижнее изображение — якобы более «медленное»… на самом деле идет «впереди» правильного. Странно, не правда ли?

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

Подождите, подождите… но если видео «медленнее», а кадр «занял больше времени», то как оно может идти с опережением?

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

Краткая история синхронизации кадров

Давным-давно, в далекой-далекой галактике… когда разработчики создавали первые видеоигры, обычно они это делали с учетом точной частоты кадров, на которой работал дисплей. В регионах NTSC, где телевизоры работают с частотой 60 Гц, это подразумевает 60 кадров в секунду, а в регионах PAL/SECAM, где телевизоры работают с частотой 50 Гц, — 50 кадров в секунду.

Большинство игр представляли собой очень простые концепции, работающие на фиксированном оборудовании — обычно на аркадной консоли или хорошо известном «домашнем микрокомпьютере», таком как ZX Spectrum, C64, Atari ST, Amstrad CPC 464, Amiga и т. д. Таким образом, создавая и тестируя игры для конкретной машины и определенной частоты кадров, разработчик всегда мог быть на 100% уверен, что фреймрейт никогда никуда не упадет.

Читайте также:  К чему снится дохлый кот женщине

Скорости объектов также сохранялись в «кадровых» единицах. Таким образом, вам необходимо было знать не на сколько пикселей в секунду будет перемещаться персонаж, а на сколько пикселей в кадре. Например, в Sonic The Hedgehog для Sega Genesis такая скорость составляет 16 пикселей на кадр. Многие игры даже имели отдельные версии для регионов PAL и NTSC, где анимация рисовалась от руки специально для 50 и 60 FPS, соответственно. По сути, работа с любой другой частотой кадров была просто невозможна.

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

Если вы не можете быть уверены, с какой частотой кадров будет работать игра, вам необходимо измерить текущую частоту кадров и постоянно адаптировать физику игры и скорость анимации под нее. Если один кадр занимает 1/60 секунды (16,67 мс), а ваш персонаж бежит со скоростью 10 м/с, то он перемещается на 1/6 метра в каждом кадре. Но если кадр вдруг начнет занимать 1/30 секунды (33,33 мс), то вы должны перемещать персонажа уже на 1/3 метра за кадр (в два раза «быстрее»), чтобы он продолжал двигаться с той же видимой скоростью.

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

Вернее, раньше работал очень хорошо. Еще в 90-х, когда 35 FPS считалась ого-го какой скоростью, люди были им более чем довольны. Но в то время видеокарты не были столь значительной частью ПК, и контроль надо всем происходящим на экране имел центральный процессор. Если у вас не было 3D-ускорителя, он даже сам рисовал объекты. Таким образом, он точно знал, когда они попадут на экран.

Ситуация на сегодняшний день

Со временем стали появляться все более сложные графические процессоры, и они неизбежно становились все более и более «асинхронными». Это означает, что когда ЦП дает команду ГП отрисовать что-то на экране, ГП просто сохраняет эту команду в буфере, чтобы ЦП мог продолжать свои дела, пока ГП выполняет рендеринг. В конечном итоге это приводит к ситуации, когда ЦП сообщает графическому процессору, когда наступает конец кадра, а графический процессор, сохраняя это среди своих данных, на самом деле не считает это чем-то приоритетным — ведь он все еще обрабатывает некоторые из ранее выданных команд. Он покажет кадр на экране только тогда, когда выполнит все, чем его загрузили до этого.

Итак, когда игра пытается вычислить время, вычитая временные метки в начале двух последовательных кадров, релевантность этого, откровенно говоря… весьма сомнительна. Поэтому вернемся к нашему примеру. Там у нас были такие кадры:

image loader
Шесть последовательных кадров с точной синхронизацией. Верхний ряд — правильный, нижний — с эффектом статтеринга.

В первых двух кадрах время кадра составляет 16,67 мс (или 1/60 секунды), и камера перемещается на одинаковую величину в верхнем и нижнем случаях, поэтому деревья синхронизированы. В третьем кадре (внизу, со статтерингом) игра увидела, что время кадра составляет 24,8 мс (то есть, больше 1/60 секунды) и оттого думает, что частота кадров упала, и бросается нагонять пропущенное… только для того, чтобы обнаружить, что на следующем кадре время составляет всего 10,7 мс, отчего камера замедляется, и теперь деревья снова более или менее синхронизированы.

Что же происходит? Измеряемое игрой время кадра колеблется из-за различных факторов — особенно в загруженной многозадачной системе, такой как ПК. Поэтому в некоторые моменты времени игра полагает, что частота упала с 60 FPS, и генерирует кадры анимации, рассчитанные на более низкую частоту кадров. Но из-за асинхронного характера работы ГП она всегда так или иначе возвращается к тем же 60 кадрам в секунду.

Это и есть статтеринг — анимация, сгенерированная для переменной частоты кадров (сердцебиения), отображающаяся с фактической правильной фиксированной частотой кадров.

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

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

Что это за пилюля? В Serious Engine она обозначается как sim_fSyncRate = 60. Проще говоря, это означает вот что: «полностью игнорировать все эти махинации с синхронизацией и делать вид, что мы всегда измеряем стабильные 60 кадров в секунду». И это заставляет все работать гладко — только потому, что с самого начала все работало гладко! Единственная причина, по которой появлялся статтеринг, — это неправильное время, используемое для анимации.

И что же, на этом все?

Значит, решение настолько просто?

К сожалению, нет. Это было просто только на тестах. Если бы мы прекратили измерять частоту кадров в реальных условиях и просто предположили, что она всегда равна 60 FPS, тогда, когда она упадет ниже 60 — а на ПК она рано или поздно упадет по какой бы то ни было причине: работа программ в фоновом режиме, сохранение энергии или защита от перегрева, кто знает, — тогда все замедлится.

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

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

Но как игра может узнать, когда кадр действительно отображается на экране?

Да никак: в настоящий момент этого сделать невозможно.

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

Что теперь?

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

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

Тем не менее, мы надеемся, что вскоре это станет доступным для более широкой общественности.

Различные предостережения и другие детали

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

«Композитор»

image loader
Это что, эффект матового стекла? Ага, так вот почему у нас обязательно должен быть композитор. Довольно важно, не правда ли?

Во всем этом за кулисами задействована концепция под названием Compositing Window Manager, также известная как композитор. Это система, которая теперь присутствует в каждой ОС и позволяет окнам быть прозрачными, иметь размытый фон, тени и т. д. Композиторы могут пойти и дальше — и показывать окна ваших программ в 3D. Для этого композитор берет на себя управление самой последней частью кадра и решает, что с ним делать, непосредственно перед тем, как он попадает на монитор.

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

Управление питанием и температурой VS сложность рендеринга

Мы также должны принять во внимание тот факт, что современные ЦП и ГП не работают с фиксированной частотой, но у обоих есть системы, которые регулируют их скорость вверх и вниз в зависимости от нагрузки и текущей температуры. Таким образом, игра не может просто предположить, что они будут иметь одинаковую скорость от кадра к кадру. С другой стороны, операционная система и драйверы не могут ожидать, что игра будет выполнять одинаковый объем работы в каждом кадре. Сложные системы связи между двумя сторонами должны быть спроектированы таким образом, чтобы все это принималось во внимание.

Источник