Введение

VirtualGL - это программный пакет с открытым исходным кодом, который перенаправляет команды 3D-рендеринга из приложений Unix и Linux OpenGL на аппаратное обеспечение 3D-ускорителя на выделенном сервере и отправляет отображенный выход (тонкий) клиенту, расположенному в другом месте в сети. На серверной стороне VirtualGL состоит из библиотеки, которая обрабатывает перенаправление, и оберточной программы, которая инструктирует приложения использовать эту библиотеку. Клиенты могут подключаться к серверу либо с помощью удаленного соединения X11, либо с помощью прокси-сервера X11, такого как сервер VNC. В случае соединения X11 также требуется некоторое клиентское программное обеспечение VirtualGL для получения отображаемого графического вывода отдельно от потока X11. В случае подключения к VNC не требуется никакого специального клиентского программного обеспечения, кроме самого клиента VNC.

Проблема

Производительность приложений OpenGL может быть значительно улучшена путем рендеринга графики на специальных аппаратных ускорителях, которые обычно присутствуют в графическом процессоре. ГРУ стали настолько обычным явлением, что приложения стали полагаться на них для приемлемой производительности. Но VNC и другие тонкие клиентские среды для Unix и Linux не имеют доступа к такому оборудованию на стороне сервера. Поэтому они либо вообще не поддерживают приложения OpenGL, либо прибегают к более медленным методам, таким как рендеринг на клиенте или в программном обеспечении на сервере. Удаленное отображение 3D-приложений с аппаратным ускорением традиционно требовало использования "посредственного рендеринга". Косвенное рендеринг использует расширение GLX для X Window System ("X11" или "X") для инкапсулирования команд OpenGL внутри потока протокола X11 и отправки их из приложения на дисплей X. Традиционно приложение работает на удаленном сервере приложений, а дисплей X работает на рабочем столе пользователя. В этом сценарии все команды OpenGL выполняются на рабочем столе пользователя, поэтому эта машина должна иметь быстрый ускоритель 3D-графики. Это ограничивает тип машины, которая может удаленно отображать 3D-приложение с использованием этого метода. Косвенное отображение может хорошо работать, если сеть достаточно быстрая (например, Gigabit Ethernet), если приложение не изменяет динамически геометрию отображаемого объекта, если приложение использует списки отображения и если приложение не использует большое количество текстуры. Однако многие приложения OpenGL не соответствуют этим критериям. Чтобы еще больше усложнить ситуацию, некоторые расширения OpenGL не работают в среде косвенного рендеринга. Некоторые из этих расширений требуют прямого доступа к 3D-аппаратуре и, следовательно, никогда не могут работать косвенно. В других случаях, пользовательский дисплей X может не предоставлять явную поддержку для необходимого расширения OpenGL, или расширение может полагаться на конкретную конфигурацию оборудования, которая отсутствует на рабочем столе пользователя. Выполнение рендеринга OpenGL на сервере приложений позволяет обойти проблемы, вызванные косвенным рендерингом, поскольку приложение теперь имеет быстрый и прямой путь к аппаратному обеспечению 3D-рендеринга. Если 3D-рендеринг происходит на сервере приложения, то только полученные 2D-изображения должны быть отправлены клиенту. Изображения могут быть доставлены с одинаковой частотой кадров независимо от того, насколько большими были 3D-данные, которые использовались для их генерации, поэтому выполнение 3D-рендеринга на сервере приложений эффективно преобразует проблему 3D-производительности в проблему 2D-производительности. Затем проблема становится как передать 12 мегапикселей данных изображения по сети с интерактивными частотами кадров, но товарно-материальные технологии (HDTV, например) уже решают эту проблему.

TurboVNC и TigerVNC

