Top Banner
Počítačové hry a animace Kolize
37

Po čítačové hry a animace

Mar 16, 2016

Download

Documents

HEi

Po čítačové hry a animace. Kolize. Detekce kolizí. Nástroj pro fyzikální systém herní logiku uživatelské rozhraní Stavební kameny Obalová tělesa testy průniku Akcelerační struktury stavba traverzace / test průniku. Middleware a vyu žití. Fyzikální systém PhysX - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Po čítačové hry a animace

Počítačové hry a animaceKolize

Page 2: Po čítačové hry a animace

Detekce kolizí Nástroj pro

– fyzikální systém– herní logiku– uživatelské rozhraní

Stavební kameny– Obalová tělesa

• testy průniku– Akcelerační struktury

• stavba• traverzace / test průniku

(2)

Page 3: Po čítačové hry a animace

Middleware a využití Fyzikální systém

– PhysX• původně Aegia novodex• SDK zadarmo• zdrojový kód a podpora za poplatek

– Havok• „zlatý standard“

– ODE• zadarmo + zdrojový kód

Sledování paprsku– OptiX– Embree

(3)

Page 4: Po čítačové hry a animace

Problém Vstup: dva 3D objekty Úkol: Chceme najít průsečíky

Objekty zadány triangulací povrchu– žádné předpoklady o topologii– A ... m trojúhelníků– B ... n trojúhelníků

Nejhorší případ: m•n

(4)

Page 5: Po čítačové hry a animace

Obtížnost Typická situace: pouze několik málo kolizí

– např. objekty jsou daleko od sebe Často stačí informace ano/ne

– tj. prázdná/neprázdná množina kolidujících trojúhelníků

Výpočty s konvexními objekty

Statická detekce– objekty nemají rychlost

Dynamická detekce– uvažuje se pohyb

(5)

Page 6: Po čítačové hry a animace

Dvě fáze Široká (Broad phase)

– konzervativní přístup– najde skupiny těles které spolu mohou kolidovat– rychle oddělí ty, které určitě nekolidují

Úzká (Narrow phase)– přesný výpočet pro dvojice objektů

(6)

Page 7: Po čítačové hry a animace

Obalová tělesa (Bounding volumes) Aproximace povrchu pomocí jednoduchých těles Příklad: obalíme objekty A, B koulemi SA a SB

– průsečík koulí je velice rychlý test– pokud SA neprotíná SB pak nekolidují ani A a B– v opačném případě A a B mohou (ale nemusí) kolidovat

Požadavky– rychlý test průnik– dobrá aproximace tj. minimum false positives– většinou kompromis

(7)

Page 8: Po čítačové hry a animace

Koule Dána středem a poloměrem Velice rychlý výpočet průsečíku Většinou ne příliš těsná Snadno se aktulizuje

– Invariantní vzhledem k rotaci

(8)

Page 9: Po čítačové hry a animace

AABB Axis Aligned Bounding Box

– osově orientovaný kvádr Obvykle o něco těsnější než koule Jednoduchý výpočet minimální AABB

(9)

Page 10: Po čítačové hry a animace

OBB Oriented Bounding Box

– obecně natočený kvádr Dobré aproximační vlastnosti Netrivialní výpočet

(10)

Page 11: Po čítačové hry a animace

k-DOP Discreet oriented polytope

– orientovaný mnohostěn Zadán množinou k/2 jednotkových vektorů d1,...,dk/2

Normály stěn pochazí z množiny d1,...,dk/2,-d1,...-dk/2

k=6: AABB k=14: zkosené vrcholy k=18: zkosené hrany k=26: zkosené vrcholy i hrany

Příklad: 14-DOP

(11)

Page 12: Po čítačové hry a animace

Přiklad k-DOPu 14-DOP ve 3D 8-DOP ve 2D

(12)

Page 13: Po čítačové hry a animace

