368_ðÒÂÃ_âÒÓÔÎ×Á - Томский политехнический университет

advertisement
Международная научно-техническая конференция «Информационные системы и технологии»
ИСТ-2014
СЕКЦИЯ 5.3 ТЕХНИЧЕСКАЯ КИБЕРНЕТИКА
(ИНФОРМАЦИОННОЕ МОДЕЛИРОВАНИЕ КОГНИТИВНЫХ ПРОЦЕССОВ)
В.В. ПАРУБЕЦ (аспирант), О.Г. БЕРЕСТНЕВА (д.т.н., профессор)
(Национальный исследовательский Томский политехнический университет)
ВИЗУАЛИЗАЦИЯ СЦЕН С НЕСКОЛЬКИИ ИСТОЧНИКАМИ СВЕТА
Современные средства разработки приложений в области трёхмерной графики
предоставляют широкий спектр возможностей для создания фотореалистичных изображений,
применяя различные алгоритмы, как построения самого изображения, так и эффектов постобработки.
При визуализации сложных геометрических сцен с различным набором материалов объектов и
необходимости в короткий срок обрабатывать действия пользователя графической программы
большую роль играют методы, отвечающие за визуализацию и наложение эффектов. Таким
образом, задача разработки программных и алгоритмических средств расчёта освещения для
интерактивных приложений требует нахождения наиболее оптимальных методов расчёта
освещения, применяя как программные, так и аппаратные решения.
Традиционный подход к визуализации сцены со многими источниками света обычно
заключается в рендеринге всей сцены много раз, при этом за один проход обрабатывается один
или несколько источников света. Если число источников света не велико, то их обработку можно
реализовать в виде одного большого шейдера и всего за один проход вывести освещенную сцену.
Однако при большом числе источников света такой подход уже не оправдывает себя и требуется
несколько проходов, каждый проход накладывает освещение от одного или нескольких
источников света.
Цена визуализации всей сцены оказывается пропорциональной N*L, где N это число
объектов в самой сцене, а L - число источников света. Поскольку и геометрическая сложность
сцены все время растет, то и число источников света также растет (хотя многие из этих
источников освещают только очень небольшую часть сцены), то подобный подход становится все
менее и менее приемлемым.
Кроме того, для сложных сцен подобный многопроходный способ создает большую
нагрузку на вершинную часть конвейера, что очень неблагоприятно сказывается на скорость
визуализации при применении анимации.
С подобными проблемами столкнулись разработчики игры S.T.A.L.K.E.R.: с самого начала
уровни игры были очень сильно детализированы, и требовалось поддерживать много источников
света.
Так называемый deferred shading (отложенное освещение) предлагает совершенно другой
подход к организации рендеринга, позволяющий полностью отделить геометрическую сложность
сцены от количества источников света.
Основная идея этого подхода заключается в том, что сначала по всей сцене строится так
называемый G-буфер (geometry buffer) для каждого пикселя сцены, содержащий всю информацию,
необходимую для определения его освещенности и итогового цвета. После этого делается второй
проход, который осуществляет расчет освещенности на основе построенного G-буфера и свойств
источников света.
Таким образом, мы полностью отделяем геометрическую сложность сцены от количества
источников света. Сложность сцены играет роль только на этапе построения G-буфера.
Хранимая в G-буфере информация обычно состоит из трёхмерных координат точки сцены,
соответствующей данному пикселю (в какой-либо системе координат, обычно используется
система координат связанная с камерой), вектора нормали (также в некоторой системе координат)
и цветов (диффузного, бликового и т.п.). Также может включаться и дополнительная информация
(светимость, свойства материала и т.п.).
368
Международная научно-техническая конференция «Информационные системы и технологии»
ИСТ-2014
СЕКЦИЯ 5.3 ТЕХНИЧЕСКАЯ КИБЕРНЕТИКА
(ИНФОРМАЦИОННОЕ МОДЕЛИРОВАНИЕ КОГНИТИВНЫХ ПРОЦЕССОВ)
В большинстве случаев достаточно сохранить для каждого пикселя следующую
информацию: координаты исходной точки, единичный вектор нормали в точке, диффузный цвет.
Для хранения всей этой информации очень удобно использовать возможность рендеринга
сразу в несколько текстур. GPU серии GeForce 6xxx и выше позволяют одновременно
осуществлять рендеринг в четыре текстуры, но при этом существует ограничение - каждая из этих
текстур должна содержать одинаковое число бит на пиксель (как например форматы GL_RGBA8 и
GL_ALPHA_32F_ARB, которые содержат по 32 бита на пиксель).
Благодаря поддержке форматов текстур с значениями в виде чисел с плавающей запятой
возможно сохранять все данные с необходимой точностью (для хранения координат обычно
требуется 32 бита, т.е. полноценный тип float).
В самом простом случае можно осуществлять рендеринг всего в две текстуры формата
GL_RGBA_32F_ARB.
После того, как вся сцена будет выведена, и будет получен полный G-буфер, то
освещение сцены фактически будет просто специальным типом обработки изображения: по
набору входных текстур осуществляется вычисление освещенности для каждого пикселя
выходного изображения.
Располагая готовым G-буфером для вычисления освещения всех видимых фрагментов
сцены нам достаточно просто вывести большой прямоугольник. Вершинный шейдер при этом
оказывается минимальным - передать для интерполяции координаты. Основная работа
осуществляется фрагментным шейдером, который по координатам источника света, положению
освещаемой точки, соответствующей обрабатываемому фрагменту и нормали в этой точке,
вычисляет освещенность с использованием заданной модели освещения.
Данный метод позволяет добиться значительного прироста производительности в случае
применения сложного алгоритма освещения и нескольких источников света. Также стоит
отметить, что одним из немаловажных преимуществ метода является возможность одновременно
с расчётом освещения производить наложение теней на объекты сцены.
Работа выполнена при поддержке Минобрнауки России, Госзадание НАУКА, тема 1957
«Математическое и программное обеспечение системы поддержки научных исследований в
социальной сфере, образовании и медицине»
369
Download