Научная статья на тему 'ИСПОЛЬЗОВАНИЕ ПРОСТРАНСТВЕННОГО РАЗБИЕНИЯ ПРИ РЕАЛИЗАЦИИ ВЗАИМОДЕЙСТВИЯ СИСТЕМ ЧАСТИЦ С ВИРТУАЛЬНОЙ СРЕДОЙ НА GPU'

ИСПОЛЬЗОВАНИЕ ПРОСТРАНСТВЕННОГО РАЗБИЕНИЯ ПРИ РЕАЛИЗАЦИИ ВЗАИМОДЕЙСТВИЯ СИСТЕМ ЧАСТИЦ С ВИРТУАЛЬНОЙ СРЕДОЙ НА GPU Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
22
8
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ВИЗУАЛИЗАЦИЯ / СИСТЕМА ЧАСТИЦ / РЕГУЛЯРНАЯ СЕТКА / КОЛЛИЗИИ / CUDA / VISUALIZATION / PARTICLE SYSTEM / REGULAR GRID / COLLISIONS

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Мальцев А.В., Омельченко Д.В.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

USING SPATIAL SUBDIVISION IN IMPLEMENTING THE INTERACTION OF PARTICLE SYSTEMS WITH VIRTUAL ENVIRONMENT ON GPU

Collisions are one of the most common types of object interaction with each other. This paper proposes distributed methods and algorithms for collision point calculation under simulation of particle system interaction with objects of virtual environment. Considered solutions are based on spatial subdivision of three-dimensional scene by means of regular grid, which is built in real time on a modern multicore graphics processor supporting the parallel computing architecture CUDA. Collision point search for each particle is performed on GPU as well. In this regard, possible intersections of particle's movement trajectory with polygons in grid cells are analyzed. Moreover this particle passed the grid at the time interval between rendering of the last and current frames of a virtual scene image. Based on proposed methods and algorithms, software modules for visualization systems of three-dimensional virtual scenes are created. They provide distributed simulation and visualization of particle system collisions with virtual environment objects on the CUDA-supported graphics processor in real time. The modules have been successfully tested and demonstrated their applicability in simulation-training complexes and virtual environment systems.

Текст научной работы на тему «ИСПОЛЬЗОВАНИЕ ПРОСТРАНСТВЕННОГО РАЗБИЕНИЯ ПРИ РЕАЛИЗАЦИИ ВЗАИМОДЕЙСТВИЯ СИСТЕМ ЧАСТИЦ С ВИРТУАЛЬНОЙ СРЕДОЙ НА GPU»

УДК 004.946

ИСПОЛЬЗОВАНИЕ ПРОСТРАНСТВЕННОГО РАЗБИЕНИЯ ПРИ РЕАЛИЗАЦИИ ВЗАИМОДЕЙСТВИЯ СИСТЕМ ЧАСТИЦ С ВИРТУАЛЬНОЙ СРЕДОЙ НА GPU

А. В. Мальцев, Д. В. Омельченко

Федеральный научный центр Научно-исследовательский институт системных исследований Российской академии наук, avmaltcev@mail.ru

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

Ключевые слова: визуализация, система частиц, регулярная сетка, коллизии, CUDA.

USING SPATIAL SUBDIVISION IN IMPLEMENTING THE INTERACTION OF PARTICLE SYSTEMS WITH VIRTUAL ENVIRONMENT ON GPU

A. V. Maltsev, D. V. Omelchenko

System Research Institute, Russian Academy of Sciences, avmaltcev@mail.ru

Collisions are one of the most common types of object interaction with each other. This paper proposes distributed methods and algorithms for collision point calculation under simulation of particle system interaction with objects of virtual environment. Considered solutions are based on spatial subdivision of three-dimensional scene by means of regular grid, which is built in real time on a modern multicore graphics processor supporting the parallel computing architecture CUDA. Collision point search for each particle is performed on GPU as well. In this regard, possible intersections of particle's movement trajectory with polygons in grid cells are analyzed. Moreover this particle passed the grid at the time interval between rendering of the last and current frames of a virtual scene image. Based on proposed methods and algorithms, software modules for visualization systems of three-dimensional virtual scenes are created. They provide distributed simulation and visualization of particle system collisions with virtual environment objects on the CUDA-supported graphics processor in real time. The modules have been successfully tested and demonstrated their applicability in simulation-training complexes and virtual environment systems.

Keywords: visualization, particle system, regular grid, collisions, CUDA.

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

