In che modo i motori evitano il "blocco di fase" (più oggetti nella stessa posizione) in un motore fisico?


8

Vorrei prima spiegare Phase Lock: quando due oggetti di massa diversa da zero occupano lo stesso spazio ma hanno energia zero (nessuna velocità).

Si scontrano per sempre con vettori di risoluzione a velocità zero o restano semplicemente bloccati insieme fino a quando una forza esterna interagisce?

Nel mio motore preparato in casa, mi sono reso conto che se avessi caricato un personaggio su un albero e lo avessi spostato, avrebbero segnalato una collisione e sarebbero tornati al loro posto originale. Suppongo che potrei risolvere questo problema implementando gli impulsi in caso di collisione invece di tornare all'ultimo punto in cui mi trovavo (il mio tipo di implementazione fa schifo).

Ma mentre rendo il mio motore più robusto, sono solo curioso di sapere come la maggior parte degli altri motori fisici gestisce questo caso. Gli oggetti che iniziano nello stesso punto senza alcuna velocità di movimento si muovono l'uno dall'altro in una direzione casuale? O si siedono lì fino a quando succede qualcosa? Quale opzione è generalmente l'approccio migliore?


3
Non posso parlare con un'implementazione effettiva (quindi un commento anziché una risposta), ma nella mia esperienza i motori fisici in genere spingono lentamente i due oggetti l'uno dall'altro. Ad esempio, se due scatole si generassero sovrapposte, si allontanerebbero lentamente l'una dall'altra fino a separarsi completamente. Esattamente come questo sarebbe implementato è in considerazione.
kevintodisco,

Sì, mi rendo conto che questa è in qualche modo una domanda strana, dal momento che non sta chiedendo molto su come implementarlo, ma di più su come viene normalmente gestito. Grazie per il tuo contributo!
C0M37,

Risposte:


4

Immagino che questo tipo di finisce per essere una non risposta ...

Penso che a volte dipenda dall'implementazione e dall'approccio di base usato per il rilevamento e la risoluzione delle collisioni (che è come l'80% di un motore fisico fisico rigido, immagino). È divertente perché ho appena affrontato questo problema l'altro giorno nel mio motore fisico di casa e ho gettato un oggetto nello spazio NaN.

Ho avuto un oggetto spawn esattamente nello stesso punto di un altro oggetto ed entrambi avevano la stessa forma. In questo caso particolare il generatore di contatti ha fatto valori molto cattivi. L'ho risolto selezionando valori arbitrari per il contatto (spingi l'oggetto più piccolo / più leggero verso l'alto, in pratica). Questo è stato un caso piuttosto secco e asciutto, comunque.

Se una sedia dovesse generarsi all'interno di un tavolo, allora dipenderebbe da quali contatti venivano generati se si volavano via o si bloccavano. Nel mio caso, non sto usando un sistema basato sui vincoli (almeno non ancora), quindi l'oggetto ha la stessa probabilità di esplodere come oscillare e addormentarsi. In un sistema di penetrazione + impulso come quello che uso è abbastanza facile vedere tutto il brutto e come ne risulterà. Non ho idea di come un sistema basato su vincoli risolva questo problema o se lo rileva persino ... il vincolo mi sembra irraggiungibile senza alcun intervento e non ho idea se esiste un modo standard per quei tipi di motori.

Altri avranno sicuramente cose più intelligenti da dire ma questo è stato troppo lungo per un commento.


Apprezzo la tua risposta Mi è venuta voglia di porre questa domanda come una sorta di zattera di salvataggio che gli altri potrebbero trovare se dovessero mai essere presi nella stessa situazione.
C0M37,

Lol @PSpeed ​​qui anche ^^
SHiRKiT il

0

Questo viene gestito in due modi:

  1. Correggere la sovrapposizione tra oggetti collezionabili
  2. genera una forza "normale" che allontana gli oggetti, qualora si scontrino.

Questo funziona, tuttavia, solo se stai differenziando velocità / tempo. Non funzionerà in un gioco basato su tessere e si tradurrà in artefatti visibili, come un oggetto che scava tunnel attraverso un oggetto o che viene visibilmente espulso dall'altro oggetto.

Nel caso di giochi basati su tessere, puoi adottare un approccio predittivo, controllando dove si troverà l'oggetto se si sposta. Se il movimento provocherebbe il blocco di fase, quindi non consentire il movimento.

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.