Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Синхронизация кадра VR

Синхронизация кадров в режиме виртуальной реальности работает точно так же, как и в режиме без виртуальной реальности с включенной вертикальной синхронизацией (см. документацию по порядку выполнения событийных функций). Единственное отличие состоит в том, что Unity не зависит от VSyncв базовом 3D SDK. Вертикальная синхронизация (VSync) — это параметр отображения, ограничивающий частоту кадров в игре, чтобы она соответствовала частоте обновления монитора, чтобы предотвратить разрыв изображения.
См. в Словарь
, но вместо этого в зависимости от того, с каким VR SDK он в настоящее время выполняет рендеринг. Нет никакой выгоды в рендеринге быстрее, чем может обновиться дисплей. Вместо этого Unity фокусируется на максимально эффективном использовании времени.

В многопоточном рендеринге Unity синхронизирует поток моделирования и поток рендеринга на ЦП. Это уменьшает задержку. Поток моделирования в первую очередь выполняет скриптыфрагмент кода, который позволяет создавать собственные компоненты, запускать игровые события, изменять свойства компонентов. со временем и реагировать на пользовательский ввод любым удобным для вас способом. Подробнее
См. в Словарь
звуки, ИИ и другие задачи, необходимые для моделирования. пробег. Поток рендеринга фокусируется на отправке вызовов отрисовки графическому драйверу, который, в свою очередь, проверяет их и отправляет на графический процессор. Чтобы добиться наибольшего параллелизма между потоками, Unity выполняет графические команды по мере их поступления и одновременно моделирует следующий кадр.

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

Минимально возможная задержка

Прежде чем Unity сможет отправить первую команду рендеринга, которая зависит от матрицы преобразования представления, она должна сначала получить матрицу представления из VR SDK. Чтобы свести задержку к минимуму, VR SDK прогнозирует преобразование головы дважды за кадр:

  • Один прогноз для отображения текущего кадра. Этот прогноз соответствует тому, где на самом деле находится ваша голова в реальном пространстве, когда кадр появляется на экране.

  • Один прогноз для имитации следующего кадра.

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

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

Что происходит, когда Unity пропускает кадр?

Если Unity не отправляет полностью визуализированный кадр вовремя, чтобы он был готов к следующему обновлению экрана, может произойти несколько вещей, в зависимости от того, какой SDK VR активен. VR SDK может:

  • Показать ранее отправленный кадр. Это выглядит как дрожание и значительно снижает качество просмотра.

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

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

Для получения дополнительной информации о репроецировании (иногда называемом искажением времени) см. вики-запись XinReality на странице Искажение времени.

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

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

Привязка к графическому процессору и привязка к процессору в виртуальной реальности

Каждый дисплей имеет определенную частоту обновления, к которой привязана Unity. Вы можете получить это во время выполнения с помощью VRDevice.refreshRate. Значение 1, деленное на refreshRate, дает вам время, выделенное для одного кадра.

Например, это может быть 11,1 мс при частоте обновления 90 Гц.

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

  • Если ваше приложение привязано к ЦП, кадр занимает больше времени, чем указанное время кадра, но профилировщик Unity отображает XR.WaitForGPU короче, чем один кадр.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3