правильного восприятия такой среды служит взаимодействие ее объектов друг с другом. Распространенным типом взаимодействия являются столкновения, или коллизии [1]. Моделирование коллизий включает в себя два этапа: определение точек коллизии объектов и расчет поведения этих объектов в результате произошедшего столкновения. Методы и алгоритмы реализации данных этапов напрямую зависят от типов и сложности геометрии взаимодействующих объектов. С этой точки зрения одной из трудоемких и ресурсозатратных задач является расчет коллизий систем частиц [2] с другими объектами виртуальной среды, поскольку каждая такая система может содержать огромное количество элементов (до нескольких миллионов и более).

Одним из известных решений описанной задачи нахождения коллизий между виртуальными объектами является применение методов, базирующихся на анализе изображений в виде 2D-проекций трехмерной сцены на заданные плоскости (image-based методы). Тип проецирования и плоскости выбираются исходя из используемых подходов. Так, в статье [3] предлагаются методы поиска столкновений объектов на основе совместного применения буфера трафарета (stencil buffer) и карт глубины (depth map). В статье [4] рассматриваются методы и алгоритмы, ориентированные на нахождение коллизий систем частиц с другими объектами на графическом процессоре (GPU) с использованием шейдеров и z-буфера видеокарты. Однако использование шейдеров для решения вычислительных задач, не связанных напрямую с визуализацией, влечет за собой необходимость дополнительных структур данных в виде некоторого массива текстур, каждую из которых надо обновлять в отдельном проходе рендеринга. Работа [5] предлагает распределенные методы реализации систем частиц и расчета точек их столкновения с объектами виртуальной среды на основе карт глубины на GPU с поддержкой архитектуры параллельных вычислений CUDA. Использование CUDA позволяет повысить эффективность вычислительных алгоритмов, поскольку в таком случае отсутствует необходимость привязывать расчеты к структуре графического конвейера, а также появляется возможность хранить параметры частиц в виде классических массивов в видеопамяти. Несмотря на достаточную простоту image-based методов при решении задач поиска коллизий объектов, они обладают рядом недостатков, что ограничивает область их применения. Среди основных минусов можно отметить необходимость создания одного или нескольких изображений-проекций виртуальной сцены для каждой системы частиц в отдельности, зависимость точности определения коллизий от разрешения этих изображений, а также невозможность установления факта наличия или отсутствия коллизии при проникновении частиц в области сцены, закрытые на проекции изображениями каких-либо объектов.

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

Регулярная сетка

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

ячейки одинакового размера, называемые вокселами. В нашем случае используются кубические вокселы.

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

- расчет ограничивающего параллелепипеда AABB сцены со сторонами, параллельными координатным плоскостям СК WCS;

- разделение полученного AABB на вокселы;

- составление таблицы индексов полигонов, пересекающих каждый воксел.

Если объекты сцены, кроме систем частиц, в течение всего времени моделирования и визуализации не изменяют своего положения и ориентации, не добавляются и не исчезают, то такая сцена является статической, а разбиение пространства достаточно выполнить один раз при ее загрузке в память. Время построения сетки при этом не служит определяющим фактором, следовательно, выполнить описанные операции можно с использованием CPU. В противном случае, когда объекты перемещаются от кадра к кадру, создаются и удаляются, границы AABB и таблица пересечений вокселов полигонами могут значительно меняться. Это приводит к необходимости перестраивать регулярную сетку перед визуализацией каждого кадра. Реализация перестроения сетки в масштабе реального времени, необходимом для правильной работы систем виртуального окружения и имитационно-тренажерных комплексов, требует специальных распределенных методов и алгоритмов. Ранее нами были предложены эффективные решения для построения регулярной сетки виртуальной сцены с использованием CUDA-совместимого GPU в рамках задачи реализации трассировки лучей. С их подробным описанием можно ознакомиться в [8]. Результатами применения данных методов и алгоритмов являются:

- AABB сцены в виде двух его крайних точек - минимальной Bmin и максимальной Bmax, разделенный на кубические вокселы с ребром некоторой длины а ;

- массив Avp пар «номер воксела / номер пересекающего воксел полигона», отсортированный относительно номеров вокселов;

- массив An количеств полигонов, пересекающих каждый воксел;

- массив At индексов первого вхождения пары с номером каждого воксела в массиве Avp.

Номер каждого полигона является уникальным и кодирует индексы виртуального объекта и соответствующего треугольника этого объекта. Номер воксела вычисляется по формуле:

C = kz х dx х dy + ky x dx + kx, (1)

где kx, ky, kz - индексы воксела по координатным осям X, Y, Z системы WCS, начиная c нуля от точки Bmin;

dx, dy - размерности сетки в ячейках по осям X, Y той же СК.

Поиск коллизий частиц с объектами

