В прошлой статье мы рассказывали о четырёх экранах Mac в Quest Pro и о том, как удалось убрать рябь на выбранной конфигурации. С тех пор VRDesktopUltra стал ближе не просто к демонстрации передачи изображения, а к рабочему пространству: с сохранённой расстановкой, своим местом в VR и обычным приложением на Mac.

Главный результат нового этапа — пять независимых экранов, одновременно видимых в гарнитуре. А за ним — изменения, которые делают повседневный запуск и возвращение в VR менее хлопотными.

Пятый экран — настоящий внешний монитор

Теперь на нашем стенде вместе работают:

  • три виртуальных ультрашироких монитора по 5760 × 1200;
  • встроенный Retina-дисплей Mac с изображением 4112 × 2658;
  • внешний монитор 1920 × 1080.

Внешний монитор подключили при работающем Mac-приложении. Сервер обнаружил его и начал передавать как отдельный источник — без перезапуска сервера и USB-сессии.

При этом первая проверка оказалась показательной: получить пятый поток ещё не значит показать пятый экран человеку. Данные доходили до Quest, но монитор появился далеко за пределами настроенного рабочего пространства. Исправили начальное размещение: новый экран располагается над последним доступным монитором, с учётом его положения, поворота и размера.

После исправления проверили не только журналы и контрольные суммы, но и реальную сцену в гарнитуре. Внешний экран виден и работает рядом с остальными четырьмя. Затем перезапустили установленное Mac-приложение и подтвердили восстановление всех пяти источников и сохранённой расстановки.

Это результат конкретной конфигурации с Quest Pro, а не обещание любого числа мониторов при любой нагрузке.

Рабочее пространство больше не нужно собирать заново

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

На Mac запоминаются основной дисплей и взаимное положение экранов. В VR — положение, поворот, размер и кривизна каждого монитора. Перезапуск сервера не должен превращать настроенное пространство обратно в исходный ряд прямоугольников.

Появилась и сохраняемая напольная метка места пользователя с направлением взгляда. Её можно перемещать контроллером, а телепорт рядом с меткой примагничивается к сохранённой позиции и ориентации. При новом запуске она служит точкой возвращения в рабочее пространство.

Отдельно разделили паузу и завершение работы. Снятие гарнитуры, переход в системное меню или обрыв USB сами по себе не закрывают рабочее место. Явный выход из Quest-приложения останавливает захват и освобождает созданные виртуальные дисплеи; Mac-сервер остаётся ждать следующего подключения.

На Mac — приложение вместо обязательного терминала

У VRDesktopUltra появилась нативная оболочка с иконкой в строке меню. Из неё можно запустить или остановить сервер, открыть журнал и изменить параметры экранов.

В настройках доступны количество виртуальных дисплеев, их разрешение, частота кадров и битрейт. Физические источники можно включать и отключать; их изображение передаётся в исходном пиксельном разрешении.

Оболочка использует AppKit и SwiftUI поверх существующего Rust-сервера — без Electron и встроенного браузера. Для обычного запуска установленного приложения терминал больше не нужен.

Пока это установленная разработческая сборка, а не готовый нотарифицированный дистрибутив для публичного скачивания.

Меньше лишней работы при передаче изображения

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

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

Quest также сообщает Mac о занятости декодера. Сервер учитывает эту рекомендацию до кодирования: сохраняет свежий захват вместо накопления очереди устаревающих кадров.

Есть и узкий, но хорошо измеримый результат: ускорили CPU-проверку структуры HEVC. В замере на M1 Max проверка ключевого кадра 5760 × 1200 сократилась примерно с 5,07 до 0,22 мс, а Retina-кадра — с 8,02 до 0,33 мс. Разрешение и качество изображения для этого не снижали.

Это ускорение конкретного участка обработки, не всего приложения. Оно не означает такого же прироста FPS или сокращения задержки до изображения в линзах.

Что пока остаётся открытым

Пять экранов и сохранённое рабочее место — уже подтверждённый шаг вперёд. Но проект пока нельзя назвать полностью готовым инструментом для ежедневной работы без оговорок.

Остаются рывки VR-сцены под нагрузкой. Сквозная оптическая задержка менее 20 мс не подтверждена. Предстоят длительные проверки памяти и нагрева, а также повторные циклы физического отключения и подключения внешнего монитора.

Сохраняется и ограничение точности: HEVC при движении использует сжатие с потерями. Последующее точное обновление полезно для текста и неподвижного рабочего стола, но не превращает весь видеопоток в pixel-perfect передачу во время рисования.

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