Аббревиатура расшифровывается как «число кадров в секунду» и обозначает, сколько кадров видеокарта способна отображать каждую секунду и/или сколько кадров спасобен отображать ваш монитор. Первое зависит от вычислительной мощности видеокарты, а второе полностью зависит от частоты обновления монитора.
В любой игре FPS определяет, аналогичную ситуацию. Чем выше FPS, тем более гладкой и отзывчивой будет игра. Напротив, низкий ФПС создаст впечатление, будто игра поддергивается, фризит, тормозит и сделает ее более сложной и менее приятной для игры. Если вы новичок в играх, будь то настольный компьютер, консоль или и то и другое, вы обязательно услышите или увидите аббревиатуру «FPS», используемую в игровых и аппаратных дискуссиях.
Q & A : How to unlock 60fps Heartstone ? #hearthstone #60fps
- 30 — самая распространенная частота кадров, наблюдаемая в большинстве консольных игр и на некоторых недорогих ПК. Это также рассматривается как минимальный уровень для того, чтобы игра не лагала и была играбельной, хотя большинство людей не замечают никакого поддергивания, пока ФПС не упадет до или ниже 20.
- 60 — часто считается идеальной частотой кадров, 60 FPS достижимо только на консолях в некоторых хорошо оптимизированных играх, в то время как приличный игровой ПК сможет получить 60 кадров в большинстве игр, хотя игры AAA могут требовать определенной степени настроек. Это также максимальная частота кадров, отображаемая на обычных мониторах и телевизорах.
- 120 — достижимо только на высококлассных игровых ПК, которые подключены к мониторам с частотой обновления 144 Гц, 120 ФПС заметно плавнее, чем 60 FPS. Из-за высоких требований к оборудованию и неизбежно высоких цен он остается популярным только среди энтузиастов-геймеров.
- 240 — пиковая частота кадров, которую можете получить сегодня, 240 FPS отображается только на мониторах с частотой обновления 240 Гц, так же как 120 ФПС видна только на 144 Гц мониторах. Разница между 120 FPS и 240 практически не различима. Это в сочетании с еще более высокой стоимостью оборудования делает очевидным, почему 240 кадров предназначены только для небольшого числа игровых энтузиастов.
Почему важен высокий фпс?
Особенно в шутерах. Но он может быть больше или меньше, чем вы ожидаете. Некоторые пользователи могут вообще не получить никаких улучшений.
Представьте, что вы смотрите что-то, работающее на скорости 1 ФПС. Это означает, что вы будете видеть только одно изображение каждую секунду, что будет больше похоже на слайд-шоу, чем на видео. Не только высокая частота кадров влияет на плавность изображения, но и визуальный потенциал, в первую очередь анимация. При условии, что игра имеет естественную анимацию, она будет отображаться плавно с высоким FPS. На устаревших играх с более грубой анимацией, картинка может отображаться с рывками.
Как помогает высокий FPS?
Увидев больше кадров на экране, вы сможете быстрее реагировать на любые происходящие изменения. Более отзывчивая игровая среда позволяет лучше наблюдать и анализировать ее в реальном времени.
В некоторых случаях если у вас онлайн-игра начала дергаться, и персонаж просто застревает позади экрана, то проблема может быть аппаратная. Заключается неисправность в роутере или в вашем провайдере интернета.
Чем FPS выше, тем лучше?
Большинство единодушно согласится, что чем выше, тем лучше. Но правда в том, что иногда более низкий FPS лучше в некоторых случаях.
Зачем нужен высокий фпс?
- Гладкость — если компьютер пытается поддерживать постоянную частоту кадров и, таким образом имеет частые падения FPS, было бы более приятно ограничить его на уровне 30. Так получаете более плавное изображение.
- Погружение . Большинство фильмов снимаются с частотой 24 кадра в секунду, поэтому 30 кадров в секунду могут придать игре более кинематографический характер. В некоторых старых играх или в тех, которые не используют технологию захвата движения, анимация может показаться слишком неуклюжей на высоких частотах.
Программы для повышения фпс
Такой способ выжмет из видеокарты последнее. Более быстрая и плавная графика, как правило более желательна, чем последние графические трюки. Особенно если играете в многопользовательские онлайн-игры. Лучший FPS — 60 кадров в секунду, максимальная частота обновления большинства экранов ноутбуков и мониторов. Запасайтесь терпенинем для выполнения всех пунктов оптимизации.
Инструкция подходит для повышения частоты кадров слабого компьютера и ноутбуков, с установленной операционной системой Windows XP, Windows 7 — 8.1 или Windows 10
Твики для настройки графики
Графическая настройка на более низкое качество даст прирост и увеличит FPS в игре. Некоторые оптимизации важнее других. Уменьшение правильных настроек возовет стабильные 60 фпс без последующего уменьшения качества графики.
Скорее всего, начнете со спецэффектов — динамических теней, отражений, качества воды, размытости движения и цветения. Дополнительные экзотические эффекты, такие как Nvidia PhysX и AMD TressFX, должны быть полностью отключены. Также посмотрите на уменьшение расстояния и плотности объекта, подберите настройки, которые представляют особое значение в играх открытого мира, таких как Grand Theft Auto V и Skyrim.
Возможен разрыв экрана когда вывод кадров видеокарты не синхронизирован с частотой обновления монитора. Когда это произойдет, просто включите V-sync либо на панели управления видеокарты, либо в меню настроек игры.
Самый быстрый способ увидеть прогрессивное увеличение ФПС без каких-либо вложений средств — просто запустить игру с более низким разрешением. Если монитор имеет разрешение 1920 x 1080, можно сбросить его до 1,680 x 1050 или 1,366 x 768, чтобы увидеть некоторое повышение в ФПС. Это сделает графику менее приятной, и многие геймеры предпочитают вернуть собственное разрешение, чтобы уменьшить необходимость сглаживания.
Многие компьютерные игры, не имеют дополнительных визуальных возможностей, особенно если они были перенесены с игровых консолей. Можно попробовать вручную настроить 3D-настройки в Windows с помощью софта от поставщика видеокарты. Существуют также бесплатные программы, такие как Nvidia GeForce Experience и Razer Cortex. Которые предлагают предварительно улучшенные настройки для оптимизации под FPS в популярных игр.
Установленные внутриигровые моды, особенно если они несут графические улучшения, также могут быть причиной низкого фпс.
Увеличение фпс закрытием фоновых приложений
Если возможно, всегда закрывайте фоновые приложения операционной системы перед началом игры. Это освободит процессорные циклы памяти компьютера, и сможете полностью наслаждаться ускоренным и плавным игровым процессом. Фоновый режим подразумевает часто работу программ, даже без видимого окна на рабочем столе. Что добавляет нагрузку на систему в целом.
Программы с большим объемом памяти, такие как iTunes, Google Chrome и Microsoft Office, запускают «вспомогательное» приложение, которое удерживает программу даже после закрытия окна. Проверьте свои уведомления или диспетчер задач, чтобы найти лишний софт и закрыть его. Безобидные программы, которые поставляется с мышью или клавиатурой, могут замедлить работу вашей системы.
На некоторое увеличение фпс в играх, влияют многие программы Windows добавляющие функцию автозапуска при их установке и могут постоянно работать в фоновом режиме. Для Windows 7 и более ранних версий одновременно нажмите кнопку Windows и «R», затем введите «msconfig» и «enter», чтобы открыть окно конфигурации.
Перейдите на вкладку «Автозагрузка», затем отключите все, что вам не нужно, и перезагрузитесь. В Windows 8 и более поздних версиях это еще проще: просто нажмите Ctrl + Shift + Esc, чтобы открыть диспетчер задач и щелкнуть вкладку «Запуск». Если не знаете, что такое элемент в списке, выполните поиск в Интернете. Вероятно что кто-то уже задал этот вопрос.
Влияет ли обновление драйверов на фпс?
Компания Nvidia как AMD стараются регулярно обновлять драйвера для своих видеокарт. Последние драйверы поднимают производительность, особенно для новых игр. Найдите последнюю версию. Убедитесь, соответствуют ли драйвера вашей ОС, а также конкретной модели графической карты. Если модель карты которая неизвестна, оба производителя предлагают инструмент автоматического обнаружения, чтобы получить нужный пакет.
Свежие дарайвера всегда можно найти и скачать с официального сайта производителя вашей видеокарты.
Если используете ноутбук с интегрированной графикой Intel, вы вероятно не увидите обновленных драйверов. Стоит проверять официальный сайт, чтобы узнать, есть ли что-то новое.
Иногда производители видеокарт ошибаются в усовершенстWowаннии новых драйверах, которые негативно скажутся на фпс игр. Если внезапно увидите уменьшение частоты кадров или ошибки в текстурах, попробуйте полностью удалить графический драйвер, загрузив более старую версию и используя ее вместо этого. Обе компании Nvidia и AMD предлагают архивные версии своих пакетов драйверов.
Настройка графики новой видеокарты
Повышение ФПС — требует вложений
Самый простой способ поднять производительность видеокарты — заменить старую. (Это верно для настольных ПК, конечно — даже на ноутбуках с дискретными видеокартами, карты обычно припаиваются к материнской плате и не могут быть удалены никак.) Хорошей новостью считается то, что в эти дни есть невероятный ассортимент видеокарт как с базовой конфигурацией, так и уже с ускоренным чипом. Также возможно провести «boost»(читайте:Как разогнать видеокарту?) самому.
Boost видеокарты дает хороший прирост фпс во всех играх. Даже самые недорогие видеокарты, такие как Nvidia GTX 750 Ti или AMD Radeon R7 260X, стоит порядка 150 долларов США. Могут достигать 60 FPS в большинстве современных игр с разрешением 1080p с некоторыми из настроек, упомянутых ранее. Подробнее: Nvidia Geforce или AMD Radeon?.
Видеокарта для игр — это дорого?
Если уже выбрали более дорогую графическую карту, следующее продвижение ФПС, состоит в подборе процессора и оперативной памяти. (Процессоры для ноутбуков не могут быть заменены, но в большинстве из них один слот для DIMM для оперативной памяти). Более быстрый процессор увеличит частоту кадров, но не настолько, как улучшенная видеокарта. Больше ОЗУ позволит компьютеру управлять операционной системой и приложениями эффективней.
Более усовершенстWowанные программы доступны для улучшения графики и производительности. Это видеокарты, с конфигурациями Nvidia SLI или Crossfire, или разработки систем охлаждения (Подробнее:Какое охлаждение лучше водяное или воздушное?) процессора и графического процессора для разгона. Но это слишком много. Предыдущие параметры должны обеспечить более чем достаточное поднятие скорости в играх на слабом компьютере. Вы получаете увеличение в 60 ФПС, если играете с качеством 1080p.
Cделали все правильно? Тогда ускоренная графика и повышенный прирост фпс (fps), не заставит себя долго ждать, как на предустановленных играх, так и браузерных.
Просто некоторые вещи для дополнения: драйверы GPU не повышают производительность, они просто делают GPU совместимым с системой и программным обеспечением, драйверы Game Ready на самом деле мне тоже не помогают (Nvidia GPU); обычно программы повышения бесполезны и не имеют большого значения, они помогают завершать бесполезные процессы, но они обычно имеют низкую загрузку процессора, VRAM и памяти. И удачи в игре MP на средних с Intel GPU
У меня есть одна проблема, и это, кажется, мой компьютер ограничивает мой FPS на 30, когда он может легко запустить его на более высоких кадрах. Я уже увеличил максимальную частоту кадров в секунду в консоли, но по какой-то причине мой FPS не превысил 30. Я хотел бы отметить, что мой компьютер не плохой компьютер, это очень мощный компьютер, он может запускать Warframe и выше FPS. Просто кажется, что TF2 форсирует ограничение FPS, и я не знаю, как это исправить. Есть идеи как убрать эту странную шляпу?
Источник: fps-up.ru
Как заставить игру работать с частотой 60fps
Представьте себе задачу: у вас есть игра, и вам нужно, чтобы она работала с частотой 60 fps на 60-герцовом мониторе. Ваш компьютер достаточно быстр для того, чтобы рендеринг и обновление занимали несущественное количество времени, поэтому вы включаете vsync и пишете такой игровой цикл:
while(running)
Очень просто! Теперь игра работает с 60fps и всё идёт как по маслу. Готово. Спасибо, что прочитали этот пост.
Ну ладно, очевидно, что всё не так хорошо. Что если у кого-то слабый компьютер, который не может рендерить игру с достаточной для обеспечения 60fps скоростью? Что если кто-то купил один из тех крутых новых 144-герцовых мониторов? Что если он отключил в настройках драйвера vsync?
Вы можете подумать: мне нужно где-то измерять время и обеспечить обновление с правильной частотой. Это сделать довольно просто — достаточно накапливать время в каждом цикле и выполнять обновление каждый раз, когда он превосходит порог в 1/60 секунды.
while(running) < deltaTime = CurrentTime()-OldTime; oldTime = CurrentTime(); accumulator += deltaTime; while(accumulator >1.0/60.0) < update(); accumulator -= 1.0/60.0; >render(); display(); >
Готово, проще некуда. На самом деле есть куча игр, в которых код по сути выглядит именно так. Но это неправильно. Это подходит для регулировки таймингов, но приводит к проблемам с дёрганьем (stuttering) и прочим рассогласованиям.
Очень часто встречается такая проблема: кадры отображаются не ровно 1/60 секунды; даже когда vsync включен, всегда присутствуют небольшой шум во времени их отображения (и в точности таймера ОС). Поэтому будут возникать ситуации, когда вы рендерите кадр, а игра считает, что время повторного обновления ещё не настало (потому что аккумулятор на крошечную долю запаздывает), поэтому она просто снова повторяет тот же кадр, но теперь игра запаздывает на кадр, поэтому выполняет двойное обновление. Вот и дёрганье!
Погуглив, можно найти несколько готовых решений для устранения этого дёрганья. Например, игра может использовать переменный, а не постоянный шаг времени, и просто полностью отказаться от аккумуляторов в коде таймингов. Или можно реализовать постоянный шаг времени с интерполирующим рендерером, описанный в довольно известной статье «Fix Your Timestep» Гленна Филдера. Или можно переделать код таймера так, чтобы он был немного более гибким, как описано в посте «Frame Timing Issues» Slick Entertainment (к сожалению, этого блога уже нет).
Нечёткие тайминги
Метод Slick Entertainment с «нечёткими таймингами» в моём движке было реализовать проще всего, потому что он не требовал изменений в логике игры и рендеринге. Поэтому в The End is Nigh я использовал его. Достаточно было просто вставить его в движок. По сути, он просто позволяет игре обновляться «немного раньше», чтобы избежать проблем с рассогласованием таймингов. Если в игре включен vsync, то он просто позволяет использовать в качестве основного таймера игры vsync, и обеспечивает плавную картинку.
Вот как код обновления выглядит сейчас (игра «может работать» при 62 fps, но всё равно обрабатывает каждый шаг времени так, как будто работает при 60fps. Не совсем понимаю, зачем ограничивать его так, чтобы значения аккумулятора не опускались ниже 0, но без этого код не работает). Можно интерпретировать это так: «игра обновляется с фиксированным шагом, если рендерится в интервале от 60fps до 62fps»:
while(accumulator > 1.0/62.0)< update(); accumulator -= 1.0/60.0; if(accumulator
Если включён vsync, то он по сути позволяет игре работать с фиксированным шагом, который совпадает с частотой обновления монитора, и обеспечивает плавную картинку. Основная проблема здесь в том, что при отключенном vsync игра будет работать немного быстрее, но разница столь незначительна, что никто её не заметит.
Спидраннеры. Спидраннеры заметят. Вскоре после выхода игры они заметили, что некоторые люди в списках рекордов спидрана имели более плохое время прохождения, но по подсчёту оказавшееся более хорошим, чем у других. И непосредственной причиной этого была нечёткость таймингов и отключение vsync в игре (или 144-герцовые мониторы). Поэтому стало очевидно, что нужно выключать эту нечёткость при отключении vsync.
Ой, но ведь мы никак не может проверить, отключен ли vsync. В ОС для этого нет вызоWow, и хотя мы можем запрашивать из приложения включение или отключение vsync, на самом деле это полностью зависит от ОС и графического драйвера.
Единственное, что можно сделать — отрендерить кучу кадров, попробовать измерить время выполнения этой задачи, а затем сравнить, занимают ли они примерно одинаковое время. Именно так я и сделал для The End is Nigh. Если в игре не включен vsync с частотой 60 Гц, то она откатывается к исходному таймеру кадров со «строгими 60 fps». Кроме того, я добавил в файл конфигурации параметр, принуждающий игру не использовать нечёткость (с основном для спидраннеров, которым нужно точное время) и добавил для них точный обработчик внутриигрового таймера, позволяющий использовать autosplitter (это скрипт, работающий с таймером атомного времени).
Некоторые пользователи по-прежнему жаловались на возникающие иногда дёрганья отдельных кадров, но они казались настолько редкими, что их можно было объяснить событиями ОС или другими внешними причинами. Ничего особо страшного. Верно?
Просматривая недавно свой код таймера, я заметил нечто странное. Аккумулятор смещался, каждый кадр занимал чуть больше времени, чем 1/60 секунды, поэтому периодически игра думала, что запаздывает на кадр, и выполняла двойное обновление. Оказалось, что мой монитор работает с частотой 59,94 Гц, а не 60 Гц. Это означало, что каждые 1000 кадров ему приходится выполнять двойное обновление, чтобы «догнать». Однако это очень просто исправить — достаточно изменить интервал допустимых частот кадров (не с 60 до 62, а с 59 до 61).
while(accumulator > 1.0/61.0)< update(); accumulator -= 1.0/59.0; if(accumulator
Описанная выше проблема с отключенным vsync и мониторами высокой частоты по-прежнему сохраняется, и к нему применимо то же решение (откат к строгому таймеру, если монитор не синхронизирован vsync на 60).
Но как узнать, подходящее ли это решение? Как убедиться, что оно будет правильно работать на всех сочетаниях компьютеров с разными типами мониторов, с отключенным и включенным vsync, и так далее? Очень сложно отслеживать все эти таймерные проблемы в голове, и разбираться что вызывает рассинхронизацию, странные циклы и тому подобное.
Симулятор монитора
Пытаясь придумать надёжное решение «проблемы 59,94-герцового монитора», я осознал, что не могу просто выполнять проверки методом проб и ошибок, надеясь найти надёжное решение. Мне нужен был удобный способ тестирования разных попыток написания качественного таймера и простой способ проверки, вызывает ли он дёрганье или сдвиг времени в разных конфигурациях мониторов.
На сцене появляется Monitor Simulator. Это написанный мной «грязный и быстрый» код, симулирующий «работу монитора», и по сути выводящий мне кучу чисел, дающих представление о стабильности каждого тестируемого таймера.
Например, для простейшего таймера из начала статьи выводятся такие значения:
20211012021011202111020211102012012102012[. ]
TOTAL UPDATES: 10001
TOTAL VSYNCS: 10002
TOTAL DOUBLE UPDATES: 2535
TOTAL SKIPPED RENDERS: 0
GAME TIME: 166.683
SYSTEM TIME: 166.7
Сначала код выводит для каждого эмулируемого vsync число количества «обновлений» игрового цикла после предыдущего vsync. Любые значения, отличающиеся от сплошных 1, приводят к дёрганой картинке. В конце код выводит накопившуюся статистику.
При использовании «нечёткого таймера» (с интервалом 60–62fps) на 59,94-герцовом мониторе код выводит следующее:
111111111111111111111111111111111111111111111[. ]
TOTAL UPDATES: 10000
TOTAL VSYNCS: 9991
TOTAL DOUBLE UPDATES: 10
TOTAL SKIPPED RENDERS: 0
GAME TIME: 166.667
SYSTEM TIME: 166.683
Дёрганье кадра возникает очень редко, поэтому его может быть сложно заметить при таком количестве 1. Но выводимая статистика чётко показывает, что игра выполнила здесь несколько двойных обновлений, что приводит к дёрганью. В исправленной версии (с интервалом 59–61 fps) присутствует 0 пропущенных или двойных обновлений.
Также можно отключить vsync. Остальные данные статистики становятся неважными, но это чётко показывает мне величину «сдвига времени» (сдвига системного времени относительно того, где должно находиться игровое время).
GAME TIME: 166.667
SYSTEM TIME: 169.102
Именно поэтому при отключенном vsync нужно переключаться на строгий таймер, иначе эти расхождения со временем накапливаются.
Если я присвою времени рендеринга значение .02 (то есть для рендеринга нужно «больше, чем кадр»), то снова получу дёрганье. В идеале паттерн игры должен выглядеть как 202020202020, но он немного неравномерен.
В этой ситуации этот таймер ведёт себя немного лучше предыдущего, но становится всё запутаннее и всё сложнее разобраться, как и почему он работает. Но я ведь просто могу засунуть тесты в этот симулятор и проверить, как они себя ведут, а разбираться в причинах можно и позже. Пробы и ошибки, детка!
while(accumulator >= 1.0/61.0)< simulate_update(); accumulator -= 1.0/60.0; if(accumulator < 1.0/59.0–1.0/60.0) accumulator = 0; >
Можете скачать симулятор монитора и самостоятельно проверить разные методы подсчёта таймингов. Напишите мне, если найдёте что-нибудь получше.
Я доволен своим решением не на 100% (в нём всё равно требуется хак с «распознаванием vsync» и могут возникать единичные дёрганья при рассинхронизации), но я считаю, что он почти так же хорош, как и попытка реализации игрового цикла с фиксированным шагом. Частично эта проблема возникает потому, что очень сложно определить параметры того, что считается здесь «приемлемым».
Главная сложность заключается в компромиссе между сдвигом времени и двойными/пропущенными кадрами. Если запустить 60-герцовую игру на 50-герцовом PAL-мониторе… то каким будет верное решение? Хотите ли вы дикого дёрганья, или заметно более медленной работы игры? Оба варианта кажутся плохими.
Отделённый рендеринг
В предыдущих методах я описывал то, что называю «рендерингом с фиксированным шагом» (lockstep rendering). Игра обновляет своё состояние, затем выполняет рендеринг, а при рендеринге она всегда отображает наиболее свежее состояние игры. Рендеринг и обновление соединены вместе.
Но можно их разделить. Именно это делает метод, описанный в посте «Fix Your Timestep». Я не буду повторяться, вам определённо стоит прочитать этот пост. Это (насколько я понимаю) «отраслевой стандарт», используемый в AAA-играх и таких движках, как Unity и Unreal (однако в напряжённых активных 2D-играх обычно предпочитают использовать фиксированный шаг (lockstep), потому что иногда просто необходима точность, которую даёт этот метод).
Но если описать вкратце пост Гленна, то в нём просто описывается метод обновления с фиксированной частотой кадров, но при рендеринге выполняется интерполяция между «текущим» и «предыдущим» состоянием игры, а текущее значение аккумулятора используется как величина интерполяции. При таком способе можно выполнять рендеринг с любой частотой кадров и обновлять игру с любой частотой, а картинка всегда будет плавной. Никакого дёрганья, работает универсально.
while(running)< computeDeltaTimeSomehow(); accumulator += deltaTime; while(accumulator >= 1.0/60.0) < previous_state = current_state; current_state = update(); accumulator -= 1.0/60.0; >render_interpolated_somehow(previous_state, current_state, accumulator/(1.0/60.0)); display(); >
Вот так, элементарно. Проблема решена.
Теперь нужно просто сделать так, чтобы игра могла рендерить интерполированные состояния… но постойте, на самом деле это совсем непросто. В посте Гленна просто допускается, что это можно сделать. Достаточно легко кэшировать предыдущее положение игрового объекта и интерполировать его перемещения, но в состояние игры входит гораздо больше всего. Нужно учитывать в нём состояния анимации, создание и уничтожение объектов, и ещё кучу всякого.
Плюс в логике игры нужно учитывать, телепортируется ли объект или его нужно плавно двигать, чтобы интерполятор не делал ложных предположений о пути, проделанным игровым объектом в его текущее положение. Настоящий хаос может возникнуть с поворотами, особенно если за один кадр поворот объекта может смениться больше, чем на 180 градусов. А как правильно обрабатывать создаваемые и уничтожаемые объекты?
В данный момент я как раз работаю над этой задачей в своём движке. По сути, я просто интерполирую перемещения, а всё прочее оставляю, как есть. Вы не заметите дёрганья, если объект не движется плавно, поэтому пропуск кадров анимации и рассинхронизация создания/уничтожения объекта вплоть до одного кадра не станут проблемой, если всё остальное выполняется плавно.
Однако странно то, что по сути этот метод рендерит игру в состоянии, запаздывающем на 1 состояние игры от того, где сейчас находится симуляция. Это незаметно, но может соединяться с другими источниками задержек, например, задержкой ввода и частотой обновления монитора, поэтому те, кому нужен максимально отзывчивый игровой процесс (я говорю про вас, спидраннеры), скорее всего предпочтут, чтобы в игре использовался lockstep.
В своём движке я просто даю возможность выбора. Если у вас 60-герцовый монитор и быстрый компьютер, то лучше всего использовать lockstep со включенным vsync. Если у монитора нестандартная частота обновления, или ваш слабый компьютер не может постоянно рендерить 60 кадров в секунду, то включайте интерполяцию кадров. Я хочу назвать эту опцию «unlock framerate» («разблокировать частоту кадров»), но люди могут подумать, что это просто означает «включите эту опцию, если у вас хороший компьютер». Однако эту проблему можно решить позже.
Вообще-то есть метод, позволяющий обойти эту проблему.
Обновления с переменным шагом времени
Меня многие спрашивали, почему бы просто не обновлять игру с переменным шагом времени, а программисты-теоретики часто говорят: «если игра написана ПРАВИЛЬНО, то можно просто обновлять её с произвольным шагом времени».
while(running)
Никаких странностей с таймингами. Никакого странного интерполяционного рендеринга. Всё просто, всё работает.
Вот так, элементарно. Проблема решена. И теперь навсегда! Лучшего результата добиться невозможно!
Теперь достаточно просто сделать так, чтобы игровая логика работала с произвольным шагом времени. Это ведь просто, достаточно заменить весь такой код:
position += speed;
position += speed * deltaTime;
и заменить вот такой код:
speed += acceleration; position += speed;
speed += acceleration * deltaTime; position += speed * deltaTime;
и заменить вот такой код:
speed += acceleration; speed *= friction; position += speed;
Vec3D p0 = position; Vec3D v0 = velocity; Vec3D a = acceleration*(1.0/60.0); double f = friction; double n = dt*60; double fN = pow(friction, n); position = p0 + ((f*(a*(f*fN-f*(n+1)+n)+(f-1)*v0*(fN-1)))/((f-1)*(f-1)))*(1.0/60.0); velocity = v0*fN+a*(f*(fN-1)/(f-1));
Откуда это всё взялось?
Последняя часть в буквальном смысле скопирована из вспомогательного кода моего движка, выполняющего «действительно корректное, не зависящее от частоты кадров движение с ограничивающим скорость трением». В нём есть немного мусора (эти умножения и деления на 60). Но это «правильная» версия кода с переменным шагом времени для предыдущего фрагмента. Я вычислял её больше часа при помощи Wolfram Alpha.
Теперь меня могут спросить, почему бы не сделать вот так:
speed += acceleration * deltaTime; speed *= pow(friction, deltaTime); position += speed * deltaTime;
И хотя это как будто сработает, на самом деле так делать неправильно. Можете проверить сами. Выполните два обновления со значением deltaTime = 1, а затем выполните одно обновление с deltaTime = 2, и результаты будут отличаться.
Обычно мы стремимся, чтобы игра работала согласованно, поэтому такие расхождения не приветствуются. Вероятно, это достаточно хорошее решение, если точно знать, что deltaTime всегда примерно равно одному значению, но тогда нужно написать код, обеспечивающий выполнение обновлений с какой-то постоянной частотой и… да. Верно, теперь мы пытаемся сделать всё «ПРАВИЛЬНО».
Если такой крошечный фрагмент кода разворачивается в чудовищные математические вычисления, то представьте более сложные паттерны движения, в которых участвует множество взаимодействующих объектов, и тому подобное. Теперь можно чётко увидеть, что «правильное» решение нереализуемо. Максимум, чего мы можем добиться — это «грубое приближение». Давайте пока об этом забудем, и допустим, что у нас и в самом деле есть «действительно корректная» версия функций движения. Здорово, правда?
Вообще-то нет. Вот реальный пример проблемы, которая у меня возникла с этим в Bombernauts. Игрок может подпрыгивать примерно на 1 тайл, а игра разворачивается в сетке из блоков в 1 тайл. Чтобы приземлиться на блок, ноги персонажа должны подняться над верхней поверхностью блока.
Но так как распознавание коллизий здесь выполняется с дискретным шагом, то если игра работает с низкой частотой кадров, иногда ноги не будут достигать поверхности тайла, хоть они и следовали по той же кривой движения, и вместо подъёма игрок будет соскальзывать со стены.
Очевидно, что эта проблема решаема. Но она иллюстрирует виды проблем, с которыми мы сталкиваемся при попытке правильной реализации работы игрового цикла с переменным шагом времени. Мы теряем согласованность и детерминированность, поэтому придётся избавиться от функций реплея игры по записи ввода игрока, детерминированного мультиплеера и того подобного. Для основанной на рефлексах быстрой 2D-игры согласованность чрезвычайно важна (и снова привет спидраннерам).
Если вы попытаетесь отрегулировать шаги времени так, чтобы они не были ни слишком большими, ни слишком маленькими, то лишитесь основного преимущества, получаемого от переменного шага времени, и спокойно можете использовать два других описанных здесь метода. Овчинка не будет стоить выделки. Слишком много лишних усилий будет вложено в игровую логику (реализация правильной математики движения), и потребуется слишком много жертв в области детерминированности и согласованности. Я бы использовал этот метод только для музыкальной ритм-игры (в которой уравнения движения просты и требуется максимальная отзывчивость и плавность). Во всех других случаях я выберу фиксированное обновление.
Теперь вы знаете, как заставить игру работать с постоянной частотой 60fps. Это тривиально просто, и больше ни у кого с этим не должно возникать проблем. Больше нет никаких других проблем, усложняющих эту задачу.
Источник: habr.com
Overwatch 2: как исправить ограничение на 60 кадров в секунду на ПК | Увеличить FPS до 120
Недавно выпущенная Overwatch 2 уже привлекла большую базу игроков. Это продолжение и преемник Overwatch. Вам нужно только скачать игру, чтобы играть в нее.
В игре произошли некоторые изменения, особенно в командах. FPS имеет решающее значение для вашего игрового процесса во всех шутерах от первого лица. Мы покажем вам, как поднять ограничение FPS в Overwatch 2.
Еще о Overwatch 2: Как перенести скины Overwatch в Overwatch 2 | Как объединить учетные записи
Как исправить ограничение на 60 FPS на ПК, увеличить FPS до 120 в Overwatch 2
Когда вы играете в такие игры, как Overwatch 2 ограничение частоты кадров будет полезным. Разрыв экрана указывает на то, что ваша видеокарта и монитор не синхронизированы. Ужасно, когда экран разрывается во время игры.
По этой причине были созданы ограничители кадров. Максимальная частота кадров в Overwatch 2 — 60 FPS, хотя можно поднять и до 120.
Изменение частоты кадров
Частота кадров в Overwatch 2 на ПК ограничена 60 кадрами в секунду. Выбрав параметры в меню, вы можете изменить это.
Найдите частоту кадров после отключения вертикальной синхронизации на вкладке «Видео». Измените параметр «Частота кадров» на «Пользовательский». Определите желаемую и максимальную частоту кадров.
Имейте в виду, что счетчик FPS всегда будет ограничен 60 FPS в меню, если вы включили его в настройках.
Это также может потребоваться сделать в настройках видеокарты. Выберите «Управление настройками 3D» в настройках Radeon или в панели управления Nvidia. Отслеживайте вертикальную синхронизацию, прокручивая вниз. Ваша частота кадров не будет ограничена 60 кадрами в секунду, когда вы вернетесь в игру.
Читайте так же
Разработчик Overwatch 2 обсуждает планы балансировки пребывания и других персонажей в преддверии бета-тестирования PvP
Трансляция разработчиков Overwatch 2 состоится завтра
Overwatch 2: Руководство по достижениям «Смерть сверху»
Overwatch 2: как разблокировать и экипировать карточку с именем
Как получить доступ к многопользовательской бета-версии Overwatch 2
Комментарии
GameEnix.ru — это новый игровой блог и интернет-магазин самых новых игр. Помимо всего этого у нас на сайте есть видео-архив в котором можно просмотреть самые новые игровые трейлеры, свежие стримы, прохождения и многое другое.
Не забывайте про новости из игрового мира, читайте и высказывайте своё мнение, обсуждайте их с другими пользователями мы уверены, что пребывание на нашем сайте будет доставлять вам удовольствие.
All right reserved «GameEnix.ru» v2.2.0 © 2012-2023
GameEnix.ru — информативный портал для геймеров.
Полное или частичное копирование материалов сайта допускается только с активной ссылкой на источник!
Нашли ошибку? Выделите и нажмите Ctrl+Enter
Источник: gameenix.ru