Tom's Hardware Italia
Giochi PC

Il sistema di collisioni

Pagina 2: Il sistema di collisioni
Prendiamo un oggetto qualsiasi che viene lasciato cadere: se non siamo stati abili con il nostro motore fisico esso precipita e passa attraverso il pavimento, scendendo fino al centro della Terra attratto dalla gravità e… Beh, qui la faccenda si complica un po', forse è meglio lasciar perdere, almeno per ora! Il nostro oggetto cade […]

Prendiamo un oggetto qualsiasi che viene lasciato cadere: se non siamo stati abili con il nostro motore fisico esso precipita e passa attraverso il pavimento, scendendo fino al centro della Terra attratto dalla gravità e… Beh, qui la faccenda si complica un po', forse è meglio lasciar perdere, almeno per ora! Il nostro oggetto cade perché ci siamo dimenticati di inserire le collisioni nel nostro mondo: nessuno ha detto al libro o al terreno che quando essi si toccano il primo deve fermarsi.

Entra in gioco il primo elemento del motore fisico di un videogioco, il sistema di collisioni. Un sistema di collisioni complesso è decisamente utopistico da realizzare in un videogioco: se per oggetti dalle forme geometriche semplici non abbiamo particolari problemi, quando andiamo a complicare la geometria aumentiamo esponenzialmente le variabili in gioco, e questo senza pensare al numero di oggetti presenti sullo schermo in ogni momento.

c00b9a10 0a52 4242 b1b3 31496a1db6c4
Vi viene in mente qualche titolo dove le collisioni sono fondamentali?

In generale anche nell'era moderna, si tende a semplificare i sistemi di collisioni il più possibile, per non sovraccaricare le CPU e non spendere risorse preziose. Un buon sistema di collisioni è in grado di essere realistico senza accuratezza. I modelli dei personaggi e degli oggetti che sono presenti in gioco, si compongono di due parti differenti: la prima mesh (questo il nome del modello 3D) è complessa dal punto di vista visivo, e serve a donare realismo all'oggetto, la seconda mesh invece è invisibile ed è quella tramite la quale vengono effettuati i calcoli fisici, la cosiddetta "bounding box", una scatola che contiene (ma a volte è anche più piccola o grande) la mesh realistica.

In questo modo i programmatori possono creare un modello complesso, senza doverci applicare troppa fisica, che appesantirebbe con moltissimi calcoli il programma. Le "bounding box" o "hit box" sono il motivo per il quale, ad esempio, in giochi come Super Mario è possibile stare in piedi in bilico sul bordo di alcune piattaforme in totale sicurezza: non è magia, stiamo semplicemente appoggiando sulla mesh invisibile che costituisce il nostro oggetto.

UFI4nDW
Un modello 3D e la sua hit-box

I sistemi di rilevamento delle collisioni possono essere divisi in due filoni principali: quello discreto e quello continuo.

Nel primo sistema di collisioni è importante prendere in considerazione i calcoli fisici e il rilevamento delle collisioni vengono effettuati una volta per frame, ovvero ogni volta che viene prodotto uno dei fotogrammi che compone la nostra animazione (il numero dei fotogrammi al secondo è detto frame-rate). Se ad esempio spariamo ad un bersaglio, e il nostro proiettile è abbastanza veloce (o il nostro oggetto abbastanza sottile) da passarci attraverso tra due frame, nonostante la nostra ottima mira, il bersaglio non sarà rilevato come colpito dal sistema.

Esistono vari modi per risolvere questo problema, dal semplice "facciamo gli oggetti abbastanza spessi perché nulla possa attraversarli nel tempo tra due frame"o la rappresentazione del proiettile come una linea lunga tutto il percorso del proiettile stesso.

crysis
Tra i motivi per cui Crysis è sempre stato una "killer application" c'è sicuramente anche il motore fisico. Ricordate le torri di barili da far esplodere?

Nel rilevamento di collisioni continuo le collisioni vengono calcolate molto più spesso: questo sistema viene solitamente utilizzato in maniera efficiente solamente in videogiochi che si limitano alle due dimensioni, dato che quando si passa dal 2D al 3D, la complessità del problema aumenta notevolmente, così come lo fa quando passiamo dalle già citate "forme semplici" a quelle più complesse. Non è un caso che i sistemi di collisione discreti (quelli che lavorano frame per frame) siano meno efficienti in termini di realismo quando trattano corpi morbidi e non rigidi. Se con questo metodo troviamo un sistema molto complesso, che permette di avere informazioni precise sul comportamento e le relazioni tra i corpi, l'altro metodo è meno dispendioso in termini di risorse, ma ovviamente non perfetto.

Quando parliamo di videogiochi ci troviamo in ambienti che utilizzano processori assolutamente non adatti a simulare situazioni realistiche, ed è quindi saggio procedere utilizzando sistemi di collisione discreti, sfruttando quelli continui solo qualora siano assolutamente necessari. Passeremo ora a parlare proprio della differenza tra corpo rigido e corpo morbido, meglio conosciuti come rigid and soft body.


Tom's Consiglia

Se vi interessa l'argomento, "Sei pezzi facili" di Richard Feynman è sicuramente una lettura consigliata.