Collegamento di simulazioni fisiche con diversi sistemi di coordinate


9

Voglio che gli oggetti si spostino tra due simulazioni fisiche attraverso una "finestra" e si scontrino con quelli di entrambe le simulazioni nel caso in cui si intersecano con il piano della finestra.

I sistemi di coordinate delle simulazioni non hanno la stessa origine e possono avere un orientamento diverso. Il wrapping di una simulazione su se stesso non è necessario, ma sarebbe un vantaggio.

Come si collegano i sistemi in modo efficiente senza clonare i singoli oggetti?

Modificare:

I calcoli dovrebbero essere il più precisi possibile, quindi gli oggetti non si bloccano se attraversano la finestra contemporaneamente da lati opposti.


La prima domanda sarebbe: la simulazione fisica deve essere accurata attraverso la finestra? Perché i cambiamenti di orientamento rendono impossibile una corretta scansione. È un po 'come portali che cambiano scala - un mondo di possibili dolori. Seconda domanda: orientamento diverso, come in arbitrario, o almeno con angoli di 90 gradi, solo uno scambio di assi?
Kaj

Ora, questo sembra un problema che hanno dovuto affrontare nel portale. Se ricordo bene, menzionano questi problemi e come li hanno risolti in alcuni commenti di gioco. Probabilmente puoi trovarli online da qualche parte.
Nailer

@Kaj Penso che sarebbe meglio dividere il percorso di calcolo per le transizioni arbitrarie e ad angolo retto. In questo modo, quelli ad angolo retto potrebbero avere una maggiore precisione e velocità mentre sarebbero possibili anche altri angoli.
Tamschi,

@Nailer Se ricordo bene, hanno creato un nuovo ambiente fisico mentre il portale si stava aprendo e quindi clonato ogni oggetto fisico che si avvicinava a questa simulazione aggiuntiva. Hanno detto che in qualche modo hanno limitato gli oggetti, ma è molto probabile che stiano semplicemente trasformando le forze e le posizioni in ogni fase della fisica. <br> Sono abbastanza sicuro che creino un terzo clone a destinazione a causa del modo in cui il movimento del giocatore è simulato in Source.
Tamschi,

Risposte:


2

C'è questo fantastico progetto chiamato Pseudoform, precedentemente noto come "Portalized", che gestisce le simulazioni della fisica usando i portali in modo groovie:

Pseudoform

Controlla!

Soprattutto i video - è incredibilmente bello.

È open source, quindi puoi vedere come lo fanno.

Scommetto che è quello che vuoi. :)


2
Ho appena letto il codice: il modo in cui lo fanno è quasi come la soluzione di Valve, ma senza l'ambiente fisico aggiuntivo. I portali nel motore Portalized creano un duplicato di un oggetto una volta che tocca la superficie del portale, quindi lo eliminano dopo aver lasciato il portale per un certo tempo. Questa risposta è ancora alquanto utile: il giunto utilizzato per vincolare i duplicati mostra come l'oggetto viene trasformato nel portale.
Tamschi,

0

Okay - Non so se funzionerebbe.
Sulla base delle informazioni di cui sopra, metterei i trigger sulle "finestre" in modo da poter rilevare quando un oggetto esce da un mondo. Prendi il vettore di velocità corrente al momento della collisione. Calcola il timestep a sinistra in base a dove ha premuto il grilletto e dove è finito in questo frame (al di fuori del mondo, il tuo mondo avrebbe bisogno di un bordo virtuale per consentirlo). A questo punto conosci la velocità e il timestep rimanenti, quindi puoi riposizionarlo sul confine del mondo che sta per entrare e riproiettare la velocità. Ciò richiederebbe tuttavia due aggiornamenti di fisica in un fotogramma e ci sarebbe il bordo maiuscolo di un oggetto che va da a a b mentre un altro passa da b a a nella stessa posizione - non verrebbe rilevata alcuna collisione.
Kinda impreciso,


