Рисование частиц в виде гладкой капли

12

Я новичок в разработке игр / графики и играю с частицами (в 2D). Я хочу нарисовать частицы близко друг к другу как капли, так же как жидкость / вода. Я не хочу рисовать большие круги, накладывающиеся друг на друга, поскольку капля не будет гладкой (и слишком большой). Я не очень хорошо знаю физику, но предполагаю, что мне нужно нечто похожее на поверхностное натяжение.

Я не смог найти ничего на stackexchange или в Google (может быть, я не знаю правильных ключевых слов?). До сих пор я нашел два возможных решения, но я не могу найти какую-либо конкретную информацию об алгоритмах.

Одним из них является вычисление вогнутой оболочки частиц, которую я считаю шариком. Я могу вычислить блоб, создав класс эквивалентности (по отношению «близко друг к другу»). Как ни странно, я не смог найти ни одного алгоритма, объясняющего, как рассчитать вогнутый корпус. Многие публикации (и среди stackexchange) ссылаются на библиотеки или коммерческие продукты, которые делают это (мне нужны библиотеки для работы на C #), но никогда не используют алгоритм. Также это решение может иметь проблему с кругом частиц, который не обнаружит пустое пространство в середине.

Исследуя вогнутый корпус, я наткнулся на то, что называется альфа-формы. Кажется, это именно то, что я хочу сделать, однако, так же как и с вогнутым корпусом, я не нашел источника, объясняющего, как они на самом деле работают. Я нашел несколько презентационных материалов, но их недостаточно для продолжения. Это как большой секрет, все знают кроме меня: - /

После расчета вогнутой формы корпуса или альфа-формы я хочу сделать кривую Безье, чтобы сделать ее гладкой и красивой.

Хотя мой подход мне кажется слишком сложным, возможно, я пытаюсь решить эту проблему неправильно? Если вы можете предложить какое-либо иное решение моей проблемы или объяснить, что мне не хватает, я был бы очень рад и благодарен :-)

Благодарю.

Nõmmik
источник
stackoverflow.com/questions/83593/…
BlueRaja - Дэнни Пфлугхофт
@BlueRaja Спасибо за ваш комментарий. Хотя я уже нашел этот пост, но отклонил его, потому что ответы либо ссылаются на статьи, которые напрямую не решают мою проблему, но их ссылки могли бы, либо патент, который я не могу использовать открыто (я думаю, я не хорош с бюрократией) (Я даже не нашел ссылку для скачивания в любом случае).
Нёммик
1
Срок действия патента на «марширующие кубики» истек в 2005 году, большинство 2D-примеров намного старше, и поэтому вы, возможно, видели, как они предупреждают вас об их использовании на старых веб-страницах.
Патрик Хьюз
1
Вот статья gamedev, которая включает в себя как метаболлы, так и изоповерхности, с некоторыми примерами, чтобы прояснить идеи: ссылка
Патрик Хьюз
Спасибо, что просветили меня о метаболлах, они, кажется, делают то, что я хочу :-)
Nömmik

Ответы:

8

Ключевое слово, которое вам может понадобиться, - «Metaballs» и варьируется от сложного образца Gem GeForce nVidia до демонстрационных версий, разработанных только для того, чтобы выглядеть хорошо и быстро работать.

Патрик Хьюз
источник
На самом деле, я не знал этого ключевого слова :-) Я посмотрю на него поближе, и, если оно мне подходит, я приму ваш ответ. Благодарность!
Нёммик
1
+1 для меня, думая, что это были "фрикадельки", прежде чем я прочитал это во второй раз.
Джеймс
2
Не могли бы вы добавить немного больше деталей к этому ответу? +1, если вы делаете.
AttackingHobo
@ Джеймс Я думаю, что все совершают эту ошибку, когда впервые видят слово!
Джефф
1

Чтобы преобразовать группу частиц в сетку для рендеринга в стиле metaballs, вы можете взглянуть на алгоритм Marching Cubes , который генерирует полигональную сетку из данных вокселей. Есть демо-сцена, демонстрирующая прекрасный пример, со всем, что генерируется на GPU: numb res .

thekidder
источник