OpenGL vs física?


8

Soy muy nuevo en la programación de juegos y estoy en mi primer proyecto. He llegado a un punto en el que necesito asesoramiento experto:

Ahora para que la física del juego pueda trabajar en objetos, necesita conocer la posición de cada objeto y su orientación en el espacio 3D. Como parte de la simulación y debido a los movimientos de los objetos (cambio de posición) y los cambios de orientación (rotación).

¿Significa esto que el cálculo de rotación y traslación se realiza dos veces? ¿Uno en física y el otro se hace usando glTranslate y glRotate antes de dibujar el objeto?

OMI, esto no debería suceder. Además, calcular la traducción y la rotación en la parte de física hará que usen la CPU en lugar de la GPU, lo que afectará el rendimiento.

¿Cómo lo hacen los expertos y qué consejos da sobre una arquitectura de juego eficiente para manejar tales situaciones?

Respuestas:


17

Hay varias razones por las cuales las canalizaciones de renderizado y física tradicionalmente se han mantenido discretas. Tenga en cuenta, mientras enumero esto, que esto no se trata solo de juegos. Su pregunta toca cualquier aplicación que utilice una tecnología de renderizado 3D como OpenGL, sus competidores o sus precursores.

  • No todas las aplicaciones que usan 3D necesitan física. Recuerde que OpenGL no fue creado solo para juegos, su uso cubre todo, desde simulaciones médicas hasta modelar estadísticas de ventas, simulaciones de tráfico aéreo y reacciones químicas complejas, y así sucesivamente.
  • Cualquier sistema que sirve para muchos propósitos se diluye en términos de eficiencia. Una tubería gráfica tiene que ser increíblemente rápida. En el momento en que comience a introducir puntos donde esa tubería debe interactuar con otros subsistemas, como la memoria principal del sistema (donde reside su código), experimentará reducciones de eficiencia en el orden de magnitud. El hardware de su tarjeta gráfica está muy específicamente reducido y ultra optimizado para empujar píxeles , a un gran costo y muchos años de investigación altamente competitiva.

  • La naturaleza de las estructuras matemáticas y de datos que rodean las operaciones físicas (particularmente la detección y resolución de colisiones, sin las cuales realmente no hay física ) es muy diferente de las matemáticas requeridas para el renderizado.

  • Hay soluciones que se ocupan de la física en hardware. Pero a diferencia de la forma en que rendimos, la forma en que realizamos la física en cualquier situación es muy diferente. La indicación más fundamental de esto es que la física newtoniana no es de talla única; Hay otras formas de modelar matemáticamente la física que son más apropiadas en otras situaciones, como la mecánica hamiltoniana. Y en los juegos en particular, cada juego individual puede elegir modelar su física de manera diferente, ya sea en 2D o 3D. ¡Estos ni siquiera necesitan reflejar la física del mundo real! - Porque un juego es producto de la imaginación. En otras palabras, la física es, en última instancia, parte de la dinámica de su juego, y eso puede cambiar de un juego a otro, y mucho menos todas las otras soluciones a las que se aplican tecnologías como OpenGL.
  • Simular con precisión la física en un nivel de vértice por vértice no es, en su mayor parte, actualmente una opción viable. Dada la gran cantidad de poli de los modelos en la mayoría de los juegos, y la dificultad inherente de la detección de colisiones con poliedros cóncavos, no es tan simple como calcular la física a partir del modelo proporcionado. Para muchos, si no para la mayoría de los juegos en 3D, los volúmenes delimitadores en forma de cilindros o cajas se utilizan para simplificar la detección de colisión, donde incluso se requiere ese tipo de nivel de detección de colisión. Dada la tecnología actual, el nivel de procesamiento involucrado no dejaría mucho espacio para que se ejecute el resto de la lógica del juego. Incluso el PhysX de Nvidia requiere que los poliedros cóncavos complejos se descompongan en poliedros convexos más simples, para la simulación física.

  • Su tarjeta gráfica produce perspectiva con las transformaciones que realiza. Eso es diferente de las transformaciones realizadas en física, que no tienen nada que ver con la perspectiva como tal: es simplemente calcular posiciones y orientaciones básicas en su mundo. Si conoce MVC, comprenderá que existe una clara diferencia entre los datos que tiene en su aplicación y cómo presenta esos datos.

La industria de la tecnología informática está impulsada por la necesidad, y aunque la visualización es una necesidad casi universal, las simulaciones físicas no son universales como requisito o en términos de sus respectivas implementaciones.

Entonces, mi consejo es que deje de preocuparse por ir contra la corriente y comience a enfocarse en cómo hacer las dos cosas que debe hacer: renderización y física. No obtendrá los datos en la tubería de procesamiento de su tarjeta gráfica (CUDA / OpenCl son excepciones): inserta triángulos y datos de material, bombea su mundo 3D como imagen en movimiento.


Como último comentario, su pregunta no carece de sentido. El deseo de una base combinada para la física y el renderizado, y el hecho de que las matemáticas de punto flotante pueden ser mucho más lentas que el punto fijo, nos muestran por qué las tecnologías de voxel están experimentando un gran resurgimiento de interés: simplifican todo el mundo a la posición de rejilla. , poliedros convexos alineados a los ejes. Esto mejora enormemente el rendimiento, al reducir la cantidad de matemática vectorial de punto flotante necesaria para las operaciones físicas, ya que ahora está trabajando principalmente en una cuadrícula de índice entero, subdividible, instanciable espacialmente. Esta misma cuadrícula se puede usar tanto para renderizado como para física, particularmente porque puede usar diferentes resoluciones de cuadrícula para estos dos subsistemas distintos (cuando se usa una solución basada en octree como SVO).


3
El quinto punto de viñeta debe enfatizarse más: por lo general, se usa geometría de colisión separada de la geometría visual.
jhocking

Tu respuesta es muy perspicaz. Muchas gracias. He estado pensando en usar OpenCL para el código de física. Esto provocará que las operaciones de transformación de matriz de las que he estado hablando se realicen en la GPU y deberían dar un poco de aumento de rendimiento. ¿Qué opinas, es una buena idea?
M.Sameer

3
Es un placer. "Deberíamos olvidarnos de las pequeñas eficiencias, digamos alrededor del 97% del tiempo: la optimización prematura es la raíz de todo mal" -Donald Knuth. Concéntrese en su lógica y optimice como y donde lo necesite. Estás demasiado preocupado con el rendimiento en lo que supongo que es una etapa muy temprana en el desarrollo de tu juego. Es muy fácil ralentizar más las cosas cuando se comparte el procesamiento entre la CPU y la GPU como con CUDA / OpenCL. Google "CUDA lento", encontrará muchos resultados. Lo que envía a la GPU debe ser procesado con mucho cuidado. No espere estar escribiendo cada pocos milisegundos, etc.
Ingeniero
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.