Questo sembra essere il modo più veloce possibile, ma c'è un problema se due oggetti attraversano la finestra dallo stesso lato: se il primo oggetto si blocca a metà del confine, il secondo non si scontrerebbe fino a raggiungere il confine, anche, e appaiono all'interno del primo a destinazione.
Tamschi,

Modificato leggermente mentre lo scrivevi, ed è stato proprio questo il problema che ho aggiunto: o \
Kaj

Devo imparare a leggere. La mia aggiunta è stata un altro caso limite. Mediterò.
Kaj,

No, il confine è fuori dal mondo. Quindi l'oggetto uno verrebbe sparato nel mondo 2 (dal confine del mondo 2 - non nella posizione della finestra) con la sua stessa velocità, così come l'oggetto b. Si scontrerebbero correttamente nel mondo 2 al confine .... Penso: o? Tuttavia, il mio caso di frontiera è ancora valido.
Kaj,

Sembra che ho letto male la parte sul bordo virtuale. Ad ogni modo, c'è un altro problema se un oggetto si blocca. La parte sul retro della finestra di destinazione verrà comunque renderizzata nella posizione originale, ma gli oggetti che non toccano il bordo non si scontreranno con essa. Un modo per risolvere questi problemi sarebbe quello di unificare le simulazioni, ma non sono sicuro di come si possa fare in modo efficiente.
Tamschi,

0

Ho letto alcune informazioni sulle simulazioni fisiche e ho trovato una possibile soluzione. Funziona suddividendo ogni passaggio di fisica in tre fasi:

1. Pre-passaggio:

Ad ogni passo di fisica, una finestra crea quattro trasformazioni, due per ciascun lato della connessione:

  • una trasformazione di input che trasforma la posizione, la velocità (e possibilmente la dimensione e il peso) di un oggetto nel sistema di coordinate di destinazione e
  • una trasformazione di output che trasforma le forze nel sistema originale dell'oggetto.

(Le finestre statiche devono farlo solo una volta.)

Inoltre, gli oggetti in ciascun sistema di coordinate sono divisi in tre gruppi:

Raggruppamento di fisica http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png

  1. Oggetti davanti alla finestra (verde).
    Un oggetto viene conteggiato anche in questo gruppo se interseca il piano della finestra o è probabile che lo attraversi da dietro la finestra (non mostrato).

  2. Oggetti che intersecano la finestra o che probabilmente la intersecano in questo passaggio di fisica (arancione).

  3. Oggetti dietro la finestra (blu). Se un oggetto vola verso il lato posteriore della finestra, viene comunque contrassegnato come membro del gruppo tre.

Il raggruppamento può essere semplificato se la finestra si trova sul bordo della simulazione.

2. Fase principale:

La fisica viene calcolata principalmente come al solito, con alcune eccezioni:

  • Gli oggetti del secondo gruppo non si scontrano mai con quelli del terzo e viceversa.

  • La trasformazione di input della finestra viene utilizzata sugli oggetti del secondo gruppo e i risultati vengono valutati rispetto agli oggetti frontali e intersecanti dal sistema di destinazione. La forza risultante viene trasformata utilizzando la trasformazione di output e applicata all'oggetto originale.

(Se un oggetto viene colpito durante il calcolo, deve essere raggruppato!)

3. Post-Step:

Se un oggetto del secondo gruppo ha attraversato la finestra, viene spostato nel sistema di destinazione utilizzando la trasformazione di input.

Pensieri aggiuntivi:

Se le trasformazioni vengono conservate dopo il calcolo della fisica, possono essere utilizzate per accelerare il rendering e per calcoli AI più semplici. Il raggruppamento potrebbe essere utilizzato per rimuovere i piani di clip dal processo di rendering.

L'aspetto negativo di questa soluzione è che le finestre devono essere aggiunte direttamente nel motore fisico.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.