Далее будем рассматривать случай с динамической виртуальной средой, где перестроение сетки осуществляется при синтезе каждого кадра изображения сцены. После того, как регулярная сетка сформирована по технологии, изложенной в [8], указатели на ее данные предаются в CUDA-ядро, отвечающее за определение текущего состояния системы частиц. Каждый вычислительный поток отвечает за обработку одной частицы в виде точки пространства, соответствующей центру ее трехмерной модели. Поток рассчитывает новое положение, скорость, время жизни и другие параметры своей частицы. Также он выполняет поиск возможной коллизии частицы с каким-либо объектом сцены и ее обработку. Для этого вначале необходимо понять, какие ячейки сетки пересекла частица, преодолев путь от своего предыдущего положения P0 до текущего положения P1. Поскольку вычисление параметров и отображение

системы частиц происходит в момент формирования очередного кадра изображения, а визуализация сцены должна выполняться в масштабе реального времени (т. е. временной интервал между кадрами составляет не более 40 мс), то этот путь аппроксимируется отрезком P0P1 (рис. 1). Номера C0 и C1 вокселов сетки, содержащих точки P0 и P1 соответственно, вычисляются с помощью формулы (1). При этом индексы kx, ky, kz вокселов определяются как:

k„ =

1 (P - B . ) , k = 1 (P - B . ) , k = 1 (P - B . )

y x mm,x J 5 y \ .У mm,y J ' z \ z m.n,z J

a a a

где а — длина ребра воксела;

Bmin — минимальная точка AABB сцены;

Px, Py, Pz — координаты положения частицы в мировой системе WCS; скобки обозначают округление до ближайшего целого снизу.

Рис. 1. Аппроксимация пути частицы

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

0, у > 0 (рис. 2). В зависимости от соотношения углов а и в отрезок Р0Р1 перейдет из текущей ячейки либо в (кх + 1, ку) - соседнюю справа (при а < в), либо в (кх, ку + 1) - соседнюю сверху (при а > в), либо по диагонали в ячейку (кх + 1, ку + 1), если а = в. Заменим углы а и в их тангенсами:

у п 1" * tg а = —, tg р =

x

1 - s

где (э, *) - относительные координаты точки Ро, отсчитываемые в долях ячейки от ее левого нижнего угла и вычисляемые как:

P - B

_ 0,x mm,x i

s =--kx

а

t =

P0, y B min,y k

a

Y

а

/(кх, ку + 1)

у\\\в

Р0

> к (кх, ку)

£

% + 1, ку + 1)

(кх + 1, ку)

X ->

Рис. 2. Двумерная регулярная сетка

Тогда индексы следующей ячейки, в которую перейдет отрезок, равны:

