Conectando simulaciones físicas con diferentes sistemas de coordenadas


9

Quiero que los objetos se muevan entre dos simulaciones físicas a través de una "ventana" y colisionen con los de ambas simulaciones en caso de que se crucen con el plano de la ventana.

Los sistemas de coordenadas de las simulaciones no tienen el mismo origen y pueden tener una orientación diferente. Ajustar una simulación a sí mismo no es necesario, pero sería una ventaja.

¿Cómo conecto los sistemas de manera eficiente sin clonar los objetos individuales?

Editar:

Los cálculos deben ser lo más precisos posible, para que los objetos no se atasquen si cruzan la ventana al mismo tiempo desde lados opuestos.


La primera pregunta sería si la simulación física es precisa en la ventana. Debido a que los cambios de orientación hacen que un barrido adecuado sea bastante imposible. Es como portales de cambio de escala: un mundo de posibles dolores. Segunda pregunta: ¿Orientación diferente, como en arbitrario, o al menos en ángulos de 90 grados, solo un cambio de eje?
Kaj

Ahora, esto parece un problema que tuvieron que abordar en Portal. Si no recuerdo mal, mencionan estos problemas y cómo los resolvieron en algunos comentarios del juego. Probablemente pueda encontrarlos en línea en alguna parte.
Nailer

@Kaj Creo que sería mejor dividir la ruta de cálculo para transiciones arbitrarias y en ángulo recto. De esta manera, los ángulos rectos podrían tener una mayor precisión y velocidad, mientras que otros ángulos también serían posibles.
Tamschi

@Nailer Si no recuerdo mal, crearon un nuevo entorno de física mientras se abría el portal y luego clonaron todos los objetos de física que se acercaron a esta simulación adicional. Dijeron que de alguna manera restringieron los objetos, pero lo más probable es que solo estén transformando las fuerzas y coloquen cada paso físico. Estoy seguro de que crean un tercer clon en el destino debido a la forma en que se mueve el jugador. simulado en Fuente.
Tamschi

Respuestas:


2

Existe un proyecto genial llamado Pseudoform, anteriormente conocido como 'Portalizado', que maneja las simulaciones físicas usando portales de una manera genial:

Seudoformo

¡Echale un vistazo!

Especialmente los videos, es asombrosamente genial.

Es de código abierto, así que puedes ver cómo lo hacen.

Apuesto a que eso es lo que quieres. :)


2
Acabo de leer el código: la forma en que lo hacen es casi como la solución de Valve, pero sin el entorno físico adicional. Los portales en el motor Portalizado crean un duplicado de un objeto una vez que toca la superficie del portal, luego lo eliminan una vez que ha dejado el portal por un tiempo determinado. Esta respuesta sigue siendo útil: la unión utilizada para restringir los duplicados muestra cómo se transforma el objeto en el portal.
Tamschi

0

Bien, no sé si esto funcionaría.
Basado en la información anterior, pondría disparadores en las 'ventanas' para poder detectar cuándo un objeto está saliendo de un mundo. Tome el vector de velocidad actual en el momento de la colisión. Calcule el intervalo de tiempo restante en función de dónde golpeó el gatillo y dónde terminó este cuadro (fuera del mundo, su mundo necesitaría un borde virtual para permitir esto). En este punto, conoce la velocidad y el intervalo de tiempo que quedan, por lo que puede reposicionarlo en el borde del mundo al que está a punto de ingresar y reproyectar la velocidad. Sin embargo, esto requeriría dos actualizaciones físicas en un marco, y habría un límite de un objeto yendo de a a b mientras que otro va de b a a en la misma posición, no se detectaría ninguna colisión.
Un poco incompleto


Esta parece ser la forma más rápida posible, pero hay un problema si dos objetos cruzan la ventana desde el mismo lado: si el primer objeto se atasca en la mitad del borde, el segundo no chocaría hasta llegar al borde, también, y aparece dentro del primero en el destino.
Tamschi

Edité ligeramente mientras escribía eso, y ese fue de hecho el problema que agregué: o \
Kaj

Tengo que aprender a leer. Mi adición fue otro caso fronterizo. Meditará.
Kaj

No, la frontera está fuera del mundo. Entonces, el objeto uno sería disparado al mundo 2 (desde el borde del mundo 2, no en la posición de la ventana) con su propia velocidad, como lo haría el objeto b. Chocarían en el mundo 2 en la frontera correctamente ... Creo: ¿o? Sin embargo, mi propio caso fronterizo sigue vigente.
Kaj

Parece que leí mal la parte sobre el borde virtual. De todos modos, hay otro problema si un objeto se atasca. La parte en la parte posterior de la ventana de destino todavía se representará en la posición original, pero los objetos que no toquen el borde no colisionarán con él. Una forma de resolver estos problemas sería unificar las simulaciones, pero no estoy seguro de cómo hacerlo de manera eficiente.
Tamschi

0

Leí algunas informaciones sobre simulaciones físicas y encontré una posible solución. Funciona dividiendo cada paso de física en tres fases:

1. Pre-Paso:

Cada paso de física, una ventana crea cuatro transformaciones, dos para cada lado de la conexión:

  • una transformación de entrada que transforma la posición, velocidad (y posiblemente tamaño y peso) de un objeto en el sistema de coordenadas de destino y
  • Una transformación de salida que transforma las fuerzas en el sistema original del objeto.

(Las ventanas estáticas solo necesitan hacer esto una vez).

Además, los objetos en cada sistema de coordenadas se dividen en tres grupos:

Física Agrupando http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png

  1. Objetos frente a la ventana (verde).
    Un objeto también se cuenta hacia este grupo si está intersectando el plano de la ventana o es probable que lo cruce por detrás de la ventana (no se muestra).

  2. Objetos que cruzan la ventana o es probable que se crucen en este paso de física (naranja)

  3. Objetos detrás de la ventana (azul). Si un objeto vuela hacia la parte posterior de la ventana, todavía está marcado como miembro del grupo tres.

La agrupación se puede simplificar si la ventana está en el borde de la simulación.

2. Paso principal:

La física se calcula principalmente como de costumbre, con algunas excepciones:

  • Los objetos del segundo grupo nunca chocan con los del tercero y viceversa.

  • La transformación de entrada de la ventana se usa en los objetos del segundo grupo y los resultados se evalúan contra los objetos frontales e intersectantes del sistema de destino. La fuerza resultante se transforma utilizando la transformación de salida y se aplica al objeto original.

(Si se golpea un objeto durante el cálculo, ¡debe reagruparse!)

3. Post-Paso:

Si un objeto del segundo grupo ha cruzado la ventana, se mueve al sistema de destino utilizando la transformación de entrada.

Pensamientos Adicionales:

Si las transformaciones se conservan después de calcular la física, se pueden usar para acelerar el renderizado y facilitar los cálculos de IA. La agrupación podría usarse para eliminar planos de clip del proceso de renderizado.

La desventaja de esta solución es que las ventanas deben agregarse directamente al motor de física.

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.