Cosmos 7 años

Hola Habr!

En 2012, escribí una publicación sobre mi hobby: Cosmos: modelando la evolución de organismos multicelulares.


Han pasado casi 7 años desde entonces, durante los cuales trabajé en el desarrollo de este proyecto. Hoy quiero contarles un poco sobre lo que aprendí a hacer y cómo planeo desarrollar el proyecto aún más.

Motivación "Gran Evolución"


Cosmos 2012 es un gran ejemplo de la sensación del "efecto de inmersión" de la visualización, que fue el punto de partida en el desarrollo de la idea de hacer una "simulación de la vida en la GPU".

Sin embargo, esta evolución no ocurrió allí: el proceso debería desarrollarse continuamente y no llegar a un estado final unos minutos después del lanzamiento.

Resultó que lo más difícil era lograr la evolución más larga posible de especies que "no convergían al límite del desarrollo", dando lugar a una variedad real de formas. Entonces será posible explorar estas formas, y luego habrá un interés real en ejecutar la simulación durante días, semanas, meses, esperando la aparición de formas de estudio cada vez más complejas y desarrolladas.

Física


Puedes pensar en cualquier física: con la ayuda de la GPU puedes construir una gama muy amplia de modelos con la cantidad de elementos suficientes para los procesos evolutivos en tiempo real. Cualquier combinación de los principios de interacción de ciertos "elementos", "átomos", "células" - da lugar a un constructor de formas en evolución, en el que una simulación organizada de manera compleja puede literalmente autoensamblarse de la nada.

Al principio, quería crear materia multicelular que permitiera que el cosmos se tocara directamente, "sin volar", teniendo una estructura de bolas conectadas entre sí en un mosaico, a la manera de los tejidos celulares de organismos reales.

Era necesario que los organismos se volvieran más similares a los reales, y el significado físico apareció en la estructura diferente de sus cuerpos. Puede "dibujar" un cuerpo con piel, extremidades, músculos, piernas, órganos internos con tales células, y dichos cuerpos literalmente existirán y se desarrollarán dentro de la simulación.

Un ejemplo del SDK de CUDA fue la realización de colisiones de partículas redondas basadas en una red espacial, permitiendo que las partículas interactúen solo con las cercanas.

Descubrí cómo funciona el ejemplo 3D, y escribí mi simulación para 2D.
En el entonces GTX 580, esto permitió calcular 256 mil partículas en tiempo real.


CUDA + JavaScript


Otro problema era que era conveniente para mí idear un concepto cósmico en JavaScript, mientras que las simulaciones realmente a gran escala solo eran posibles en la GPU.

Aproximadamente 100 veces más conveniente y más rápido en JS.
Y alrededor de 1000 veces más rápido en una GPU.

La solución fue escribir la física de las interacciones de partículas en CUDA y dar la oportunidad de crear partículas y controlar sus parámetros desde JavaScript, integrando el motor Google V8 que apareció en la simulación como un lenguaje de secuencias de comandos.

Agregué la capacidad de conectar las partículas con las mismas "bandas de goma" que estaban conectadas en los primeros espacios. Como resultado, uno podría escribir el código en el script de control JS:

var ball1 = new Ball(); var ball2 = new Ball(); ball1.xy = [0,0]; ball1.rgb = [1,1,1]; ball2.xy = [1,0]; ball2.rgb = [1,1,1]; var link = new Link(ball1, ball2); 

y dos bolas blancas aparecieron en la pantalla, conectadas entre sí por una "banda elástica".

Ya en este nivel de desarrollo del motor, aparecieron oportunidades interesantes para los experimentos con física virtual:


Edificio


Al agregar varias propiedades a las bolas, como la fuerza de unión, la masa, el tamaño y la elasticidad, obtuve un constructor controlado por JavaScript en el que podía dibujar las estructuras de miles de criaturas que consisten en células de diferentes propiedades físicas, y todo esto fue calculado por la GPU en tiempo real.

Como equilibrio entre precio y calidad, se eligió una forma suave y aerodinámica de un pulpo.

Cada elemento del cuerpo (centro, extremidades) se realiza con la ayuda del número mínimo necesario de bolas, mientras que el volumen y la masa se distribuyen naturalmente, donde las extremidades se engrosan hacia el centro, la materia se vuelve más duradera y masiva:


Motilidad


