Задержка и неограниченная частота кадров
Источник: https://github.com/ppy/osu/wiki/Latency-and-unlimited-frame-rates
Кратко про эту статьюПеревод данной статьи был необходим для того, чтобы скидывать его всем, кто перешёл в лазер и обнаружил, что поднялся «мс» и упал «FPS», и что вдруг неожиданно в клиенте больше нельзя поставить неограниченное количество кадров в секунду. В стейбл-клиенте существует серьезная зависимость задержки ввода и кол-ва FPS, но в лазере НЕТ. Лазер разработан, используя новые технологии (в частности многопоточность), которая позволяет убрать эту зависимость. «Мс» в лазере - это теперь лишь показатель времени кадра, за понижением которого НЕ нужно гнаться в разумных пределах (в переводе на FPS до 2х-4х от частоты обновления монитора).
В этой статье peppy объясняет, почему высокое кол-во кадров в секунду - это плохо.
ВведениеЗа время существования сообщества osu! высокая частота кадров воспринималась как своего рода цель или "Cвятой Грааль". Исключение влияния сборки ПК и его производительности как ограничивающего фактора скилла — хорошая цель для игроков, а более высокие цифры, ведущие к более низким значениям «задержек», — хороший способ успокоить ум.
Тем не менее есть несколько проблем, которые нам нужно решить в будущем, поскольку мы представляем osu! (лазер) с его новой эффективной моделью многопоточности и продвигаемся к использованию более новых графических API. Главная из них заключается в том, что нам требуется изменить восприятие и понимание, что неограниченные кадры — это не святой Грааль, как вы можете подумать.
Переход на «неограниченные» кадрыС релизом лазера «Неограниченный» был переименован в «В основном неограниченный» и теперь ограничивает отрисовку и обновление игры до частоты в 1000 Гц.
До сих пор мы не занимали жесткой позиции против «неограниченных FPS», хотя и знали, что это контрпродуктивно. С течением времени мы видим, что всё больше и больше пользователей испытывают проблемы с фризами или производительностью во время игрового процесса, и многие случаи решаются путем отключения неограниченного режима FPS.
Большинство из этих пользователей выбрали «неограниченный» по совету других или потому, что это кажется наиболее эффективным вариантом.
Такой подход может быть контрпродуктивным из-за различных нагрузок, связанных с запуском игры с высокой частотой кадров. В эти нагрузки входят:
- Распределение нагрузок, приводящее к избыточной сборке мусора
Как правило, мы довольно хорошо справляемся с тем, чтобы не выделять ресурсы на основе каждого кадра, но бывают ситуации, когда это еще не оптимизировано. Это не затрагивает osu! (стейбл), но на данный момент касается лазера.
- Нагрузки GPU, которые могут привести к неожиданной блокировке конвейера
Производители GPU пишут драйверы и тестируют видеокарты, используя рабочую среду 3D. Во-первых, очень редко игра или приложение работают со скоростью более 1000 кадров в секунду, поэтому драйверы, как правило, не оптимизированы для таких сценариев.
Особенно в то время, когда мы все ещё используем OpenGL, очень возможно, что операция блокировки конвейера приведет к фризам. Иногда это может быть вызвано нами (редко), но чаще всего внешним приложением (например, оверлеи). Когда это происходит, «визуальный фриз» довольно часто можно избежать, если работать с более низкой частотой кадров.
- Перегрев CPU / GPU
Особенно в случае портативных ПК (или настольных компьютеров с неоптимальными настройками температуры), доведение железа до крайних пределов может привести к выделению тепла и последующему снижению тактовой частоты процессора и троттлингу (дросселированию).
Многие уверяют, что «osu! — это 2D-игра и не должна вызывать таких проблем», но 2D-рендеринг при очень высокой пропускной способности на самом деле является одним из наихудших сценариев энергопотребления GPU.
- Незначительная отдача
Обычно ваше устройство ввода опрашивается системой с частотой в 125–1000 Гц. Мы опрашиваем устройства с частотой 1000 Гц. Проще говоря, рендеринг кадров со скоростью, близкий к этому значению или даже выше, даёт незначительное преимущество. И поскольку мы опрашиваем устройства в отдельном потоке в лазере, все «преимущества» просто отпадают. В будущем мы планируем поработать над тем, чтобы запуск обновления потока не влиял на точность ввода (т. е. то, что некоторые люди называют как «линиями оценки» или «линиями регистрации попаданий» на шкалу среднего отклонения).Мини-игра «тестировщик задержки»
Вместо того, чтобы пытаться убедить вас на словах, мы решили создать мини-игру, в которой вы можете проверить это сами. Она доступна в osu! (лазер) 2022.611.0 или более поздней версии по ключевому слову «latency» в поле поиска меню настроек (или прокрутив вниз до конца и нажав на нужную кнопку). В мини-игре всё объясняется, поэтому, если у вас нет мелких вопросов, смело продолжайте играть и наслаждаться процессом. Остальная часть этой страницы посвящена предостережениям и рассуждениям о реализации, возможно, более подробно, чем вам нужно.
В чем смысл?
Начиная с самого «простого» уровня, игра предоставит вам выбор между двумя разделенными экранами, на котором одна из двух половин работает с пониженной частотой обновления. Определите лучшую сторону, пока вы больше не сможете найти минимальный ограничитель кадров, который вам нужен, чтобы избежать влияния на вашу производительность.
Процесс игры таков:
· Нужно сыграть 5 раундов подряд. Если вы наберете 100% - перейдете к следующей сложности
· Когда вы дойдете до такой сложности, что больше не сможете отличить одно от другого, сложность уменьшиться на один уровень
· Вы продолжите играть дополнительные 20 раундов, чтобы убедиться, что вы можете увидеть разницу на этом уровне сложности
· Игра сертифицирует вас и порекомендует запускать игру согласно ограничению кадров на первой сложности, которую вы провалили (т. е. выше вашего уровня сертификации).
Двигаясь впередВ будущем мы надеемся также обновить другие параметры ограничителя кадров, чтобы они были более похожи на osu! (стейбл), предоставляя «энергосберегающий» и «оптимальный» режимы. Текущие «обновление мониторов 2x/4x/8x» довольно ситуативны и могут не подойти для мониторов с более высокой частотой обновления. Мы также надеемся использовать различные новые доступные API, такие как NVIDIA (Reflex), DirectX (12) и Vulkan, чтобы лучше синхронизировать «доставку» кадров, позволяя в основном отрисовывать кадры к значениям вашего монитора, избегая разрывов при одновременном снижении нагрузок и задержек.
Ответы на вопросыВлияет ли изменение fps на «Неограниченный» в стейбле? Будут ли обратно портированы изменения?
Нет.
Могу ли я применить те же знания и результаты к своему выбору ограничителя кадров в osu! (стейбл)?
Да, с настройками, которые мы выбрали при запуске верификатора задержки (той мини-игры), это примерно соответствует тому, как osu! (стейбл) обрабатывает ввод и рендеринг.
Имеет ли значение, запускаю ли я лазер в однопоточном или многопоточном режиме?
Многопоточность рекомендуется, если ваш ПК может с ней справиться, поскольку это даст вам более высокую производительность (частота обновления и ввода кадров не будет ограничиваться вашим GPU).
Почему она не тестирует звук?
Задержка звука — это совершенно другая проблема. Точность звука и его актуальность в схеме вещей не привязаны к частоте обновления кадров. Кроме того, в лазер мы обрабатываем аудио в собственном потоке, который всегда работает на частоте 1000 Гц.
Почему задержка сертифицирована для работы при неограниченном количестве кадров отрисовки?
Цель здесь состоит в том, чтобы помочь изменить ваше восприятие. Ограничивая частоту кадров только для одного потока, мы можем свести к минимуму переменные (до единицы) и по-прежнему передавать одно и то же. Мы решили использовать неограниченное количество кадров для отрисовки, чтобы убедиться, что некоторых пользователей не убедит ограничение выходных кадров игры. Обратите внимание, что на практике мы этого не хотим, и начиная с этой версии (611) в обычном игровом процессе кадры отрисовываются с ограниченной частотой 1000 Гц в режиме "В основном неограниченно", как упоминалось абзацами выше.
Меня раздражают разрывы изображения
Это одна из причин, по которой не следует использовать высокую частоту кадров для отрисовки. Если вы хотите поэкспериментировать с мини-игрой без разрывов, вы можете на время включить V-Synс/G-Sync в драйверах вашей видеокарты.
Почему я не могу повторить попытку на текущем уровне?
Чтобы всё было проще, мы стремимся к 100%-ному результату. Если вы не смогли увидеть разницу и ошиблись на текущем уровне (и это не был мисс клик), следующий шаг - перейти на один уровень ниже и подтвердить, что вы можете на 100% увидеть разницу на этом уровне. Затем вы можете установить ограничитель кадров на один уровень выше вашего результата, чтобы гарантировать, что вы никогда не почувствуете разницы.
Почему я не могу играть, непосредственно, в сам геймплей в мини-игре?
Режимы отображения предназначены для имитации функций игрового процесса, которые были бы важны, не добавляя к игровому процессу дополнительных затрат. Это позволяет игре работать со скоростью >1000 кадров в секунду на большинстве компьютеров. Мы не будем добавлять аудио, поддержку скинов или что-то в этом роде. Мы можем добавить дополнительные тонкие настройки по вашему запросу.
