Введение

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

Распределение рабочей нагрузки

Есть две, часто конкурирующие, причины использования параллельной отрисовки. Масштабирование производительности позволяет отрисовывать кадры быстрее, а масштабирование данных – визуализировать большие объемы данных. Различные методы распределения нагрузки обычно отдают предпочтение одному типу масштабирования над другим. Также могут существовать другие преимущества и недостатки, такие как задержки и проблемы балансировки нагрузки. Основные три варианта распределения – это целые кадры, пиксели или объекты (например, треугольные сетки).

Распределение рамы

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

Распределение пикселей

Наборы пикселей в экранном пространстве могут быть распределены между вычислительными устройствами в процессе, часто называемом рендерингом с предварительной сортировкой. Распределение чередующихся строк пикселей обеспечивает хороший баланс нагрузки, но делает масштабирование данных невозможным. Распределение непрерывных 2D-областей пикселей позволяет масштабировать данные путем отсечения данных по усечённой пирамиде видимости. Однако это приводит к избыточности данных из-за дублирования объектов на границах усечённой пирамиды, и данные необходимо загружать динамически при изменении точки обзора. Также требуется динамическая балансировка нагрузки для поддержания масштабируемости производительности.

Распределение объектов

Распределение объектов между вычислительными узлами часто называют рендерингом с последней сортировкой. Он обеспечивает хорошее масштабирование данных и может обеспечивать хорошее масштабирование производительности, но требует альфа-композиции промежуточных изображений от узлов обработки для создания финального изображения. С ростом разрешения изображения растет и накладной расход на альфа-композицию. Для поддержания производительности независимо от условий просмотра также необходима схема балансировки нагрузки. Этого можно достичь путем избыточного разбиения пространства объектов и случайного назначения нескольких фрагментов каждому вычислительному узлу, однако это увеличивает количество этапов альфа-композиции, необходимых для создания финального изображения. Другой вариант – назначить каждому вычислительному узлу непрерывный блок и обновлять его динамически, но это требует динамической загрузки данных.

Гибридная дистрибуция

Различные типы распределений могут быть скомбинированы различными способами. Пару последовательных кадров можно рендерить параллельно, одновременно рендерируя каждый из этих отдельных кадров параллельно с использованием распределения по пикселям или объектам. Распределения объектов могут стремиться минимизировать их перекрытие в экранном пространстве, чтобы снизить затраты на альфа-композитинг, или даже использовать распределение по пикселям для рендеринга частей объектного пространства.

Приложения с открытым исходным кодом

Пакет программного обеспечения с открытым исходным кодом Chromium предоставляет механизм параллельной отрисовки для существующих приложений. Он перехватывает вызовы OpenGL и обрабатывает их, как правило, для отправки на несколько устройств отрисовки, управляющих дисплейной стеной. Equalizer – это фреймворк отрисовки и система управления ресурсами с открытым исходным кодом для многопоточных приложений. Equalizer предоставляет API для разработки параллельных, масштабируемых приложений визуализации, которые конфигурируются во время выполнения сервером ресурсов. OpenSG – это система сценграфов с открытым исходным кодом, обеспечивающая возможности параллельной отрисовки, особенно в кластерах. Она скрывает сложность параллельных многопоточных и кластерных приложений и поддерживает отрисовку с предварительной и последующей сортировкой. Golem – это децентрализованное приложение с открытым исходным кодом, используемое для параллельных вычислений, которое в настоящее время работает с отрисовкой в Blender и планирует расширить область применения.