Konvexní obálka Convex hull Nejmenší možné konvexní obalové těleso Test průniku: pomalý k-DOP: aproximace konvexní obálky

– s větším k se více blíží

(13)

Page 14: Po čítačové hry a animace

Srovnání obalových těles

(14)

Page 15: Po čítačové hry a animace

Válec nebo tažená koule Válec

– aproximace postavy– na výpočet kolize spíše nepraktický

Tažená koula neboli Capsule– dobře aproximuje válec– podstatně rychlejší na výpočet

(15)

Page 16: Po čítačové hry a animace

Akcelerační struktury Vyhledávání v logaritmickém čase Nutné nejdříve postavit a pak traverzovat Použitelné pro narrow i broad phase

Dělící objekty– Hierarchie obálek (Bounding volumes hierarchy)

Dělící prostor– Mřížka– Octree– kd-tree– BSP

(16)

Page 17: Po čítačové hry a animace

Časově kritická detekce kolizí Raději nepřesné než opožděné výsledky

– výpočetní čas detekce kolizí často kolísá– záleží na geometrické složitosti průniku

Časově kritické algoritmy: výpočet lze přerušit a algoritmus vydá co nejpřesnější odpověď

Nejrychlejší: hierarchie koulí

(17)

Page 18: Po čítačové hry a animace

Časově kritická detekce kolizí Nejdříve detekovat kolize kořenových koulí

– dvojice uložit do seznamu– vrátit řízení aplikaci– pokud je čas, tak zpřesnit

Skončí buď prerušením, nebo dosažením poslední úrovně

(18)

Page 19: Po čítačové hry a animace

Hierarchie obálek Stavba: zdola nahoru a shora dolů

Zdola nahoru (slučování)– vytvořit obalová tělesa (a odpovídající listy stromu) pro všechny

trojúhelníky– zvolit sousední uzel (nebo několik uzlů, podle řádu stromu) a

vytvořit společného rodiče– opakovat

Jaké uzly slučovat?

(19)

Page 20: Po čítačové hry a animace

Hierarchie obálek Stavba shora dolů

– vytvoř kořen a obalové těleso obsahující všechny trojúhelníky– rozděl kořen na nové uzly (děti) podle řádu stromu– opakuj pro každý nový uzel

Jak dělit uzel?

Algoritmy pro dělení nebo slučování uzlů volíme podle použití– v kolizních systéméch se často používa i např .střílení paprsků

(20)

Page 21: Po čítačové hry a animace

Mřížka Velice rychlá V konstantním čase zjistíme ve které jsme buňce

(21)

Page 22: Po čítačové hry a animace

Octree Quadtree ve 2D Dělení uzlu na 2D potomků vždy v polovině strany

(22)

Page 23: Po čítačové hry a animace

kd-tree Dělení uzlu ve vybrané ose v určeném bodě na dva

potomky

(23)

Page 24: Po čítačové hry a animace

BSP Binary space partitioning Generalizace kd-tree a octree

(24)

Page 25: Po čítačové hry a animace

Deformace objektů Možnost změny objektu v čase

– např. animované postavy Přepočítavat akcelerační strukturu je příliš pomalé Řešení např.:

– Zachovat původní strom, ale aktualizovat obalová tělesa• Refit

– Přepočítat jen některé části stromu– Pro daný objekt použít předpřipravenou hierarchii

(25)

Page 26: Po čítačové hry a animace

Dynamická detekce kolizí Statická detekce (pro každý snímek) pro rychle se pohybující se

objekty nestačí

Problém: nalézt okamžik kontaktu– pro korektní reakci na kolize je nutné najít první okamžik

Pokud uvažujeme pouze posun– vytvoříme konvexní obal tělesa v předchozím a aktuálním snímku– rozdělíme interval pokud se tělesa protínají– binární hledání se zvolenou přesností

(26)

Page 27: Po čítačové hry a animace

