Международная научно-техническая конференция «Информационные системы и технологии» ИСТ-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