Сетевое издание
Международный студенческий научный вестник
ISSN 2409-529X

RESEARCH THE DEFERRED SHADING BASED ON TECHNIQUE MULTIPLE RENDER TARGETS

Perevalov S.S. 1 Danilov E.A. 1
1 Penza state technological university
In this article, an analysis of such rasterization techniques as deferred shading was performed. There is a growing role of computer graphics in various spheres. Features that distinguish deferred shading from earlier techniques, as well as special cases of technology based on two and three passes, are considered. The main drawback of the traditional approach is noted – a significant decrease in performance with a large number of light sources. A test project has been developed that implements deferred shading in the C ++ programming language using the OpenGL API to write applications that use computer graphics. The description of the libraries used in the development of the test project is given. The potential improvement in performance for various 3D scenes is substantiated. The advantages and disadvantages of the deferred shading are described, the key one being the inability to process transparency.
deferred shading
forward rendering
G-buffer
Multiple Render Targets
Light Pre-Pass
OpenGL
GLEW
GLFW
GLM
GLSL
C++ language

Работа с компьютерной графикой – одно из самых популярных направлений использования электронно-вычислительных машин, причем занимаются этой работой не, только профессиональные художники и дизайнеры. Без компьютерной графики не обходится ни одна современная программа. Работа над графикой занимает до 90 % рабочего времени коллективов программистов, выпускающих программы массового применения.

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

Необходимость широкого использования графических программных средств стала особенно ощутимой в связи с развитием Интернета и, в первую очередь, благодаря службе World Wide Web, связавшей в единую «паутину» миллионы «домашних страниц». У страницы, оформленной без компьютерной графики мало шансов привлечь к себе массовое внимание.

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

Важную роль в достижении реалистичности отображаемой сцены играет освещение. Для корректного освещения трехмерной сцены, как правило, требуется значительное количество источников света. При традиционном подходе (forward rendering) расчет освещения производится следующим образом: для каждой вершины в трехмерной сцене и каждого пикселя конечного изображения, выводимого на экран, последовательно производится расчет влияния каждого источника света в сцене, то есть этапы расчета освещения и геометрической обработки выполняются для каждого пикселя. Кроме того, расчеты производятся даже для скрытых и перекрывающихся поверхностей, а также для тех пикселей, которые могут не попасть в итоговое изображение. Соответственно, при большом количестве источников света производительность подсистемы визуализации может быть существенно снижена.

Одним из решений данной проблемы является применение методов так называемой отложенной визуализации, например, техника отложенного освещения которая описана в статье [1] где предлагается теоретическая база для предложенной техники, сравнивая уже существующие техники с предложенной. Попытка применения техники в условиях реального проекта описана в статье [2]. Также статьи [3, 4, 5], посвященные тонкостям реализации техники отложенного освещения на практике.

Традиционный способ рендеринга сцены (упреждающий рендеринг или forward rendering), предполагает отрисовку отдельного объекта за один или несколько проходов, в зависимости от количества и природы обрабатываемых источников света (на каждом проходе объект получает освещение от одного или нескольких источников). Это означает, что количество ресурсов, затрачиваемое на один попиксельный источник света, имеет порядок роста O(L·N), где N количество освещаемых объектов, а L количество освещаемых пикселей.

Основная задача отложенного освещения – более эффективно обрабатывать большое количество источников света, средствами отделения просчета геометрии сцены от просчета освещения. Тем самым, сократив количество затрачиваемых ресурсов до O(L).

В общем случае, техника состоит из двух проходов:

1. Geometry pass – объекты отрисовываются для создания буферов экранного пространства (G-buffer) c глубиной, нормалями, позициями, альбедо и степенью зеркальности;

2. Lighting pass – буферы, созданные на предыдущем проходе, используются для расчёта освещения и получения финального изображения.

Для использования данной техники в полном объеме и построения буферов, необходима аппаратная поддержка Multiple Render Targets (MRT).

Техника MRT поддерживается только на графических процессорах совместимых с OpenGL 2.0. Для того, чтобы воспользоваться этой техникой, необходимо произвести дополнительные настройки проекта. Если возможности использовать MRT нет, необходимо использовать модифицированную технику отложенного освещения, известную как Light Pre-Pass. Исходя из того, что на первом проходе мы не сможем построить все необходимые для финального изображения буферы, строятся только те, которые необходимы для расчета освещения. Вторым проходом формируется только буфер освещенности. В отличии от общего случая (где геометрия отрисовывается только один раз), на третьем проходе снова отрисовываются все объекты, формируя финальное изображение. Объекты получают рассчитанное освещение из предыдущего прохода и объединяют его с цветовыми текстурами. Третий проход призван компенсировать то, что мы не смогли сделать на первом.

В случае Light Pre-Pass, техника состоит из трех проходов:

Geometry pass – объекты отрисовываются для создания буферов экранного пространства только с глубиной и нормалями.

Lighting pass – строится буфер освещенности. Для расчета освещенности, помимо данных с предыдущего прохода (буферы глубины и нормалей), нам также необходима трехмерная позиция пикселя. Техника предполагает восстановление позиции по буферу глубины.

Final pass – объекты отрисовываются для создания финального изображения, на основе буфера освещенности и цветовых текстур объектов.

Тестовый проект был написан на С++ с использованием IDE Visual Studio 2017. Выбор языка обоснован тем, что С++ является широко распространённым высокопроизводительным языком с широким кругом пользователей. Это обеспечивает большое количество различных библиотек для работы с графикой и математикой. В проекте использовались такие фреймворки и библиотеки, как:

OpenGL – спецификация, определяющая платформонезависимый (независимый от языка программирования) программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику;

GLEW – кроссплатформенная библиотека на C/C++, которая упрощает запрос и загрузку расширений OpenGL. GLEW обеспечивает эффективные run-time механизмы для определения того, какие OpenGL расширения поддерживаются на целевой платформе;

GLFW – бесплатная кроссплатформенная библиотека с открытым кодом для создания и открытия окон, создания OpenGL контекста и управления вводом. Она легко интегрируется в существующие приложения, так как не претендует на главный цикл приложения;

GLM – библиотека для OpenGL, предоставляющая программисту на C++ структуры и функции, позволяющие использовать данные для OpenGL. Одна из особенностей GLM состоит в том, что его реализация основана на спецификации GLSL (OpenGL Shading Language).

Результат работы программного обеспечения представлен на рисунке.

perev1.tif

Результат отложенного рендеринга на основе техники Multiple Render Targets

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

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

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

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

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