научная статья по теме СМЕЩЕННОЕ РЕШЕНИЕ ИНТЕГРАЛЬНОГО УРАВНЕНИЯ СВЕТОПЕРЕНОСА НА ГРАФИЧЕСКИХ ПРОЦЕССОРАХ ПРИ ПОМОЩИ ТРАССИРОВКИ ПУТЕЙ И КЭША ОСВЕЩЕННОСТИ Математика

Текст научной статьи на тему «СМЕЩЕННОЕ РЕШЕНИЕ ИНТЕГРАЛЬНОГО УРАВНЕНИЯ СВЕТОПЕРЕНОСА НА ГРАФИЧЕСКИХ ПРОЦЕССОРАХ ПРИ ПОМОЩИ ТРАССИРОВКИ ПУТЕЙ И КЭША ОСВЕЩЕННОСТИ»

КОМПЬЮТЕРНАЯ ГРАФИКА

удк 681.3.06

СМЕЩЕННОЕ РЕШЕНИЕ ИНТЕГРАЛЬНОГО УРАВНЕНИЯ СВЕТОПЕРЕНОСА НА ГРАФИЧЕСКИХ ПРОЦЕССОРАХ ПРИ ПОМОЩИ ТРАССИРОВКИ ПУТЕЙ И КЭША ОСВЕЩЕННОСТИ

© 2011 г. В.А. Фролов1'2, А.А. Харламов1'2, А.В. Игнатенко1 (1) Факультет Вычислительной Математики и Кибернетики, Московский государственный университет имени М.В. Ломоносова 119991 Москва, Ленинские горы, МГУ имени М.В.Ломоносова, 2-й учебный корпус

(2) NVIDIA 119019 Москва, ул. Арбат, 10 E-mail: {vfrolov, ignatenko}@graphics.cs.msu.ru, akharlamov@nvidia.com Поступила в редакцию 01.03.2011 г.

В данной работе представлен подход к синтезу фотореалистичных изображений на графических процессорах (GPU). В его основе лежит сочетание алгоритмов кэширования освещённости с когерентной адаптивной трассировкой путей.

1. ВВЕДЕНИЕ

В течение последних десяти лет архитектура графических процессоров сильно изменилась. В начале фиксированный конвейер заменили программируемым, затем исчезло разделение на вершинные и фрагментные процессоры, появились программные модели и средства разработки для вычислительных приложений, никак не связанных с тем, что GPU были призваны ускорять изначально - растеризацией. С появлением новых программных моделей возрос интерес к использованию GPU для трассировки лучей. В нашей работе мы используем технологию CUDA. Однако в виду того, что программная модель CUDA аналогична таким моделям API как OpenCL и DirectX, мы можем обобщить наши результаты и сделать выводы, независящие от аппаратного обеспечения.

В настоящее время доступен ряд программных пакетов для фотореалистичного синтеза изображений на GPU (IRay, Octane, Arion), использующих методы, дающие так называемое несмещенное решение. Однако у таких подходов есть два существенных ограничения. Во-первых, улучшение качества результата достигается

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

Рис. 1. Представленный гибридный подход использует кэш освещенности для аппроксимации гладкого вторичного освещения и трассировку путей для расчета мягких теней, размытых отражений и других эффектов. Все изображения были синтезированы в разрешении 1920 х 1200 на графическом процессоре GTX 260 менее чем за 3 минуты.

для расчета вторичного освещения и алгоритма родительский узел. Эта ссылка использу-

трассировки путей для быстрого расчета мягких ется каждый раз, когда лучу необходимо

теней, размытых отражений и некоторых других вернуться на верхний уровень иерархии и

эффектов. продолжить обход другого поддерева.

2. ПРЕДЫДУЩИЕ МЕТОДЫ 2.1. Трассировка лучей на GPU

В работе [1] предложено использовать традиционный графический конвейер. Авторы [1] реализовали алгоритм трассировки лучей в виде набора фрагментных программ. В качестве ускоряющей структуры данных использовалась регулярная сетка. Конвейер данных был организован следующим образом: луч генерировался в первом ядре. Второе ядро выполняло поиск в ускоряющей структуре данных (регулярной сетке). Когда луч попадал в воксель, содержащий треугольники, он передавался следующему ядру, которое тестировало луч на пересечение с треугольниками. Процесс продолжался до тех пор, пока луч не находил пересечение или не покидал трассируемый объем. Управление состоянием (обход сетки, пересечение с примитивами, вычисление цвета) луча осуществлялось с помощью буфера трафарета. При таком конвейере проще осуществлять отладку и можно более сфокусировано анализировать производительность и узкие места приложения.

В работе [2] предложили 2 альтернативных подхода для трассировки лучей с использованием Kd-дерева. GPU не поддерживают стек, поэтому предложено было реализовать один из двух возможных вариантов:

• Изменить структуру узла Kd-дерева так, чтобы она поддерживала ссылку на

