Проект xrdesktop для использования GNOME и KDE в шлемах виртуальной реальности

Разработчики из компании Collabora представили проект xrdesktop, в рамках которого при поддержке компании Valve развивается библиотека с элементами для взаимодействия с традиционными рабочими столами внутри трёхмерных окружений, формируемых при использовании 3D-очков и шлемов виртуальной реальности. Код библиотеки написан на языке Си и распространяется под лицензией MIT. Готовые сборки подготовлены для Arch Linux и Ubuntu 19.04/18.04.

В настоящее время для Linux уже имеются средства для прямого вывода на шлемы виртуальной реальности (Vulkan-расширения VK_EXT_acquire_xlib_display для X11 и VK_EXT_acquire_wl_display для Wayland), но отсутствуют поддержка на уровне корректной отрисовки окон в 3D-пространстве и синхронизации частоты обновления экрана. Целью проекта xrdesktop является разработка методов, которые позволят использовать в виртуальных окружениях классические интерфейсы, ориентированные на вывод на двухмерном экране и управление при помощи клавиатуры и мыши.

Компоненты xrdesktop расширяют имеющиеся оконные и композитные менеджеры возможностями для использования runtime систем виртуальной реальности для отрисовки окон и рабочего стола в трехмерных виртуальных окружениях. В xrdesktop продвигается идея интеграции в существующие десктоп-окружения без необходимости запуска отдельного специализированного композитного менеджера и позволяя использовать с 3D-шлемами уже имеющиеся пользовательские конфигурации, используемые с обычным монитором.

Архитектура проекта подразумевает возможность интеграции с любыми рабочими столами, но на текущем этапе разработки компоненты для поддержки шлемов виртуальной реальности реализованы для KDE и GNOME. Для KDE поддержка 3D-шлемов реализован через Compiz-подобный плагин, а для GNOME через набор пачтей к GNOME Shell. Указанные компоненты зеркалируют существующие окна в виртуальное окружение 3D-шлемов в форме отдельной сцены или в оверлейном режиме, при котором окна рабочего стола могут накладываться на другие запущенные приложения виртуальной реальности.

Кроме механизмов отрисовки в xrdesktop предоставляются компоненты для обеспечения навигации и ввода при помощи специализированных пространственных контроллеров, таких как Valve Index и VIVE Wand. Xrdesktop на основе информации от VR-контроллеров генерирует обычные события ввода, симулируя использование клавиатуры и мыши.

В состав xrdesktop входит несколько библиотек, формирующих текстуры окон для VR runtime при помощи OpenVR, а также основанная на API система рендеринга полноценного рабочего стола в 3D-окружении. Так как xrdesktop не предоставляет собственного оконного менеджера, требуется проведение работы по интеграции с существующими оконными менеджерами (xrdesktop может быть портирован для любого оконного менеджера X11 или Wayland). На стороне графических драйверов для работы требуется драйвер с поддержкой API Vulkan и расширения VK_KHR_external_memory extension.

Основные составные части xrdesktop:

  • gulkan — glib-обвязка для Vulkan, предоставляющая классы для обработки устройств, шейдеров и инициализации текстур из памяти или DMA-буферов;
  • gxr — API для абстрагирования программных интерфейсов для разработки приложений виртуальной реальности. В настоящее время поддерживается только OpenVR, но в ближайшее время будет добавлена и поддержка стандарта OpenXR;
  • libinputsynth — библиотека для синтеза событий ввода, таких как движение мыши, клики и нажатия клавиш, реализованная в форме бэкендов для xdo, xi2 и Clutter;
  • xrdesktop — библиотека для управления окнами в 3D-окружении, набор сопутствующих виджетов и бэкенды для отрисовки сцены;
  • kwin-effect-xrdesktop и kdeplasma-applets-xrdesktop — плагин к KWin для интеграции с KDE и Plasma-апплет для перевода KWin в режим вывода на 3D-шлем;
  • gnome-shell patchset и gnome-shell-extension-xrdesktop — набор патчей к GNOME Shell для интеграции поддержки xrdesktop и дополнение для переключения вывода на 3D-шлем в GNOME Shell.

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

Источник: http://www.opennet.ru/opennews/art.shtml?num=51199