Разработка
Разработка
Выберите платформу

Фиксированный фовеальный рендеринг (упразднен)

Обновлено: 18 окт 2024 г.
Mobile SDK Deprecation
С 31 августа 2022 г. Mobile SDK и библиотека VrApi не поддерживаются. Мы будем предоставлять обновления через расширения OpenXR и наш пакет OpenXR Mobile SDK, а не через обновления API Meta для мобильных устройств или ПК.
Прекращение поддержки Mobile SDK означает следующее:
  • Новые приложения не будут иметь доступа к API Meta Native Mobile, но существующие приложения смогут по-прежнему их использовать.
  • Помощь при создании новых приложений с использованием Meta Native API не предоставляется. Рекомендации по переносу существующих приложений в OpenXR можно найти в руководствах для разработчиков.
  • В Meta Native API будут устранены только критические проблемы, связанные с обеспечением безопасности, конфиденциальности или защиты.
  • Любое тестирование Meta Native Mobile будет ограничено автоматизированными тестами качества, чтобы гарантировать работоспособность основных функций.
Подробнее о прекращении поддержки см. в статье Переход Meta на OpenXR: прекращение поддержки проприетарных API.
В этом руководстве рассказывается, как реализовать фиксированный фовеальный рендеринг (FFR) в нативном приложении VRAPI. Чтобы понять, как работает FFR и как проводить его отладку, перейдите по этому адресу.

Как реализовать динамическую фовеацию

Регулировка динамической фовеации — это рекомендованный способ использования FFR. Динамическую FFR можно активировать с помощью:
vrapi_SetPropertyInt( &Java, VRAPI_DYNAMIC_FOVEATION_ENABLED, true );
Динамическая фовеация отключена по умолчанию. Когда динамическая фовеация включена, уровень фовеации будет автоматически настраиваться с максимальным значением, установленным на VRAPI_FOVEATION_LEVEL. Для настройки этого вызовите следующее:
vrapi_SetPropertyInt( &Java, VRAPI_FOVEATION_LEVEL, level );
При вызове level может быть 0, 1, 2, 3 или 4. Уровни фовеации 3 (высокий) и 4 (максимально высокий) считаются одинаковыми при динамической фовеации. Выбор одного из этих двух уровней совпадает с выбором VRAPI_FOVEATION_LEVEL. Например, если VRAPI_FOVEATION_LEVEL установлен на уровень 4, динамическая фовеация будет изменяться только между уровнями 0, 1, 2 и 4.
Поскольку динамический фовеальный рендеринг использует загрузку ГП для изменения уровня фовеации, он достаточно реактивен, и уровень должен увеличиваться до того, как появится устаревший кадр, в отличие от фиксированного уровня FFR. Однако, если наблюдается увеличенное количество устаревших кадров на определенных уровнях, динамический FFR можно включить или выключить в этих зонах. Использование динамического FFR настоятельно рекомендуется.
Если разработчики приложений с динамическим FFR хотят увидеть, как выглядит их приложение, чтобы проверить, не слишком ли высок уровень FFR, они могут использовать следующую команду setprop:
setprop debug.oculus.foveation.dynamic 0
Эта команда сразу отключит динамический FFR, и уровень фовеации немедленно установится на VRAPI_FOVEATION_LEVEL без необходимости перекомпилировать версию приложения с нединамическим FFR.

Как реализовать статический фиксированный фовеальный рендеринг

Сначала нужно проверить, поддерживает ли устройство фовеальный рендеринг. Проверьте системное свойство VRAPI_SYS_PROP_FOVEATION_AVAILABLE, которое вернет VRAPI_TRUE, если поддерживается фовеальный рендеринг.
Затем, чтобы использовать FFR, вызовите следующее, чтобы настроить степень фовеации:
vrapi_SetPropertyInt( &Java, VRAPI_FOVEATION_LEVEL, level );
При вызове level может быть 0, 1, 2, 3 или 4.

Включение подвыборочной компоновки

Для улучшения визуального качества фовеального рендеринга мы рекомендуем приложениям включать подвыборочную компоновку. Это включит билинейное увеличение разрешения в областях с низким разрешением, что приведет к более плавному изображению и устранит артефакты с пикселями в периферийном зрении (см. пример изображения ниже). Подробнее о подвыборочной компоновке см. в спецификациях GL и Vulkan.
Чтобы включить подвыборочную компоновку, просто добавьте флаг VRAPI_SWAPCHAIN_CREATE_SUBSAMPLED_BIT при создании подстановки текстур цвета:
ovrSwapChainCreateInfo swapChainCreateInfo = {
    .Format = colorFormat,
    .Width = width,
    .Height = height,
    .Levels = 1,
    .FaceCount = 1,
    .ArraySize = 2,
    .BufferCount = 3,
    .CreateFlags = VRAPI_SWAPCHAIN_CREATE_SUBSAMPLED_BIT, // make sure the swapchain is created with subsampled bit!
    .UsageFlags = VRAPI_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT,
};
colorTextureSwapChain = vrapi_CreateTextureSwapChain4(&swapChainCreateInfo);
Логотип навигации
Русский
© 2026 Meta