Juegos de polvo: ¿cómo funcionan?

13

Recientemente encontré estas dos gemas:

http://powdertoy.co.uk/

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

Mi pregunta es: ¿Cómo se maneja eficientemente la física con tantos elementos? ¿Estoy subestimando severamente la potencia informática moderna o es posible 'simplemente' tener una matriz bidimensional, cada celda de la cual describe lo que se coloca en la posición correspondiente y simula cada celda en cada paso? ¿O se están haciendo cosas más complejas como resumir grandes áreas del mismo tipo en un solo conjunto de datos y separar dicho conjunto según sea necesario?

¿Hay algún juego de código abierto como este que pueda ver?

Marc Müller
fuente
He hecho una pregunta similar sobre la simulación de arena en Stackowerflow original. Las respuestas pueden ayudarlo.
Evgeny Vinnik

Respuestas:

5

Ciertamente hay bastantes; Solía ​​modificarlos. Tenga en cuenta que los enlaces son para hilos del foro y descargas de fuentes. Los dos de los que tengo mejores recuerdos son:

EngimaSand de xavierenigma ( C ++ | Java ) El Java es más nuevo.

BurningSand por sieben ( C ++ ) Este es muy rápido en cuanto a física.

El sitio es por desgracia cerca de la muerte, pero hay varios hilos aquí acerca de la física.

EDITAR: Para cualquier persona interesada, he mediafire'd la fuente de Java para EnigmaSand aquí .

El pato comunista
fuente
Muy apreciado. Sin embargo, los enlaces están caídos en este momento. Lo intentaré de nuevo en unas horas.
Marc Müller el
¿Son? Todos están funcionando bien para mí.
El pato comunista el
1
Mediafire subió y editó la respuesta.
El pato comunista el
5

La física en estos juegos se simula mediante el uso de un sistema basado en un autómata celular complejo . Es significativamente más complicado que el utilizado, por ejemplo, en el Juego de la Vida, e incorpora características que significan que probablemente no sea una CA adecuada, pero aún es relativamente simple de calcular y lo ha sido durante años. Para no entrar en demasiados detalles, pero la complejidad del algoritmo será bastante pequeña, tal vez incluso O (área).

Parece que también hay algo de inteligencia de enjambre allí, que también es sorprendentemente eficiente por los interesantes efectos que puede crear.

Gregory Avery-Weir
fuente
"e incorpora características que significan que probablemente no sea una CA adecuada" ... ¿qué quieres decir con eso? ¿Estas CA solo difieren en tener más reglas o algo más?
Gastón
2
Una CA canónica tiene el estado de cada celda en la generación N + 1 definido por una función que depende de los estados del vecindario cercano de la celda en la generación N, y la función es generalmente la misma para cada celda. Muchos juegos de "polvo" contienen cosas como boids u objetos de física basados ​​en restricciones, que realmente no entran en esta definición. Dudo que estén codificados por completo como CA. Incluso si lo son, en algún momento, el vecindario se vuelve lo suficientemente grande y la función de transición se vuelve lo suficientemente compleja como para que realmente no se trate de una AC.
Gregory Avery-Weir
Buena respuesta y comentario Gregory, gracias por sus ideas.
Ingeniero
1
Aunque el autómata celular podría ser parte de él, definitivamente no es la respuesta completa. También hay un solucionador de fluidos allí, que es lo que lo hace ver tan 'realista'
bobobobo
@bobobobo: Sí, definitivamente va más allá de los límites de los autómatas celulares adecuados.
Gregory Avery-Weir
3

Hace muchos años, Jos Stam comenzó a publicar su código fuente para los solucionadores de fluidos. Hay un código muy breve que configura una cuadrícula y resuelve las ecuaciones de Navier-Stokes muy rápido. La fuente completa también está disponible en su página.

bobobobo
fuente