¿Al gráfico de escena o no al gráfico de escena?

10

He estado luchando con una decisión sobre si implementar o no un gráfico de escena en mi juego. Tengo algunos casos de uso que requieren una herramienta de este tipo, pero no he podido obtener algunos de los detalles de implementación.

Algunos antecedentes: estoy escribiendo un juego de tipo tirador espacial dirigido a plataformas móviles (Android, principalmente) y mi código es casi completamente C ++. No estoy usando ningún middleware; Los motores de renderizado y física en particular son mis propias creaciones. Mi motor de física actualiza las ubicaciones de los objetos en función de las fuerzas y los impulsos. Todavía no tengo un sistema de animación, pero puedo visitarlo en algún momento (que puede o no tener algo que ver con esta discusión).

Primero, describiré un buen caso de uso. Me gustaría tener un jefe que se compone de varias partes discretas, cada una de las cuales puede dañarse / destruirse de forma independiente. Por ejemplo, podría tener un jefe que tiene un brazo que puede recibir daño independientemente del resto de la entidad del jefe. Cuando se destruye el brazo, un efecto de partículas de fuego ubicado en el hombro del jefe podría indicar que el brazo ahora está destruido.

Tal como están las cosas, he decidido intentar resolver tales problemas con restricciones en mi motor de física para mantener juntos tales objetos compuestos. Una de estas restricciones proporciona 0 grados de libertad y es esencialmente una matriz de transformación. Esto es realmente un intento de eludir un problema que finalmente me apagó de los gráficos de escena en primer lugar, como se describe a continuación.

La razón principal por la que rechacé el uso de un gráfico de escena es porque no pude encontrar una manera eficiente de mantener los objetos anidados (objetos que heredan una transformación de sus padres) tanto en el mundo de la física como en la escena de representación. El mundo de la física necesita que los objetos estén en el espacio mundial (o al menos el mismo espacio) mientras que la escena de representación necesita objetos en el espacio primario. El seguimiento de las ubicaciones en ambos espacios puede ayudar (y ser inevitable), pero plantea sus propias preocupaciones, entre las cuales se relaciona el rendimiento.

Sin embargo, dados los casos de uso como el descrito anteriormente, creo que ser capaz de 'trabajar' en el espacio primario será muy importante, y tratar de forzar a mi motor de física a mantener estas relaciones mediante el uso de restricciones va a ser problemático.

Dado el caso de uso y la situación descrita anteriormente, ¿debería usar una estructura gráfica para pasar las transformaciones de un objeto a otro? Si es así, ¿cómo debería mi motor de física calcular nuevas ubicaciones y realizar pruebas de intersección para objetos en diferentes espacios?

notlesh
fuente

Respuestas:

11

¿Has probado un gráfico jerárquico y has medido el rendimiento?

¿Ha investigado motores de física simples para ver cómo manejan el problema, incluso un motor 2D que tiene un enlace entre objetos ayudaría a guiarlo en una dirección comprobada.

No trataría de ejecutar su física en múltiples espacios, la complejidad sería desalentadora. Ejecute la física en el espacio mundial y agregue funcionalidad para crear transformaciones de su jerarquía para mover los objetos del espacio local al espacio mundial y viceversa. Sus restricciones, necesariamente, deben estar en el espacio local en relación con el objeto padre.

Como nota al margen, incluso un conjunto puro de objetos es un "gráfico de escena", simplemente uno muy simple. No tenga miedo de organizar los datos de manera de resolver problemas y, especialmente, no decida que el desempeño de esa organización de datos es un factor sin siquiera haber medido ese desempeño.

Patrick Hughes
fuente
Traté de evitarlo no por el rendimiento sino por el tiempo. Cuando eres independiente, quedarte atrapado en algo durante un largo período de tiempo puede ser perjudicial para el progreso y la mentalidad. Miré un poco el motor Spring RTS pero no encontré lo que estaba buscando. Entonces, si pruebo un gráfico, en el motor de física necesitaré actualizar las ubicaciones de los objetos en el espacio local, luego calcular la orientación del espacio mundial y aferrarme a eso para usarlo con la detección de colisiones. Sin embargo, mencionas "y viceversa", eso requiere calcular la matriz inversa, ¿verdad? ¿Cuándo necesitaría hacer eso?
notlesh
Me habría imaginado que si el problema fuera el tiempo, usar una biblioteca de física sería más rápido, para ahorrar un montón de tiempo de depuración. Si solo estás haciendo 2D, ¿ box2d.org quizás? Sugerí el "y hacia atrás" porque es solo un inverso, como habrás adivinado. En algún momento, es probable que desee tomar algo en el espacio mundial y adjuntarlo a otro modelo, que lo necesitaría.
Patrick Hughes