Pseudo-dynamická detekce kolizí Statická detekce po kratkých intervalech mezi předchozím

a aktuálním snímkem

Dvě fáze– vrátí libovolný čas T během první kolize– binární hledání v čase 0 až T pro přesný čas kontaktu

(27)

Page 28: Po čítačové hry a animace

Pseudo-dynamická detekce kolizí Problém: určit vhodný krok Δt nutné najít vhodný kompromis: malé Δt je pomalé, velké Δt

je nepřesné

Řešení: definovat maximální chybu (penetraci) ε Odvodit Δt pomocí horního odhadu rychlosti v libovolném

bodu povrchu tělesa

(28)

Page 29: Po čítačové hry a animace

(Skutečně) dynamická detekce kolizí neopíra se o statickou detekci

– nepoužíva diskretizaci, ale přímo počítá okamžik prvního doteku pohyb mezi snímky neznáme, používá se model

– nejčastěji šroubový pohyb algoritmy založené na intervalové aritmetice

– základní operace• [a, b] + [c, d] = [a + c, b + d]• [a, b] • [c, d] = [min(a•c, a•d, b•c, b•d), max(a•c, a•d, b•c, b•d) ]

– jsme si jisti, že řešení leží v intervalu

výzkumné téma

(29)

Page 30: Po čítačové hry a animace

Nástroje Obalová tělesa Akcelerační struktury Výpočty průsečíku

– Minkowski sum– Odečtení rychlosti

(30)

Page 31: Po čítačové hry a animace

Numerická robustnost Single-precision (float) je přesný do 6-9 desetinného místa

– 1500 + 4.5e-9 = 1500 Double-precision (double) je přesný do 15-17 místa Některá čísla nemají přesnou reprezentaci

– 10 / 3 v desítkové soustavě– 0.1 ve dvojkové, po zaokrouhlení v single precision je větší než 0.1– nahrazení x * 0.1f za x / 10.f není ekvivalentní

(31)

Page 32: Po čítačové hry a animace

Numerická robustnost - řešení Epsilon tolerance

– a == 0.f → abs(a) <= 1e-6– „Tlusté „ objekty

• plochy• body, čáry a úsečky = koule, válce a kapsule

Intervalová aritmetika Sdílení výpočtů

– vyhnout se počítaní stejné hodnoty jinou rovnicí

(32)

Page 33: Po čítačové hry a animace

Geometrická robustnost Vstupní data se nemusí „chovat slušně“

– Obsahují body, hrany a stěny navíc– Degenerované stěny do hrany nebo bodu– Nechtěně díry v modelu– Neplanární stěny– Nepodporovaná primitiva

Řešení– Spojování bodů– Triangulace– …

(33)

Page 34: Po čítačové hry a animace

Ladění Cyklické pole vstupů kolizního systému

– Při zapauzování je možné prohlédnout několik vteřin zpět Vizualizace kolizní geometrie Referenční algoritmus

– Ideálně co nejjednodušší Unit testy

– Okrajové podmínky

(34)

Page 35: Po čítačové hry a animace

GPU akcelerovaná fyzika Pro broad phase složitější, méně nezávislých výpočtů Pro narrow phase ideální

Fragment shadery– data v texturách

General purpose GPU– CUDA– OpenCL

Čtení dat na CPU– Klasická synchronizace je pomalá– HW podpora (occlusion queries, streamy atp.)

(35)

Page 36: Po čítačové hry a animace

Optimalizace Obey Amdahl, it's the law ...

Cache– Zarovnání na velikost cache line– Volné místo ve floating-point mantise– Volné místo v ukazateli na zarovnanou adresu

SIMD– Operace nad 128B floating-point– Standard pro GPGPU– Intrinsics na CPU

(36)

Page 37: Po čítačové hry a animace

Reference C. Ericson, Real-Time Collision Detection J. Gregory, Game Engine Architecture D. H. Eberly, Game Physics

(37)