( х (1 - г) - у (1 - ^) >

кх'= кх + 1 - ¥ (tg в - tg а) = кх + 1 - ¥

х (1 - )

ку = ку + 1 - ¥ (tg а - tg в) = ку + 1 - ¥

(

\

у (1 - ^) - х (1 - г) х (1 - )

(2)

Значение функции ¥ определяется знаком аргумента ж '1, w < 0

¥ (у ) =

0, w > 0

Так как ранее было определено, что значение х > 0, а £ е [0, 1], то значение функции ¥ не зависит от знаменателей ее аргументов. Поэтому данные знаменатели в формулах (2) можно отбросить:

кх = кх + 1 - ¥ (х (1 - г) - у (1 - $)), к; = ку + 1 - ¥ (у (1 - - х (1 - г)).

(3)

Заметим, что при переходе от формул (2) к формулам (3) для координаты х вектора Р0 Р1 становится допустимым значение 0. Аналогично рассмотренному случаю выписываются формулы для векторов Р0Р1, находящихся во втором, третьем и четвертом квадрантах. Объединив их

с (3), получим решение для произвольного вектора Р0РА :

кх = кх + г (1 - ¥ (| х |/у - | у |/х)),

ку' = ку + ] (1 - ¥ (| у | /х - | х | /у)),

г = 1 - 2¥ (х), ] = 1 - 2¥ (у), /х = 1 - ¥ (х) - г х /у = 1 - ¥ (у) -] х г.

(4)

Чтобы решить задачу поиска следующего воксела для трехмерной сетки, необходимо рассмотреть проекции текущего воксела и отрезка Р0Р1 на плоскости ХУ, ZY и XX мировой СК

г

WCS. Каждая из проекций с точностью до обозначения осей соответствует разобранному ранее двумерному случаю. Каждый из индексов kx, ky, kz будет изменяться при переходе отрезка из одной ячейки в другую, когда он изменяется в двух из трех проекций: XY и XZ для kx, XY и ZY для ky, ZY и XZ для kz. Изменение индекса в проекциях определяется по формулам, аналогичным (4). Объединяя попарно формулы для соответствующих проекций, следующий воксел можно вычислить как:

kx' = kx + i ((1 - F (| x \fy - | y\fx)) && (1 - F (| x | fz - | z |fx))),

ky' = ky + j ((1 - F (| y | fx - | x | fy)) && (1 - F (| y | fz - | z |fy))),

kz' = kz + k ((1 - F (| z | fy - | y | fz)) && (1 - F (| z | fx - | x |fz))),

i = 1 - 2F (x), j = 1 - 2F (y), k = 1 - 2F (z),

fx = 1 - F(x) - i x s, fy = 1 - F (y) - j x t, fz = 1 - F (z) - k x r,

где && - означает логическую операцию «И», (s, t, r) - относительные координаты точки Po, отсчитываемые в долях воксела от его угла с наименьшими координатами в СК WCS и вычисляемые как:

P — B P — B P — B

s _ 0,x min,x k t — 0,y min,j k r — 0,z min,z k

a x' a J' a z

Обрабатывающий частицу CUDA-поток на GPU последовательно проходит вокселы, пересекаемые отрезком P0P1, начиная с воксела Co. В каждом из них происходит анализ наличия пересечения отрезка с входящими в ячейку полигонами. Как было описано выше, данные о количестве и номерах таких полигонов хранятся в массивах, в виде которых без учета коллизий представлена регулярная сетка. Так, число полигонов, содержащихся в вокселе, считы-вается потоком из массива An по номеру С этого воксела, который определяется по формуле (1). Номера полигонов хранятся последовательно в массиве Avp, начиная с элемента с индексом Ai [С]. При нахождении хотя бы одного пересечения отрезка P0P1 с полигоном, лежащего внутри рассматриваемого воксела, проход по вокселам останавливается, а точка этого пересечения является точкой коллизии частицы с объектом. Если пересечений несколько, то выбирается ближайшее из них к началу P0 отрезка.

Рис. 4. Моделирование струи пены с учетом коллизий

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

На рис. 3 и 4 продемонстрирована виртуальная сцена с моделированием струи пены без учета столкновений ее частиц с объектами (рис. 3), а также с поиском и обработкой их коллизий на основе предложенных методов и алгоритмов, использующих регулярную сетку (рис. 4).

Заключение. В результате проведенных исследований были разработаны оригинальные методы и подходы для распределенного моделирования коллизий систем частиц с другими объектами трехмерных виртуальных сцен. Особенностью предлагаемых решений является использование пространственного разбиения сцены с помощью регулярной сетки, построение и применение которой для поиска столкновений частиц с поверхностями объектов выполняется на многоядерном графическом процессоре, поддерживающем архитектуру параллельных вычислений CUDA. Широкое применение распределенных вычислений на GPU обеспечивает работу предлагаемых методов и алгоритмов в масштабе реального времени для высокополигональных сцен, включающих несколько миллионов частиц. Предложенные решения реализованы в виде программных модулей и прошли успешную апробацию в составе системы визуализации, разработанной в ФГУ ФНЦ НИИСИ РАН.

Исследование выполнено при финансовой поддержке РФФИ в рамках научного проекта № 16-07-00796.

Литература

9. Ming C. Lin, Gottschalk S. Collision detection between geometric models: a survey // Proc. of IMA conference on mathematics of surfaces. 1998. V. 1. Р. 602-608.

10. Reeves W. T. Particle systems - a technique for modeling a class of fuzzy objects // Computer Graphics. SIGGRAPH. 1983. P. 359-376.

11. Baciu G., Wong S.-K. Image-based techniques in a hybrid collision detector // IEEE Trans. on Visualization and Computer Graphics. 2003. V. 9. P. 254-271.

12. Kolb A., Latta L., Rezk-Salama C. Hardware-based Simulation and Collision Detection for Large Particle Systems // Proc. of the ACM SIGGRAPH/EUROGRAPHICS conference on Graphics hardware. 2004. P. 123-131.

13. Мальцев А. В., Страшнов Е. В. Использование z-буфера для поиска столкновений частиц с объектами 3D сцены // Тр. НИИСИ РАН. 2018. Т. 8. № 1. C. 52-55.

14. Havran V., Herzog R., Seidel H.-P. On the fast construction of spatial hierarchies for ray tracing // Proceedings of the 2006 IEEE Symposium on Interactive Ray Tracing. 2006. P. 71-80.

15. Torres R., Martin P. J., Gavilanes A. Ray casting using a roped BVH with CUDA // 25th Spring Conference on Computer Graphics (SCCG 2009). P. 107-114.

16. Мальцев А. В. Построение адаптивной регулярной сетки трехмерной сцены в реальном режиме времени // Программные продукты и системы. 2010. № 4. C. 41-45.

i Надоели баннеры? Вы всегда можете отключить рекламу.