Высокореалистичная визуализация трехмерных виртуальных сцен необходима при решении широкого круга задач. К таковым относится, например, реализация систем виртуальной реальности. Высокая реалистичность в данном случае позволяет приблизить виртуальный мир к реальному, обеспечить их визуальную схожесть. Еще одной областью, в которой необходим такой тип визуализации, являются имитационно-тренажерные комплексы, с помощью которых осуществляется подготовка специалистов для работы с разного рода техническими средствами [1–3]. В процессе обучения на таких комплексах у человека вырабатываются навыки управления техникой (автомобилем, самолетом и т.п.), что позволяет минимизировать затраты на испорченное дорогостоящее оборудование.
В обеих упомянутых задачах реалистичность синтезируемых на компьютере изображений обеспечивается группой факторов. Среди них мож- но выделить, во-первых, максимальное сходство объектов виртуальной сцены с теми, которые встречаются в реальном мире и привычны для человеческого глаза. Во-вторых, для правильного моделирования светотеневой обстановки сцены необходим как можно более точный расчет освещенности ее объектов. И наконец, существенным фактором является поддержка визуализации в режиме реального времени, то есть с частотой смены кадров не менее 25 раз в секунду. Последнее обеспечивает плавную динамику виртуальных объектов, а также позволяет оператору взаимодействовать с ними без задержек.
Для реалистичной визуализации и моделирования в трехмерных виртуальных сценах ряда важных с точки зрения правильного восприятия окружающей среды, природных явлений и объектов, не имеющих четких геометрических границ (например, дыма, пламени, струй воды, дождя, снега и т.п.), обычно используются системы частиц [4–6]. Количество элементов в них порой может достигать значительных величин, порядка сотен тысяч и миллионов. Известные до сих пор методы и алгоритмы реализации систем частиц, как правило, рассчитаны на использование центрального процессора (ЦП) в качестве основного устройства для расчета параметров каждой частицы. При этом обработка частиц выполняется либо последовательно, либо с малой степенью распараллеливания, так как даже самые современные ЦП имеют всего 6–8 ядер. Поскольку для обеспечения плавной и реалистичной динамики нужно проводить расчет и отображение частиц в процессе синтеза каждого кадра, в случае большого количества частиц сохранить режим реального времени при визуализации трехмерной сцены практически невозможно.
Для решения этой проблемы в работе предлагается технология распределенного моделирования и визуализации систем частиц с применением современных графических процессоров (GPU). Данная технология поддерживает использование в виртуальных сценах систем частиц с количеством элементов порядка 106, сохраняя при этом возможность рендеринга в режиме реального времени, что особенно важно для таких областей, как имитационно-тренажерные комплексы и системы виртуальной реальности.
Технология реализации системы частиц
Для реализации в трехмерных виртуальных сценах систем частиц в масштабе реального времени используем возможности шейдерной об- работки на современных многоядерных GPU. Предлагаемая технология включает два этапа, выполняющихся при синтезе каждого кадра изображения виртуальной сцены.
На первом этапе с помощью вершинного шейдера производится обработка данных системы частиц с нахождением ее состояния для требуемого момента времени, а именно: генерация новых и уничтожение старых частиц, расчет их физических параметров (положения, скорости, времени жизни и т.д.). При этом каждая частица хранится в памяти и обрабатывается как точка сцены, являющаяся геометрическим центром частицы. Для удобства вычислений будем использовать координаты таких точек и соответствующих им векторов (скорости, ускорения и т.п.), представленные в мировой системе (WCS). Совокупность положения P(Px, Py, Pz) точки и параметров соответствующей ей частицы можно представить в виде некоторой структуры S. В данной работе мы рассматриваем следующий набор параметров: время жизни t; скорость v(vx, vy, vz) частицы; углы r0(r0,x, r0,y, r0,z) ее поворота (в момент генерации) относительно осей X, Y, Z системы координат WCS', полученной путем переноса WCS в точку P; изменения r углов поворота в текущий момент времени (относительно r0). Структура данных для хранения частицы следующая (цифрами показано количество байт каждой составляющей): время жизни (t) – 4, координаты (P) – 12, скорость (v) – 12, начальные углы поворота (r0) – 12, текущие изменения углов поворота (r) – 12.
Таким образом, перед выполнением первого этапа имеется система частиц в виде массива M из n элементов типа S, где n – максимально возможное количество частиц в системе, установленное при создании виртуальной сцены. Параметры элементов соответствуют времени T, в которое производились предыдущие вычисления. В результате данного этапа вычисляется массив M¢, отражающий состояние системы частиц на момент времени T' = T + ΔT, где ΔT – разница между текущим временем и временем T, когда происходило вычисление данных массива М.
Исходя из полученного массива M', на втором этапе осуществляются синтез необходимой геометрии частиц (с помощью геометрического шейдера), а также их визуализация в буфер кадра, которая включает расчет освещенности от источников света, применение материалов и наложение различных текстур (фрагментный шейдер).
После выполнения обоих этапов указатели на массивы меняются местами (то есть массив M' становится массивом M, а M – массивом M') и процедура повторяется уже для следующего кадра.
Рассмотрим подробнее каждый из этапов.
Обработка массива частиц
Чтобы решить задачу обработки большого массива частиц в режиме реального времени на GPU, будем использовать технологию transform feedback [7], поддержка которой в графической библиотеке OpenGL осуществляется начиная с версии 3.0 (до этого была доступна через расширения NV_transform_feedback и EXT_transform_ feedback). Суть подхода состоит в возможности сохранения результатов вычислений, полученных в вершинном (или геометрическом) шейдере, в одном или нескольких вершинных буферах VBO (vertex buffer object, [8]).
На рисунке 1 представлена предлагаемая схема этапа обработки массива частиц на графическом процессоре видеоадаптера. Для ее реализации разместим рассмотренный выше исходный массив М в видеопамяти в виде вершинного буфера (VBOIn). В той же памяти отведем область под вершинный буфер (VBOOut) для записи результирующего массива M'. Расчет нового состояния системы частиц производится в графическом конвейере GPU на стадии выполнения вершинного шейдера, где каждое ядро GPU отвечает за обработку одной частицы. Подадим буфер VBOIn на вход вершинного шейдера. Чтобы сохранить полученные результаты вычислений, перед запуском графического конвейера необходимо включить режим transform feedback и задать его параметры. Для этого, во-первых, создадим объект transform feedback (с помощью функции glGenTransformFeedbacks), сделаем его активным (glBindTransformFeedback) и привяжем к нему буфер VBOOut (glBindBufferBase). Во-вторых, вызовом функции glTransformFeedbackVaryings определим выходные переменные, в которые вершинный шейдер будет записывать сформированные данные. Поскольку все атрибуты частиц мы храним в одном массиве, в качестве параметра для этой функции нужно использовать GL_SEPARATE_ATTRIBS. И наконец, включение самого режима transform feedback выполняется функцией glBeginTransformFeedback с параметром GL_POINTS, в общем случае означающим, что каждое ядро GPU будет выдавать на запись в буфер VBOOut одну вершину. В нашей задаче это соответствует одной структуре типа S.
Так как для решения поставленной задачи обработки массива частиц используется только вершинный шейдер, все последующие стадии гра- фического конвейера, включая растеризацию и выполнение фрагментного шейдера, являются избыточными. Чтобы избежать временных затрат на их выполнение, отключим растеризацию функцией glEnable(GL_RASTERIZER_DISCARD), что приведет к остановке конвейера сразу после обработки вершин и передаче нужных нам результатов в буфер VBOOut.
Рассмотрим действия, выполняемые вершинным шейдером для расчета состояния некоторой частицы G из i-й ячейки (i Î [0, n]) массива М в момент времени T' = T + ΔT. Пусть заданы следующие параметры расчета: длина W и ширина H эмиттера E системы частиц (в нашей задаче мы будем рассматривать плоский эмиттер прямоугольной формы с локальной системой координат OCS, размещенной в центре прямоугольника так, что оси X и Y параллельны сторонам, а ось Z перпендикулярна плоскости эмиттера); заданная начальная скорость частицы v0(v0,x, v0,y, v0,z) в момент генерации; коэффициент kv ≥ 0 случайного изменения вектора и величины начальной скорости; действующее на систему ускорение a(ax, ay, az); krot Î [0, π] – угол максимального поворота частицы от ее начального положения r0; kvel ≥ 0 – значение скорости поворота; tmax – максимальное время жизни частицы. Заметим, что все векторы заданы в мировой СК WCS.
Вначале определим текущее время жизни t', сложив t и ΔT. Если t' ≥ tmax, то необходимо уничтожить рассматриваемую частицу и сгенерировать новую, данные которой будут сохранены в ячейку M'[i]. Присвоим t' (вычисляемые для массива M' параметры частиц здесь и далее будем отмечать штрихом) значение 0. Поскольку все новые частицы рождаются в пределах эмиттера, их начальные координаты удобно генерировать в локальной СК эмиттера, а потом преобразовывать в СК WCS: P' = Mmodel(W(frand – 0,5), H(frand – 0,5), 0, 1), где Mmodel – матрица модельного преобразования из СК OCS эмиттера в мировую СК WCS; frand – функция генерации псевдослучайного вещественного числа из отрезка [0, 1]. Поскольку в описываемом примере рассматривается прямоугольный эмиттер, ось Z которого перпендикулярна его плоскости, то z-координата в момент генерации частицы равна 0. Однородная координата w = 1 используется, поскольку матрица Mmodel может содержать перенос, влияющий на координаты точек. Вектор v' скорости генерируемой частицы определим с учетом коэффициента kv случайного изменения заданной начальной скорости v0: v' = = v0 + 2kvVrand, где Vrand = (frand – 0,5, frand – 0,5, frand – 0,5) – псевдослучайный вектор. Начальные углы поворота частицы относительно осей X, Y, Z системы WCS' зададим по формуле r0' = 2π(frand, frand, frand).
И наконец, вычислим отклонения r' углов поворота от исходного состояния r0'. Пока частица живет, ее поворот может происходить относительно осей СК WCS' как по часовой стрелке, так и против нее. Текущее направление поворота для каждой оси можно кодировать знаком соответствующей компоненты r', а значение этой компоненты задавать в отрезке [0, 2krot], где полуинтервал [0, krot) соответствует повороту против часовой стрелки, а отрезок [krot, 2krot] – повороту по часовой стрелке. Тогда r' = 4krotVrand.
Таким образом, определены параметры новой частицы. Если же при сложении t и ΔT получаем, что t' < tmax, то необходимо вычислить текущее состояние уже существующей частицы и записать его в ячейку M'[i]. Положение и скорость частицы определяются исходя из их прошлых значений, сохраненных в M[i], ускорения a, действующего на систему, и времени ΔT, прошедшего с предыдущего расчета массива M: P' = P + v ΔT + 0,5a(ΔT)2, v' = v + a ΔT.
Начальные углы r0 поворота частицы остаются неизменными, то есть r0¢ = r0. Расчет углов r' рассмотрим на примере компоненты r¢x. Для этого определим ее по формуле r¢x = | rx | + s(rx) kvel ΔT, где s(x) = 1 при x ≥ 0, s(x) = –1 при x < 0. Далее следует оценить, осталось ли полученное значение r'x в допустимом диапазоне [0, 2krot]. Если при этом r¢x ≤ 0, то достигнуто максимальное значение угла поворота против часовой стрелки и r¢x нужно приравнять к 0, а при r¢x ≥ 2krot – по часовой и r¢x = 2krot. В обоих случаях знак r¢x устанавливается противоположным знаку rx, то есть направление поворота изменяется. При r¢x (0, 2krot) знак r¢x совпадает со знаком rx. Значения остальных компонент r¢ определяются аналогичным образом.
Визуализация массива частиц
Для отображения частиц в буфере кадра необходимо выполнить синтез их геометрии и вычислить попиксельную освещенность с учетом используемых материалов и текстур. На рисунке 2 представлена схема выполнения данного этапа с использованием вершинного, геометрического и фрагментного шейдеров. Рассмотрим ее подробнее.
Подготовленный на предыдущем этапе массив частиц M' подается на вход вершинного шейдера. В предлагаемом подходе данный шейдер не несет никакой вычислительной нагрузки. Однако он является обязательной частью графического конвейера, поэтому его функция в данном случае заключается в передаче полученных входных данных на следующую ступень конвейера – геометрический шейдер.
Геометрический шейдер задействован для выполнения синтеза полигональной модели частиц. Он преобразует одну поступающую на вход точку P', которая в нашей технологии соответствует центру частицы, в вершины модели, а также вычисляет нормали, текстурные координаты и другие требуемые параметры для этих вершин. Форма модели, а значит, и количество добавляемых вершин, зависят от той задачи, для которой используется система частиц. Она может быть плоской или трехмерной. Так, например, падающие снежинки можно представлять двумерными вращающимися шестиугольниками, а капли дождя – тетраэдрами. Одной из простых, но часто используемых моделей частиц является квадрат, постоянно повернутый лицевой стороной к камере, так называемый спрайт. При реализации спрайта в случае виртуальной камеры с перспективным проецированием будем формировать квадрат так, чтобы нормаль N к его поверхности из точки P' всегда смотрела в начало O видовой системы координат VCS, то есть на наблюдателя (рис. 3). Тогда N = || OWCS – P' ||, где OWCS – точка O, координаты которой представлены в мировой СК.
Генерируемый спрайт включает два треугольных полигона с вершинами V0, V1, V2 и V1, V2, V3, которые для оптимизации работы графического конвейера целесообразно визуализировать как треугольный стрип V0V1V2V3. Чтобы найти координаты вершин, вычислим вначале пару перпендикулярных векторов A и B, таких, что A || V0V2, B || V0V1: A = [YWCS, N] / || [YWCS, N] ||, B = [N, A] / || [N, A] ||, где YWCS – вектор Y из базиса системы VCS с координатами в СК WCS, а квадратные скобки обозначают векторное произведение. Тогда, если k – размер стороны спрайта, то V0 = P' + + 0,5k(A–B), V1 = V0 + kB, V2 = V0 – kA, V3 = V1 – kA.
Для частиц, геометрия которых не привязана к положению наблюдателя и направлению его взгляда, необходимо вычислить также матрицу MR поворота вокруг осей X, Y, Z системы WCS' исходя из значений r0' и r' и умножить на нее все генерируемые вершины. Матрица MR определяется по формуле , где МT – матрица переноса начала координат системы WCS в точку P' (переход к системе WCS'); Mx, My, Mz – матрицы поворота вокруг осей X, Y, Z системы WCS' на углы α = r0'x + (|r'x| – krot), β = r0'y + (|r'y| – krot), γ = r0'z + (|r'z| – krot) соответственно.
Перед тем как передавать положения вершин на выход геометрического шейдера, необходимо также умножить их на матрицу, равную произведению Mproj∙MV, где Mproj – матрица заданного для камеры проекционного преобразования, MV – матрица перехода из мировой СК WCS в видовую СК VCS. Текстурные координаты для вершин задаются, исходя из решаемой системой частиц задачи.
Во фрагментном шейдере необходимо для каждого фрагмента (точки) F каждой частицы определить освещенность от источников света, размещенных в виртуальной сцене, с учетом применяемых к частицам материалов и различных текстур (рельефа, отражения, прозрачности и т.п.). Чтобы вычислить реалистичную попиксельную освещенность от каждого из источников, будем использовать расширенную модель расчета из [9], основанную на модели Фонга–Блинна, но учитывающую тени от объектов и направленные источники света: , sh = density ∙ shade, где kА, kD, kS – коэффициенты отражения материалом частицы соответственно рассеянной, диффузной и зеркальной компонент освещения; IA, ID, IS – интенсивности этих компонент, попадающие в точку F; N – нормаль к поверхности в F; L – единичный вектор из F на источник света; H = (L+V)/||L+V|| – нормализованный средний вектор между L и единичным направлением V из F на наблюдателя; степень s (действительное число от 0 до 128) характеризует резкость бликов (чем выше s, тем блик меньше и резче); sc – цвет тени; density – коэффициент плотности тени (действительное число от 0 до 1); shade – параметр, определяющий наличие или отсутствие тени в точке расчета. Коэффициент λ зависит от параметров источника света. Его вычисление подробно описано в [9].
Практическое использование описанных решений
На основе предложенных в работе технологии и алгоритмов были созданы программные модули для систем визуализации и виртуального окружения, осуществляющих рендеринг трехмерных виртуальных сцен в масштабе реального времени. Данные модули позволяют добавлять в визуализируемую сцену такие объекты, как, например, падающие листья, струи воды и т.п. Также доступно моделирование некоторых природных явлений (дождь, снег). Применение в предлагаемых подходах вычислений на современных многоядерных графических процессорах позволило достичь высокой производительности и обеспечить режим реального времени при визуализации даже большого количества частиц (порядка 106).
Созданные программные модули прошли апробацию в составе системы визуализации «GLView» [10], разработанной в Центре визуализации и спутниковых информационных технологий НИИСИ РАН. На рисунке 4 представлено изображение виртуальной сцены с моделированием дождя, сгенерированное данной системой.
Итак, в данной статье была предложена и подробно рассмотрена технология распределенного моделирования и визуализации систем частиц в трехмерных виртуальных сценах с применением шейдерной обработки на современных многоядерных графических процессорах.
Предложенные в работе решения были по- ложены в основу разработанных программных компонент, ориентированных на использование в системах визуализации реального времени для имитационно-тренажерных комплексов и систем виртуального окружения.
Литература
1. Михайлюк М.В. Видеотренажерный комплекс управления роботами и манипуляторами // Инновационные технологии в исследовании окружающей среды: тр. Междунар. симпоз. (13–17 мая 2013 г., Ларнака, Кипр). М.–Ларнака: Изд-во МФТИ, 2013. C. 84–85.
2. Михайлюк М.В., Торгашев М.А. Использование технологий виртуальной реальности для моделирования безопасного управления антропоморфными робототехническими средствами // Проблемы управления безопасностью сложных систем: тр. XXI Междунар. конф. М., 2013. С. 290–293.
3. Михайлюк М.В., Брагин В.И. Технологии виртуальной реальности в имитационно-тренажерных комплексах подготовки космонавтов // Пилотируемые полеты в космос. 2013. № 2. С. 82–93.
4. Reeves W.T. Particle systems – a technique for modeling a class of fuzzy objects. Proc. Intern. Conf. SIGGRAPH’83. Detroit, Michigan. ACM, 1983, vol. 2, pp. 91–108.
5. Торгашев М.А. Моделирование огня и средств пожаротушения для задач распределенной симуляции робототехнических средств в режиме реального времени // САИТ-2013: тр. V Междунар. конф. Красноярск, 2013. Т. 1. С. 293–298.
6. Fearing P. Computer modelling of fallen snow. Proc. 27th Annual Conf. on Computer Graphics and Interactive Techniques, NY, ACM, 2000, pp. 37–46.
7. Transform Feedback. URL: http://www.opengl.org/wiki/ Transform_Feedback (дата обращения: 29.05.2014).
8. Боресков А.В. Расширения OpenGL. СПб: БХВ-Петербург, 2005.
9. Мальцев А.В., Михайлюк М.В. Реализация теней для направленных источников света в 3D-сценах в реальном режиме времени // Интеллектуальные и адаптивные роботы. 2009. № 1–2. C. 103–108.
10. Михайлюк М.В., Торгашев М.А. Система «GLView» визуализации для моделирующих комплексов и систем виртуальной реальности // Вестн. РАЕН. 2011. Т. 11. № 2. С. 20–28.
References
1. Mikhaylyuk M.V. Video training control complex for robots and manipulator mechanisms. Trudy Mezhdunar.
simp. “Innovatsionnye tekhnologii v issledovanii okruzhaushchey sredy” [Proc. of Int. Symp. Innovation Technologies
in Environment Research]. Moscow, Larnaka Publ., 2013, pp. 84–85 (in Russ.).
2. Mikhaylyuk M.V., Torgashev M.A. Using virtual reality technologies to model safe control over
anthropomorphic robotic tools. Trudy XXI Mezhdunar. konf. “Problemy upravleniya bezopasnostyu slozhnykh sistem”
[Proc. 21st Int. Conf. Control Issues for Complex Systems Security]. Moscow, 2013, pp. 290–293 (in Russ.).
3. Mikhaylyuk M.V., Bragin V.I. Virtual reality technologies in simulation training complexes for astronauts.
Pilotiruemye polety v kosmos [Space Manned Missions]. 2013, no. 2, pp. 82–93 (in Russ.).
4. Reeves W.T. Particle systems – a technique for modeling a class of fuzzy objects. Proc. Intern. Conf.
SIGGRAPH ’83. Detroit, Michigan. ACM, 1983, vol. 2, pp. 91–108.
5. Torgashev M.A. Fire and fire-extinguishing equipment modeling for the tasks of distributed robotic tools real-time simulation. Trudy 5 Mezhdunar. konf. SAIT-2013 [Proc. 5th Int. Conf. SAIT-2013]. Krasnoyarsk, 2013, vol. 1,
pp. 293–298 (in Russ.).
6. Fearing P. Computer modeling of fallen snow. Proc. 27th Annual Conf. on Computer Graphics and Interactive
Techniques. NY, ACM Publ., 2000, pp. 37–46.
7. Transform Feedback. Available at: http://www.opengl.org/wiki/Transform_Feedback (accessed May 29,
2014).
8. Boreskov A.V. Rasshireniya OpenGL [Add-ins of OpenGL]. St. Petersburg, BHV-Peterburg Publ., 2005.
9. Maltsev A.V., Mikhaylyuk M.V. Real-time simulating of shadows for direct light in 3D scenes. Intellektualnye
i adaptivnye roboty [Intelligent and adaptive robots]. 2009, no. 1–2, pp. 103–108 (in Russ.).
10. Mihaylyuk M.V., Torgashev M.A. Sistema “GLView” vizualizatsii dlya modeliruyushchih kompleksov i
sistem virtualnoy realnosti. Vestnik RAEN [Bulletin of RANS]. 2011, vol. 11, no. 2, pp. 20–28 (in Russ.).