physics - ¿Cómo hacer un motor de física 2D de cuerpo blando?
game-physics rigid-bodies (5)
(1) Tanto Bullet como PhysX tienen soporte para objetos deformables en alguna capacidad. Bullet es de código abierto y PhysX es de uso gratuito. Ambos tienen puertos para Windows, Mac, Linux y todas las consolas principales.
(2) Podrías hackear algo juntos si realmente sabes lo que estás haciendo, e incluso podría funcionar. Sin embargo, es probable que existan errores a menos que tenga un buen conocimiento de cómo funciona el solucionador de restricciones de impulsos secuenciales de Box2D y qué tipos de medidas serán necesarias para mantener su sistema estable. Dicho esto, hay muchas maneras de hacer que los objetos deformables trabajen con un mínimo de molestias dentro de un entorno similar a un juego. La primera opción es tomar una aproximación de segundo (o mayor) orden de la deformación. Esto le permite lidiar con las deformaciones de la misma manera que con los movimientos rígidos, solo que ahora cuenta con algunos grados de libertad adicionales. Vea por ejemplo el siguiente documento:
http://www.matthiasmueller.info/publications/MeshlessDeformations_SIG05.pdf
Un segundo método es la presión de cuerpos blandos, que básicamente modelan el cuerpo como un conjunto de partículas con algunas restricciones de distancia y fuerzas de presión. Esto es lo que hacen PhysX y Bullet, y ya es una técnica bastante estándar (por ejemplo, Gish la usó):
http://citeseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.4.2828%26rep%3Drep1%26type%3Dpdf
Si busca en Google, puede encontrar muchos tutoriales sobre cómo implementarlo, pero no puedo responder por su calidad. Finalmente, ha habido un impulso más reciente para tratar de hacer objetos deformables de la manera "correcta" utilizando modelos elásticos realistas y enfoques de tipo de elementos finitos. Esto sigue siendo un área de investigación activa, por lo que no es para los débiles de corazón. Por ejemplo, puede consultar cualquier número de documentos en los procedimientos SIGGRAPH de este año:
http://kesen.realtimerendering.com/sig2011.html
(3) Probablemente no. Aunque hay ciertos juegos de estilo 2D que pueden funcionar con un motor de física 3D (por ejemplo, juegos de tipo top down) para efectos especiales.
(4) Según lo que acabo de decir, probablemente ya deberías saber la respuesta. Si usted es del tipo aventurero y tiene tiempo para matar y la voluntad de aprender, entonces le digo: ¡adelante! Por supuesto que será difícil al principio, pero como todo, se vuelve más fácil con el tiempo. Además, ¡aprender cosas nuevas es muy divertido!
Por otro lado, si solo quieres resultados ahora, entonces no lo hagas. Tomará mucho tiempo y probablemente fallará (mucho). Si solo quieres crear juegos, entonces apégate a las bibliotecas existentes y aprovecha las abstracciones que te ofrezcan.
La definición de cuerpo rígido en Box2d es
Un trozo de materia que es tan fuerte que la distancia entre dos bits de materia en el trozo es completamente constante.
Y esto es exactamente lo que no quiero, ya que me gustaría hacer cuerpos en 2D (quizás en algún momento en 3D), elásticos, deformables, rompibles e incluso pegajosos.
Lo que espero obtener de esta comunidad son recursos que me enseñan las matemáticas detrás de cómo los objetos se doblan, se rompen e interactúan. No me importan las propiedades moleculares o químicas de estos objetos, y a menudo esto es todo lo que encuentro cuando intento buscar la forma de calcular qué es un pedazo de madera, metal, caucho, sustancia pegajosa, líquido, material orgánico, etc. Puede parecer que después de una fuerza se le aplica.
Además, soy una persona muy visual, por lo que los diagramas y tales son EXTREMADAMENTE ÚTILES para mí.
================================================== ==============================
Ignore estas preguntas, son viejas, y solo las estoy guardando aquí para propósitos contextuales
1. ¿Hay algún motor de física de cuerpos blandos 2D simple como este?
¿Preferiblemente libre o de código abierto?
2. ¿Si no fuera posible hacer el mío sin gastar años en ello?
3. ¿Puedo usar los motores existentes como bullet y box2d como inicio y simplemente transformar su código, o esto podría llevar a más problemas más tarde, considerando mi experiencia de programación de 1 año y ser de viñetas en 3D?
4.Finalmente, si tuviera que transformar otra biblioteca, ¿sería el mejor código de 2d de box2D, el código de software de Bullet o la mezcla del código fuente de ambos?
¡Gracias!
Algunos casos específicos, como las bolas deformables, se pueden simular bastante bien con cuerpos de resorte:
Aquí hay un ejemplo de implementación con cocos2d: http://2sa-studio.blogspot.com/2014/05/soft-bodies-with-cocos2d-v3.html
Dependiendo de la complejidad de los objetos deformables que necesita, puede emularlos utilizando box2d, restringiendo cuerpos rígidos con uniones o resortes. Lo hice en el pasado usando un clon de box2d para xna (farseer) y funcionó muy bien. Espero que esto ayude.
La física de tu pregunta se divide en dos temas diferentes:
- Colisiones inelásticas : las matemáticas aquí son fáciles, y usted podría escribir una biblioteca bastante decente sin demasiado trabajo para los puntos / bolas 2D. (Y con más trabajo, podrías aprender la física para cuerpos extendidos).
- Doblado y rotura de materiales: esto será difícil. En general, tendrá que modelar muchos de los temas en Ingeniería Mecánica:
No estoy siendo simplista. Modelar la flexión y rotura de materiales es, en general, un tema muy detallado y variado. Tomará un largo tiempo. Y la única manera de tener éxito será entender la ciencia lo suficientemente bien como para que puedas hacer atajos inteligentes para limitar el alcance de la ciencia que necesitas modelar en tu juego.
Sin embargo, la otra mitad de su problema (modelar colisiones inelásticas ) es un objetivo mucho más alcanzable.
¡Buena suerte!
Respuesta rápida y parcial:
- los cuerpos rígidos son fáciles de modelar debido a su propiedad (puede usar herramientas físicas, como "Torseur + (enlace en francés en wikipedia, puntos equivalentes en inglés para teoría de tornillos) para aplicar fuerzas en cualquier punto de su elemento.
- en comparación, los elementos no sólidos pasan de ser casi sólidos (piense en una goma muy dura: puede moverse pero es casi sólido) a casi líquido (piense en un ruber muy suave, látex). Significa que las propiedades dinámicas que se aplican a esa cantidad de objetos son muy complejas y dependen de la naturaleza del objeto.
- Tomemos el ejemplo de un resorte: es fácil de modelar de forma independiente (f = kx), pero crear una herramienta genérica capaz de modelar ese caso específico es una pesadilla (especialmente si piensa en casos de esquina: la extensión no es infinita, la compresión alcanza un nivel más bajo). punto, el material no es lineal ...)
- Hasta donde sé, cuando se trata de materiales "elásticos", las personas hacen su propia modelización para su propio propósito (no existe uno genérico)
ahora las respuestas:
- Probablemente no, no que yo sepa al menos.
- no fácilmente, ver previamente por qué
- A menos que tengas antecedentes de alto nivel en materiales elásticos, me temo que será doloroso
Espero que esto haya ayudado