• Проводить обход дерева, пока не будет найден непустой лист. Если, однако, в этом непустом листе пересечения луча с примитивом не произошло, то начало луча сдвигается таким образом, чтобы данный лист, при повторном обходе дерева измененным лучом был пропущен. Процесс обхода дерева начинается заново с корня для измененного луча и продолжается, пока не найдено пересечение или пока луч не покинет рассматриваемый объем. В работе [3] предложено видоизменить второй алгоритм из [2] так, чтобы хранить в регистрах короткий стек. Это позволяет избежать слишком частого обхода дерева. Для BVH (Иерархии ограничивающих объемов) в [4] был представлен бесстековый алгоритм и эффективная реализация трассировки на GPU. Каждый лист в таком дереве хранит дополнительную ссылку, как показано на рисунке 2. Эта ссылка указывает на то поддерево, которое необходимо обойти в случае, если тест на пересечение луча с примитивами в узле провалится.

2.2. Глобальное освещение на GPU

В работе [5] представлен эффективный подход к расчету глобального освещения на GPU, основанный на использовании фотонных карт. Основной идеей этой работы стало использование кэша освещённости и процедуры

Рис. 2. BVH structure for stackless traversal.

финального сбора для быстрого расчета вторичного освещения. Для расчёта первичного освещения были использованы теневые карты и обратная трассировка лучей.

В работе [5] положение точек для кэша освещённости определялось исходя из геометрических разрывов. Для адаптивного разбиения при поиске положений было использовано квадро-дерево. Для оценки геометрических разрывов (разрывы поля нормалей и позиций в пространстве экрана) была введена следующая метрика: если расстояние между угловыми точками в узле квадро-дерева превышает некоторую наперед заданную ошибку, то разбиение данного узла продолжается, в противном случае, дополнительного разбиения не требуется. Похожий подход был описан в [6], но без использования процедуры финального сбора. Прямое освещение было рассчитано используя трассировку лучей, вторичное освещение - с помощью фотонных карт. Такой алгоритм хорошо работает с каустиками, но для вторичного освещения результат получается шумным.

В [7] фотонные карты использовались для расчета интеграла освещенности напрямую (и первичное и вторичное освещение вычислялось с помощью этого метода). Недостатком такого решения служит сильный низкочастотный шум и темные границы. Низкочастотный шум - проблема метода фотонных карт, которую обычно решают с помощью процедуры финального сбора или фильтрации в пространстве объекта. Темные края на границах геометрии возникают от того, что освещение складывается только с половины диска, а результирующее значение получается делением на всю площадь диска.

Фильтрация и финальный сбор вносят

дополнительное смещение в решение интегрального уравнения. К тому же у финального сбора возникают проблемы, когда две поверхности расположены близко и на них не попадают фотоны. Чтобы избавиться от этих артефактов, можно использовать более медленный вторичный проход финального сбора (как описано в [8]).

В работе [9] была использована растеризация для первичного освещения в сочетании с трассировкой фотонов на CPU и последующей растеризацией фотонов на GPU для аппроксимации вторичного освещения.

Таким образом, методы описанные в [5], [6] и [9] могут быть использованы в интерактивных приложениях, но они не дают фотореалистичного изображения.

3. АНАЛИЗ ПРОИЗВОДИТЕЛЬНОСТИ ТРАССИРОВКИ ЛУЧЕЙ НА GPU

Тривиальная реализация трассировки лучей на GPU в виде одного монолитного ядра, как правило, показывает низкую производительность. Такая реализация может быть выполнена в виде простой процедуры, где одно ядро производит обход пространственной структуры данных, выполняет пересечение луча с примитивом, производит расчет цвета и генерацию новых лучей. В работе [10] проводится анализ эффективности различных реализаций трассировки лучей на GPU. Тривиальная реализация создаёт следующие трудности:

• Большой объем использованной регистровой памяти;

• Визуальный профилировщик указывает на узкое место в „инструкциях";

• Обращения в локальную память;

• Профилировщик указывает на расходящиеся ветвления.

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

Разделяемая память и регистры - это ограниченные по объему ресурсы. Аппаратный планировщик потоков может запустить лишь ограниченное число потоков одновременно. Предположим, что на потоковом мультипроцессоре всего Х регистров, и компилятор выделил на каждый поток У регистров. Тогда максимальное количество потоков, которое может быть запущено, определяется как X/Y. В частности, на архитектуре NVIDIA Tesla 10 потоковый мультипроцессор располагает 16 * 1024 32-ух битными регистрами. Таким образом, если количество регистров на поток равно 32, то запустится не более 512 потоков.

Когда количество регистров превышает определенную планку, ожидаемым результатом становится низкая загрузка GPU. Дополнительно стоит помнить, что на GPU от количества потоков зависит и то, насколько хорошо будет покрываться латентность. Низка

Для дальнейшего прочтения статьи необходимо приобрести полный текст. Статьи высылаются в формате PDF на указанную при оплате почту. Время доставки составляет менее 10 минут. Стоимость одной статьи — 150 рублей.

Показать целиком