Использовать или не использовать VSync - PullRequest
5 голосов
/ 07 мая 2011

Я решаю, использовать ли VSync для новой игры, которую я разрабатывал с использованием OpenGL. Цель состоит в том, чтобы предоставить пользователю наилучшие игровые возможности и обеспечить хороший баланс между производительностью и качеством. Эта игра предназначена для работы как на старых (Intel / Netbook) компьютерах, так и на более новых (NVidia / i7 desktop). Однако я знаю, что целью VSync является предотвращение разрывов; Мне никогда не удавалось воспроизвести эту проблему, даже если VSync выключен. Обеспечить лучший опыт; VSync должен быть включен или выключен?

Ответы [ 3 ]

9 голосов
/ 08 мая 2011

Есть много вещей, которые можно сказать по этому вопросу.Позвольте мне сосчитать путь:

  1. , если вы не видите слезы, вы, вероятно, vsync'ed, даже если вы думаете, что это не так.Причины могут быть разными, но в конечном итоге замена буферов в середине кадра очень заметна, если происходит какое-либо движение (одна из причин может заключаться в том, что вы не настроены для переворота буферов, поэтому что-то должно делать копию вашего кадрового буфера)
  2. vsync on также имеет заметные артефакты.Как правило, он создает кадры, которые отображаются в течение различного промежутка времени, более привязанного к частоте обновления дисплея, чем к скорости рендеринга.Это может привести к микрозадерживанию, и его очень трудно контролировать, так как вы не не знаете , когда генерируете свой кадр, на каком тике он будет отображаться, поэтому вы не можете компенсировать артефакты движения.Вот почему некоторые люди пытаются ограничить скорость рендеринга частотой обновления.Всегда выполняйте рендеринг со скоростью 60 кадров в секунду (или 30 кадров в секунду), время обновления составляет time += 16.7ms Джон Кармак запрашивает режим, который выполняет «vsync at 60Hz, но не синхронизирует, если я пропустил крайний срок», как я полагаю, по этой причине.
  3. vsync on для экономии энергии (важно для нетбуков)
  4. vsync off для уменьшения задержки на входе (когда ваш вход составляет 3 кадра до отображения, он может начать иметь значение).Вы можете попытаться компенсировать кое-что из этого, но, в конечном счете, сложно внедрить обновления ввода в самую последнюю минуту.

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

4 голосов
/ 07 мая 2011

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

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

2 голосов
/ 08 мая 2011

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

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

И, как упоминал schanaader, обычно игрыоставил бы vsync в качестве опции конфигурации где-нибудь в меню настроек видео.Значение по умолчанию должно быть «включено» для тех, кто не знает, что означает vsync, и если пользователь достаточно осведомлен, у него есть возможность настроить его, чтобы увидеть, в чем разница

...