¿Cómo puedo simular cristales rotos?

10

Necesito hacer una simulación con piedra lanzada a través de una ventana de vidrio. ¿Cómo puedo lograr eso?

Quiero decir, estaba pensando en hacer un modelo 3D de una piedra y vidrio en 3D Studio Max 2012, romper el vidrio y exportar ambos a XNA 4.0 como modelos .x. Luego, en XNA, hago la animación, escribiendo mi propio motor de física. ¿Es posible de esa manera? ¿Es posible destruir el vidrio en XNA después del impacto o debería hacerlo en 3DS Max? Al "destruir el vidrio" me refiero a desconectar unos pedazos de vidrio previamente destrozados unos de otros, porque dependiendo de la velocidad de inicio y el peso de la piedra y la resistencia (dureza?) Del vidrio (todo definido por el usuario) los pedazos se desconectarán de entre sí de diferentes maneras.

toomek308
fuente

Respuestas:

5

La destrucción de Voronoi es un enfoque que crea una destrucción bastante realista, por ejemplo. vidrio templado que tiene la notable capacidad de romperse en fragmentos pequeños, típicamente convexos debido a cambios estructurales en el vidrio durante la fabricación. Además, dado que tiene un panel de vidrio, solo necesitará la implementación 2D Voronoi, no 3D.

Ingeniero
fuente
3

Creo que generar automáticamente piezas rotas a partir de una malla inicialmente completa es bastante complicado. Si solo está interesado en simular la dinámica de los fragmentos mientras vuelan por el aire, colisionan, etc., entonces comenzaría con una malla pre-destrozada, usando restricciones rompibles o algo para mantener las piezas juntas hasta que se tiren aparte con suficiente fuerza.

Nathan Reed
fuente
Hola Nathan (de nuevo), ¿has trabajado en esta tarea después de 2011? ¿Puedes dar más pistas? Thx
karlphillip
@karlphillip Trabajé en una demostración usando PhysX Destruction , aunque personalmente solo hice material de renderizado, no material de física en ese proyecto. La tecnología PhysX funciona generando piezas previamente destrozadas en una herramienta DCC e intercambiándolas por la malla intacta cuando se produce daño.
Nathan Reed
3

Haga un panel sin romper y un panel roto. Cuando tenga la colisión, apague la versión sin romper y comience a usar el panel roto.

Si está lanzando una piedra (de un tamaño algo consistente) en una ventana, entonces puede recorrer un largo camino con su modelo 3D del panel roto (modele los fragmentos en su lugar en el panel y luego ejecute una simulación física simple en cada uno los fragmentos para simularlos cayendo / volando). A menos que la cámara esté muy cerca (o en cámara lenta), no debería necesitar colisiones entre las piezas, solo con la geometría circundante (¿plano del suelo?). No te olvides de rociar algunos efectos de partículas para la nube de partículas de vidrio más pequeñas que acompañan a la rotura.

Si crea el panel roto con la suposición de que la piedra está golpeando el centro, puede escalar las piezas en función de la posición de golpe real para obtener un descanso bastante atractivo para la mayoría de los golpes.

M medusa
fuente
2

Si descarga la Bullet Physics Library , tiene una muestra que incluye cristales rotos, y necesitaría algo como bala en cualquier juego con cristales rotos.

Editar: Bullet sería una gran demostración para modelar su propio motor después.

Matt Jensen
fuente
1

Muchas gracias por sus respuestas y ayuda invaluable. Finalmente logré construir el proyecto. Probé todas tus sugerencias y al final elegí en parte mi propio camino para esta simulación.

Utilicé bulledsharp (envoltorio de física de bala para c #) para el motor de física, pero es importante usar el más reciente, compilado por usted mismo con la fuente de bulletsharp de sourceforge svn, así como fuentes de física de bala nuevas. No es el .dll precompilado, disponible para descargar desde sitios web. La versión precompilada era demasiado antigua para mí y no incluía algunas características preciosas desarrolladas aún más. Lo que también aprendí es que para simulaciones simples en las que no se necesitan gráficos avanzados, es mejor usar 3dsmax anteriores, es decir, 2011 (no el 2012 más reciente), para desarrollar modelos, etc. Principalmente porque hay más complementos y exportadores. Además, es realmente útil consultar los tutoriales en todos los marcos disponibles (sharpdx, xna, xna4, slimdx, c ++ y otros).

Finalmente, mi enfoque fue construir la pared de vidrio con piezas de cubo realmente pequeñas. Por supuesto, para ejecutar la simulación debe tener una máquina realmente poderosa. En caso de que tenga algo menos potente, puede usar cubos más grandes. Es importante hacer todos los cubos creados con el estado insular dormido. Ahora, cada pieza tiene su representación en dos conjuntos dimensionales de carrozas. El número allí indica cuál es la fuerza de conexión entre dos cubos. Cuando se arroja la piedra y se detecta colisión, se calcula la fuerza para cada cubo en la pared (incluida la masa de piedra y la velocidad, la masa del cubo y el tamaño y la distancia desde el centro de la colisión) y se resta de la matriz en el círculo -como patrón. Los cubos que después de la resta tienen cero o menos fuerza de conexión se activan. Esto hace que los cachorros se muevan.

Eso es todo. Gracias por tu ayuda.

toomek308
fuente