TurboVNC и TigerVNC являются ответвлениями TightVNC, которые ускоряют кодирование Tight и JPEG, частично с помощью libjpeg turbo, ускоренной версии libjpeg SIMD. Оба проекта предоставляют серверы VNC, а также клиентские приложения. TurboVNC был разработан той же командой, что и VirtualGL. В сетях 100 мегабитного Ethernet он может отображать более 50 мегапикселей в секунду с качеством изображения без потерь. TurboVNC включает в себя дальнейшие оптимизации, которые позволяют отображать 1012 мегапикселей/секунду по 5 мегабитной широкополосной связи, с заметно меньшим, но полезным качеством изображения. TurboVNC также расширяет TightVNC, включая двойную буферизацию на стороне клиента и другие функции, ориентированные на 3D-приложения, такие как возможность отправки копии изображения экрана без потерь во время периодов бездействия. TurboVNC и VirtualGL используются Texas Advanced Computing Center в Университете Техаса в Остине, чтобы позволить пользователям TeraGrid удаленно получать доступ к возможностям 3D-рендеринга кластера визуализации Stampede. TigerVNC - более поздний форк TightVNC, который обеспечивает аналогичную производительность TurboVNC в большинстве случаев, но имеет разные цели и функции проекта.

VGL Transport (транспортный транспорт)

При использовании VGL Transport, VirtualGL сжимает рендеринговые 3D изображения в процессе с использованием того же оптимизированного кодека JPEG, который использует TurboVNC. VirtualGL затем отправляет сжатые изображения через выделенный TCP-сокет в клиентское приложение VirtualGL, работающее на клиентской машине. Клиент VirtualGL отвечает за декомпрессию изображений и загрузку пикселей в соответствующее окно X. Между тем, не OpenGL элементы дисплея приложения отправляются по сети с использованием стандартного удаленного протокола X11 и отображаются на клиентской машине. Этот подход требует наличия на клиентской машине дисплея X, а зависимость от удаленного протокола X11 для выполнения 2D-рендеринга означает, что многие приложения будут работать плохо при использовании VGL Transport в сетях с высокой задержкой. Кроме того, VGL Transport не поддерживает совместную работу (несколько клиентов за сессию), поскольку изображения перенаправляются на компьютеры пользователей, а не вытаскиваются. Но использование VGL Transport обеспечивает совершенно бесшовный опыт работы с приложениями, при этом каждое окно приложения соответствует одному окну рабочего стола. VGL Transport также уменьшает нагрузку на сервер, поскольку 2D-рендеринг происходит на клиенте, а VGL Transport позволяет использовать расширенные функции OpenGL, такие как четырехмерная стереобуфера. Разработчики VirtualGL предполагают, что основными пользователями VGL Transport будут пользователи ноутбуков с беспроводным 802.11g или быстрым Ethernet-соединением с сервером приложений.

Коммерческие продукты с использованием VirtualGL

VirtualGL и TurboVNC были основными компонентами продукта Sun Visualization System от Sun Microsystems, который был прекращен в апреле 2009 года. Два пакета с открытым исходным кодом были объединены с плагином с закрытым исходным кодом, который позволял VirtualGL отправлять сжатые изображения тонким клиентам Sun Ray, и еще одним пакетом с закрытым исходным кодом, который интегрировал VirtualGL с Sun Grid Engine, обеспечивая управление ресурсами и планирование удаленных 3D-работ. Комбинация этих пакетов, получившая название "Sun Shared Visualization", была доступна для бесплатного скачивания. Сунь взимает за поддержку. В4. x. x NoMachine поддерживает VirtualGL, позволяя пользователям запускать 3D-приложения в настольных сеансах NoMachine. v2.1 программного обеспечения Scalable Visualization Array от HP включает в себя компоненты, которые интегрируются с VirtualGL и TurboVNC, позволяя планировать и удаленно отображать 3D-задачи из кластера визуализации. Версия v3.0.0 ThinLinc разработана для работы в сочетании с VirtualGL. Версия 2010 EnginFrame Views поддерживает VirtualGL как одну из опций удаленного протокола. Продукты Exceed onDemand и Exceed Freedom от OpenText используют код от VirtualGL для реализации рендеринга на стороне сервера.