AR/VR

VR Rendering

2016 год. Первые потребители Oculus Rift массово жалуются на тошноту. Команда инженеров обнаруживает: проблема не в дисплее и не в трекинге - проблема в rendering pipeline. За 8 месяцев они изобретают ATW (Asynchronous TimeWarp). Motion sickness уходит. Сегодня весь VR стоит на этой идее.

  • **Meta Quest 3:** Dynamic Foveated Rendering с eye tracking снижает нагрузку GPU на 50%, позволяя запускать игры AAA класса на мобильном SoC без перегрева
  • **PlayStation VR2:** Adaptive Foveated Rendering - Sony's реализация для PS5. Eye tracking встроен в гарнитуру, latency <4 мс
  • **Microsoft Flight Simulator VR:** без reprojection требует RTX 3090 для 90 FPS. С SteamVR Motion Smoothing - RTX 3060 достаточно

Исторический контекст

В 2016 году команда Oculus (впоследствии Meta) выпустила Asynchronous TimeWarp (ATW) - первую практическую реализацию reprojection для VR. ATW работает в отдельном высокоприоритетном потоке: даже если приложение не успело рендерить новый кадр, ATW репроецирует предыдущий с актуальной позой в течение 1-2 мс. Это устранило stutter-induced motion sickness. До ATW все VR-игры должны были гарантировать 90 FPS или пользователь чувствовал тошноту. После - допустим временный drop до 45 FPS. В 2021 Meta расширила идею до Application SpaceWarp (ASW 2.0) с нейросетевой генерацией intermediate frames.

Stereoscopic rendering: рендеринг для двух глаз

**Oculus Rift CV1, 2016. Первый mass-market VR с требованием 90 FPS для предотвращения motion sickness.** Проблема: обычная игра рендерит 1 кадр в 16 мс (60 FPS). VR должен рендерить 2 кадра (левый и правый глаз) в 11 мс (90 FPS). Это в 3x жёстче по вычислительному бюджету. Каждый глаз получает немного разную проекцию - межзрачковое расстояние (IPD) ~63 мм создаёт параллакс, мозг интерпретирует как глубину.

**Single Pass Stereo (SPS):** рендеринг обоих глаз за один draw call через geometry instancing. GPU дублирует геометрию с двумя разными матрицами проекции. Экономит 30-40% CPU time на draw call submission. Требует поддержки VK_KHR_multiview (Vulkan) или GL_OVR_multiview (OpenGL). Главный ограничитель - пропускная способность GPU fillrate, не CPU.

Почему VR требует именно 90+ FPS, а не стандартных 60 FPS для монитора?

Foveated rendering: экономим там, где глаз не замечает

**Meta Quest Pro, 2022. Первый потребительский VR с eye tracking для Dynamic Foveated Rendering.** Сетчатка человека имеет высокое разрешение только в центре (fovea, 2-5°) - там где смотрит взгляд. Периферийное зрение плохо воспринимает детали. Foveated rendering рендерит полное разрешение только в зоне взгляда, снижая разрешение к краям. Результат: 2-3x меньше пикселей при одинаковом воспринимаемом качестве.

МетодEye trackingGPU экономияРиски
Fixed FoveatedНе нужен30-40%Периферия всегда размыта, заметно при взгляде вбок
Dynamic FoveatedНужен (IR камера)50-70%Latency eye tracking >4 мс = saccade artifact
Perceptual QualityНе нужен20-30%Анализирует temporally stable зоны
Radial VRSНе нужен35-50%Артефакты на краях если не сглаживать

Eye tracking для Dynamic Foveated Rendering должен иметь latency <4 мс. Почему такой жёсткий требование?

Reprojection: рендерим реже, отображаем чаще

**Atemporal reprojection - один из главных инноваций VR.** Суть: рендерить на 45 FPS, но отображать на 90 FPS. Между двумя реально рендеренными кадрами VR runtime вставляет synthetic кадр, репроецируя предыдущий на основе актуальной позы головы. Стоимость репроекции ~0.5 мс против ~5-10 мс полного рендера.

**Disocclusion artifacts:** при движении головы объекты за краем кадра становятся видимы - reprojection не имеет данных для этих пикселей. Края кадра заполняются stretch artifacts или чёрным. Решение: рендерить с overscan (110% размера) и обрезать. Или полагаться на ASW для генерации нового контента.

Reprojection вставляет synthetic кадр между двумя реальными. При каком движении головы артефакты минимальны?

ASW и Motion Smoothing: AI генерирует промежуточные кадры

**Oculus ASW 2.0 (Application SpaceWarp, 2021) - нейросетевая генерация intermediate frames.** Классический reprojection работает только для статичных объектов - движущиеся персонажи, анимация создают артефакты. ASW 2.0 и SteamVR Motion Smoothing используют optical flow + CNN для генерации реалистичного промежуточного кадра включая динамику сцены.

ТехнологияFPS in / outGPU экономияАртефакты
Oculus ATW (2016)любой / 90Только для dropped framesStretch на краях при translation
SteamVR Reprojection45 / 90~45%Ghosts на движущихся объектах
Oculus ASW 2.0 (2021)36/45 / 72/90~50%Temporal artifacts при быстром движении
NVIDIA DLSS Frame Genлюбой / 2x~50% на renderНет (для обычных игр); VR-версия - 2023

Reprojection и ASW позволяют рендерить при любом FPS и всегда получать комфортные 90 FPS

Reprojection работает хорошо при 45 FPS (половина от 90). Ниже 36 FPS артефакты становятся заметны даже с ASW. При <30 FPS VR становится некомфортным независимо от reprojection.

Reprojection экстраполирует следующий кадр. При больших временных пропусках (>27 мс при 36 FPS) ошибка экстраполяции растёт. Быстрые движения головы или сцены с быстрой динамикой делают артефакты видимыми. ASW - не замена производительности, а страховочная сетка.

Почему ASW 2.0 требует от игры передавать motion vectors, а классический reprojection не требует?

VR Rendering: главное

  • Stereo rendering: два разных viewport для IPD~63 мм. Single Pass Stereo через gl_ViewID экономит 30-40% CPU
  • 90+ FPS обязательны для предотвращения motion sickness (motion-to-photon latency <20 мс)
  • Foveated rendering: высокое разрешение только в зоне fovea (2-5°). Eye tracking для Dynamic FR экономит 50-70% GPU
  • Reprojection: рендерить 45 FPS, отображать 90. Репроекция предыдущего кадра стоит <1 мс. Артефакты при translation
  • ASW 2.0: нейросетевая генерация intermediate frames включая motion. Требует motion vectors от приложения

Вопросы для размышления

  • Dynamic Foveated Rendering требует eye tracking с latency <4 мс. Современные eye trackers дают 8-12 мс. Какие алгоритмические подходы (prediction, extrapolation) можно использовать чтобы компенсировать эту задержку?

Связанные уроки

  • arvr-03
  • arvr-05
  • gd-04
  • rob-04
  • rts-04
  • la-06-transformations
VR Rendering

0

1

Войти