Порошковые игры: как они работают?

13

Я недавно нашел эти два драгоценных камня:

http://powdertoy.co.uk/

http://dan-ball.jp/en/javagame/dust/

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

Есть ли какие-нибудь игры с открытым исходным кодом, на которые я мог бы посмотреть?

Марк Мюллер
источник
Я задал похожий вопрос о моделировании песка на оригинальном Stackowerflow . Ответы могут помочь вам.
Евгений Винник

Ответы:

5

Там, конечно, немало; Я использовал их мод. Обратите внимание, что ссылки предназначены для веток форума и загрузок исходного кода. У меня есть два лучших воспоминания:

EngimaSand от xavierenigma ( C ++ | Java ) Java более новый.

BurningSand by sieben ( C ++ ) Этот метод очень быстр с точки зрения физики.

На сайте , к сожалению , близки к смерти, но есть несколько потоков здесь о физике.

РЕДАКТИРОВАТЬ: Для всех, кто интересуется, у меня есть Mediafire Java источник для EnigmaS и здесь .

Коммунистическая утка
источник
Очень признателен. Ссылки сейчас не работают, хотя. Я попробую это снова через несколько часов.
Марк Мюллер
Они есть? Они все работают нормально для меня.
Коммунистическая утка
1
Mediafire загрузил и отредактировал в ответ.
Коммунистическая утка
5

Физика в этих играх моделируется использованием системы, основанной на сложном клеточном автомате . Он значительно сложнее, чем тот, что используется, скажем, в Game of Life, и включает в себя функции, которые означают, что он, вероятно, не является правильным CA, но его все же относительно просто вычислить, и он использовался годами. Не вдаваться в подробности, но сложность алгоритма будет довольно мала, возможно, даже O (площадь).

Похоже, там также есть некоторый интеллект роя, который также удивительно эффективен для интересных эффектов, которые он может создать.

Грегори Эйвери-Вейр
источник
"и включает в себя функции, которые означают, что это, вероятно, не правильный CA" ... что вы подразумеваете под этим? Различаются ли эти CA только наличием большего количества правил или чем-то большим?
Гастон
2
Канонический CA имеет состояние каждой ячейки в поколении N + 1, определяемое функцией, которая зависит от состояний близкого соседства ячейки в поколении N, и эта функция обычно одинакова для каждой ячейки. Многие «порошковые» игры содержат такие вещи, как boids или физические объекты на основе ограничений, которые на самом деле не подпадают под это определение. Я сомневаюсь, что они закодированы полностью как CA. Даже если в какой-то момент они становятся достаточно большими, а функция перехода становится достаточно сложной, чтобы вы действительно не имели дело с ЦС.
Грегори Эйвери-Вейр
Хороший ответ и комментарий Грегори, спасибо за ваши идеи.
инженер
1
Хотя сотовый автомат может быть частью этого, это определенно не полный ответ. Там также есть флюид решатель, что делает его таким «реалистичным»
bobobobo
@bobobobo: Да, это определенно выходит за рамки правильных клеточных автоматов.
Грегори Эйвери-Вейр
3

Много лет назад Йос Стам начал выпускать свой исходный код для флюидных решателей. Существует очень короткий фрагмент кода, который устанавливает сетку и очень быстро решает уравнения Навье-Стокса. Полный источник также доступен на его странице.

bobobobo
источник