El siguiente paso fue crear la motilidad de los cuerpos cósmicos. Los músculos eran fáciles de hacer: era suficiente para apretar los lazos entre las bolas a lo largo de las patas, y esto causó el efecto de la contracción muscular.

Las neuronas actuantes se conectan a estos músculos, y si hay una señal, el músculo se contrae. Dos músculos por extremidad: un pulpo bidimensional totalmente controlable.

Con la ayuda de una pequeña red neuronal recurrente mutante al azar (del orden de 10-100 neuronas) y una simple selección de los mejores individuos según el criterio, por ejemplo, "quién podría moverse más", puede llamar la cinemática necesaria del movimiento para cada forma de cuerpo individual:


Génesis


Otra forma de cuerpo explorada activamente son los "hexoides". Los cuerpos de tales criaturas están compuestos de células que forman formas arbitrarias a partir de bolas del mismo tamaño sobre la base de una red no estricta cercana a la hexagonal.

Esta forma es muy adecuada para estudiar la evolución simultánea de la forma y la motilidad del cuerpo "en conjunto", al tiempo que maximiza el potencial de los experimentos con células de varios tipos, que difieren en fuerza y ​​función. Por ejemplo, los cuerpos cósmicos pueden consistir en combinaciones de células sólidas que forman el marco de la criatura y los músculos que ponen en movimiento la estructura.

En el futuro, cuando se sumerja en un hábitat complejo, sobre la base de estos principios, se pueden desarrollar formas claramente diferentes de criaturas, algunas de las cuales estarán más “blindadas”, otras están diseñadas para un movimiento rápido, otras para un ataque efectivo, etc.


Caza y cría


Si se enseña al cosmos a cazarse entre sí, la cantidad de materia en la simulación puede permanecer constante, mientras que generaciones de criaturas se sucederán.

Entonces se pueden formar cadenas alimentarias estables y comienza un gran proceso de coevolución de diferentes especies de criaturas.

Para el primer experimento, utilicé 4 tipos de células:

  • célula digestiva (coloreada) : cuando toca otro cuerpo cósmico, muerde una pieza
  • Armadura (ligera) : una jaula mecánica más fuerte que no puede ser mordida
  • tejido conectivo (gris) - tejido elástico suave
  • celda motora (oscura) : permite que el espacio se mueva más rápido

Tan pronto como el cosmos come un número suficiente de células, se "divide", formando cerca de su copia ligeramente mutada.

Tal proceso ya está generando formas con una estructura y comportamiento diferenciados:



Habitat


El espacio frío y vacío no es el mejor lugar para vivir.

Para crear un bioma virtual, puede utilizar materiales de construcción básicos: partículas de tierra, agua, luz y células vegetales capaces de crecer.

Las partículas de tierra se adhieren entre sí, formando una plataforma sólida. El suelo puede mojarse si las partículas de agua entran en él.

En suelos húmedos, con buena luz, las plantas pueden crecer. La masa vegetal es la fuente principal de alimento orgánico para las formas animales.

Los cuerpos animales, en descomposición, devuelven sustancias inorgánicas al ecosistema del bioma.





PS


Este es un artículo de revisión, cuyas dimensiones no permiten una divulgación coherente de todas las áreas en las que se está desarrollando el proyecto.

Ahora estoy trabajando en un diseñador interactivo con todas las funciones que te dará la oportunidad de "jugar juegos espaciales" en modo sandbox, diseñar nuevos tipos de criaturas, dibujar ecosistemas "en modo Dios" y observar la evolución en tiempo real.

En cuanto a la parte técnica, el progreso no se detiene: desde 2012, el paradigma de desarrollo ha cambiado 4 veces, pasando gradualmente del concepto CUDA + JS descrito en este artículo hacia modelos ORM de GPU que funcionan completamente en el lado de la GPU y tienen su propio lenguaje de objetos para los procedimientos almacenados.

Eso es todo, ¡gracias por su atención!

Siga el desarrollo del proyecto y apoye el desarrollo aquí:

https://www.patreon.com/samadhi_toolbox

Todavía hay pocas publicaciones en el blog, pero si hay suscriptores, prometo publicarlas, en el transcurso de 7 años he acumulado mucho contenido sin vergüenza.

En conclusión, una pequeña idea de trabajo:

Source: https://habr.com/ru/post/458612/


All Articles