6. Параллелизация PBD

Интро

PBD получился очень крутым. Но у него есть серьезный недостаток – последовательное разрешение ограничений.

Во всех вариациях PBD, которые мы рассматривали, мы последовательно обновляли позиции частиц. По одной за раз. Тк мы использовали Projected Gauss-Seidel, который подразумевает именно последовательное обновление позиций.

Для того чтобы ускорить процесс, можно использовать параллельные вычисления.

Одно из самых простых решений – использовать вместо Projected Gauss-Seidel метод Jacobi, который принципиально легко параллелизуется. На самом деле это не будет чистый Jacobi, тк этим методом решают системы линейных ограничений. Когда решают нелинейные системы линеаризуя их говорят, о том что решают с помощью Jacobi style метода.

Основная проблема – это зависимость между ограничениями. Если мы попытаемся обновить позиции частиц параллельно, то можем нарушить ограничения.

Источники

Супер простая идея – два алгоритма – вставка фантомных верщин + ограничения к ним и раскраска графа Вставка фантомных вершин – заменяем вершину с которой больше всего ограничений на много фантомных вершин + одно ограничение.

Кластеризуем и объединяем вершины и раскрашиваем супер граф

Раскраска – жадная раскраска графа. проходим по вершинам и раскрашиваем их в цвета, которые еще не встречались у соседей.

Нужно правильно перенумеровать вершины