Post on 06-Sep-2019
Bevezetés Ütközés detektálás
Elengedhetetlen a játékokban, mozi produkciós eszközökben
Nélküle kvantum hatás lép fel Az objektumok áthaladnak a többi objektumon
A valósághű megjelenítés része
Nem tisztán számítógépes grafikai algoritmus De nagyon fontos
Sok alap építőkocka áll már rendelkezésre
Térbeli adatstruktúrák
Metszés teszt
Technikák Ray-tracing használata
Nagyon egyszerű
Nem pontos
Nagyon gyors
Néha elegendő
Határoló térfogat hierarchiák Sokkal bonyolultabb
Lassabb
Pontos eredményt képes adni
Hatékony ütközés detektálás néhány száz objektumra
Általában Három fő rész
Ütközés detektálás
Ütközés meghatározás
Válasz az üközésre
Az első kettővel foglalkozunk A harmadik fizikai alapú animációt is magába foglalja
Egyszerű alkalmazásokhoz sugár használata
Határoló térfogat hierarchiák használata két bonyolult objektum ütközésekor
Mi van akkor ha néhány száz objektumunk van?
Nagyon sok objektumra Határoló térfogatok ellenőrzése mindegyik
objektumra Kis méretű halmazra jól alkalmazható
Nem okos
Tfh. n darab mozgó objektumunk van
ellenőrzés
m statikus objektum esetén további mn ellenőrzést kell elvégezni
Ki kell szűrni azokat az objektumokat, melyek ütköznek
Utána lehet más algoritmusokat használni
2
n
Ütközés detektálás sugarakkal Képzeljünk el egy kocsit, amely felfele halad egy lejtőn
Teszteljük az összes kerékhez tartozó háromszöget az út geometriájához
Bizonyos alkalmazások esetén
Közelíthetünk és még így is jó eredményt kapunk
Ötlet
A bonyolult objektumot sugarak halmazával közelítjük
Ütközés detektálás sugarakkal Mindegyik kerékhez egy sugarat helyezünk el
Számítsuk ki a legközelebbi metszéspontot, t, a sugár és az út geometriája között
Ha t = 0
A kocsi az úton van
Ha t > 0
A kocsi repül az út felett
Ha t < 0
A kocsi mélyszántást csinál az úton
t értékét használjuk az egyszerű ütközés válaszra
Ütközés detektálás sugarakkal Egyszerűsített kocsi
De az út nem az
Térbeli adat struktúra az útra nézve
Használjuk a hierarchikus határoló térfogatot vagy BSP fát például
A távolság negatív is lehet a sugár mentén
Pozitív és negatív irányba is keresni kell
A sugár mozgatása visszafele, amíg kívül esik az út geometriájának határoló térfogatán
Másik egyszerűsítés Néha a 3D-s műveletek 2D-s műveletekké alakíthatóak
Például útvesztő
Egy ember a labirintusban sétál
Közelíthető egy körrel
Ellenőrizzük a kört az útvesztő vonalaival szemben
Mozgassuk a falakat a kör sugarával arrébb
A kör középpontjának az ellenőrzése a falakkal
Ütközés detektálás sok objektumra és pontosan
Nyesés és pontos ütközés
Szimuláció – objektumok mozgása
Összetett objektumok összetett objektumok ellen Ha pontos eredmény szükséges
Hierarchikus határoló térfogat
Ha a háromszögek átfedőek
Pontos metszés kiszámítása, ha szükséges
Hierarchikus határoló térfogat (HHT) felépítésének a tisztázása
Példa hierarchikus határoló térfogat felépítésére Felosztható a háromszögek szintjén is
vágósíkhasználata
Rendezés síkokkalfigyelembevéve
háromszög középpontjait
+
Minimálisdobozok keresése
=
…stb.
Pszeudó kód HHT-HHT esetén Négy eset
Levél-levél csomópont
Belső csomómópontbelső
Belső-levél csomópont
Levél-belső csomópont
Megjegyzések a pszeukódra Befejeződik, ha megtalálja az első ütköző háromszög
pár esetén
Egyszerűen módosítható úgy, hogy folyatatódjon a bejárás és mindegyik párost egy listába rakjuk
Meglehetősen egyszerű forgatást az objektumokrabevezetni
Kompromisszumok Határoló térfogat választása
AABB, OBB, k-DOP, gömb
Általában a szűkebb határoló térfogat lassabbellenőrzés
Kevésbé szűk térfogat a végén több háromszög-háromszög ellenőrzést ad
Költségfüggvény
Ütközés detektálás sok objektumra Miért van szükség rá?
Képzeljünk el egy lejtőn leguruló több száz követ
Első szintű ütközés detektálás
A második ellenőrzést kevesebbszer szeretnénkvégrehajtani
Tételezzünk fel magas képkocka-képkocka koherenciát
Azt jelenti, hogy objektum az előző képkockához képest kicsitmozdult el.
Elfogadható
Pásztázás és nyesés algoritmus[Ming Lin] Tfh. az objektumok forgathatók és eltolhatók
Ezután megtalálhatunk egy olyan minimális kockát, amelymindegyik forgatásra tartalmazza az objektumot
Csináljunk ütközés átfedést háromszor
x, y és z tengelyre
Csak egy tengelyre vizsgáljuk
Mindegyik kocka egy intervallum erre a tengelyre nézve
si-k és ei-k határozzák meg
Ahol si < ei ; 0<=i<n
Pásztázás és nyesés Az si-k és ei-k értékek növekvő sorrendbe vannak
rendezve egy listában
Járjuk be a listát az elejétől a végéig
Amikor egy s-sel találkozik Jelöljük meg a listát aktívként egyactive_interval_list listában
Amikor egy e-vel találkozik Töröljük a listát az active_interval_list listából
Mindegyik intervallum az active_interval_list listában átfedő
Pásztázás és nyesés A rendezés drága O(n*log n)
Kihasználjuk a képkockák koherenciáját
A lista feltehetően nem változik nagyon
Újra rendezés buborék vagy beszúró rendezéssel
O(n)
Pásztázás és nyesés Az időbeli koherenciát kihasználva
Mindegyik intervallum párra egy logikai változót definiálunk
Igaz, ha átfedőek, különben hamis
Az első rendezés után inicializáljuk őket
Feltesszük, hogy az előző képkockán átfedőek voltak
Ha egy intervallum kezdőpontja helyet cserél a végponttal
A státusza az intervallumnak invertálódik
Ez fordítva is igaz
A 3 fő tengelyre nézve előállíthatjuk az átfedő intervallumok listáját
Ha mind a három átfedő, akkor az AABB is átfedő