Geometria obrazu
Wykład 12
Zderzenia 1. Bryły ograniczające.
2. Boundary volume hierarchy (BVH).
3. Funkcja kosztu kolizji.
4. Wykrywanie kolizji - metoda klasyczna,
- metoda stochastyczna,
- pole odleglości.
Definicja.
Bryłą ograniczającą (brzegową, bounding volume) dla zbioru obiektów S nazywamy domknięty wielościan zawierający wszystkie obiekty z danego zbioru.
Bryły ograniczające możemy definiować również dla podzbiorów zbioru S, w tym pojedynczych obiektów.
Powinny one spełniać następując wymagania:
- dobrze przybliżać aproksymowane obiekty, - być łatwe w konstrukcji,
- łatwo aktualizować się,
- pozwalać na efektywne sprawdzanie przecięć, - wymagać małej pamięci,
- łatwo łączyć się w grupy.
Najprostsze bryły ograniczające, dla których można łatwo sprawdzić przecięcie:
-kula – badamy odległość między środkami,
-prostopadłościan zorientowany zgodnie z kierunkiem osi – sprawdzamy zależności między współrzędnymi boków
-prostopadłościan dowolnie zorientowany - analizujemy przecięcia płaszczyzn wyznaczających boki prostopadłościanu.
[inst.eecs.berkeley.edu]
Przykłady brył ograniczających.
axis-aligned bounding box (AABB)
sphere
oriented
bounding box (OBB)
discrete oriented polytope
(k-DOP)
convex hull swept sphere
volume (SSV)
Przykład.
https://www.youtube.com/watch?v=aTbw71EpamY
Prostą rozdzielającą nazywamy prostą taką, że rzuty wielościanów w kierunku prostopadłym do prostej są rozłączne.
Twierdzenie (o osi rozdzielającej, Gottschalk et al. ’96).
Dwa wypukłe wielościany są rozłączne wtedy i tylko wtedy, gdy istnieje oś rozdzielająca prostopadła do ściany jednego z wielościanów lub
prostopadła do krawędzi obu wielościanów.
Dowód.
Właściwie wystarczy tylko pokazać, że dla wielościanów, które można rozdzielić, istnieje prosta rozdzielająca prostopadła do pary krawędzi z obu wielościanów.
Płaszczyznę rozdzielającą oba wielościany możemy przesunąć w stronę każdego z wielościanów aż będzie styczna do każdego z nich. Badamy płaszczyzny wyznaczone przez ściany przyległe do punktu (krawędzi) styczności. Można przyjąć, że zmiana zachodzi w sposób ciągły
(„owijamy” płaszczyznę wokół wielościanu). Niech żadna ściana
wielościanów nie wyznacza płaszczyzny rozdzielającej. Ale wzajemna orientacja przeciwległych płaszczyzn musi w pewnym momencie ulec zmianie. Wtedy dostajemy dwie równoległe płaszczyzny separujące wielościany zawierające krawędzie wielościanów. Zatem prosta
prostopadła do tych płaszczyzn jest prostą rozdzielającą i jest prostopadła do pary krawędzi obu wielościanów.
Bazując na bryłach ograniczających możemy stworzyć bounding volume hierarchy, czyli drzewiastą strukturę danych określoną na obiektach
geometrycznych w ten sposób, że
- każdemu wierzchołkowi v drzewa odpowiada bryła ograniczająca sumę obiektów wyznaczających bryły odpowiadające synom v,
- liście zawierają informacje o obiektach.
Struktura powinna mieć następujące własności:
- bryły ograniczające powinny dobrze aproksymować obiekty (jak najmniej nachodzić na siebie),
- na każdym poziomie każdy obiekt powinien należeć do co najwyżej jednej bryły pokrywającej,
- drzewo powinno być zbalansowane.
Przykład.
Trzy poziomy 18-DOP hierarchii.
[Teschner et al. „Colision Detcttion for Deformable objeects”, 2005]
Bounding volume hierarchy tworzy się zwykle jedną z dwóch metod:
- bottom-up : najpierw znajdujemy bryły ograniczające małe grupy bliskich obiektów, a następnie łączymy je w coraz większe zbiory, - top-down : znajdujmy bryłę ograniczającą cały zbiór obiektów S, a następnie dzielimy S na podzbiory (np. minimalizując sumę rozmiarów brył ograniczających odpowiadających synom danego węzła lub
minimalizując rozmiar maksymalnej bryły ograniczającej odpowiadającej synowi danego węzła).
Metoda bottom-up jest zwykle kosztowniejsza, ale uwzględnia topologię zbioru. Drugą metodę łatwiej zaprogramować wybierając odpowiedni sposób podziału zbioru.
Przykłady.
https://www.youtube.com/watch?v=06VzKfrrvpg https://www.youtube.com/watch?v=nFd9BIcpHX4 https://www.youtube.com/watch?v=0rIqrxkKY50
W przypadku zmian położenia obiektu, struktura danych musi być aktualizowana. W zależności od rodzaju ruchu lepsze są różne bryły ograniczające. Np. w przypadku sztywnych obiektów:
- dla przesunięć i obrotów: sfera, SSV, OBB, - tylko dla przesunięć: AABB, DOP.
Wtedy bryły ograniczające dla obiektów nie ulegają dużej zmianie.
Zmieniają się bryły odpowiadające węzłom na ścieżce od analizowanego liścia do korzenia.
Podobnie jest w przypadku obiektów miękkich, z tym, że trzeba tu również zmienić postać liścia. Operacje te nie są zbyt trudne np. w
przypadku DOP, gdzie bryła ograniczająca odpowiadająca węzłowi jest
„sumą” brył odpowiadających synom tego węzła (ściany sumy wyznaczane są przez ściany brył składowych) .
Funkcja kosztu kolizji.
Funkcję kosztu kolizji definiujemy w następujący sposób (Weghorst, Gottschalk, Klosowski) :
T = NuCu + NvCv + NpCp, gdzie Nu - liczba aktualizowanych brył ograniczających,
Cu - oszacowanie kosztu aktualizacji bryły ograniczającej, Nv - liczba przecinających się brył ograniczających,
Cv - oszacowanie kosztu sprawdzenia, czy bryły ograniczające przecinają się,
Np - liczba par sprawdzanych obiektów,
Cp - oszacowanie kosztu sprawdzenia oddziaływania pary obiektów.
Niestety optymalizacja tej funkcji zależy zwykle od specyficznych własności problemu, a zmniejszenie jednego ze współczynników zazwyczaj zwiększa pozostałe.
Wykrywanie kolizji.
Niech BH(C) oznacza bryłę ogranicza- jącą odpowiadającą wierzchołkowi C.
procedure traverse(A,B);
if BH(A) i BH(B) nie przecinają się then return;
if A i B są liśćmi
then zbadaj przecięcia obiektów z BH(A) z obiektami z BH(B) else for wszyscy synowie A i B do traverse(syn(A),syn(B));
Możemy to nieco usprawnić.
Aby szybko minimalizować prawdo- podobieństwo przecięcia badamy prze- cięcie mniejszej bryły ograniczającej z bryłami „synów” drugiej.
[T.Mezger, Bounded Volume Hierarchies, 2005]
Przykład.
Binarne drzewo BVH.
[T.Mezger, Bounded Volume Hierarchies, 2005]
Przykład.
Czwórkowe drzewo BVH.
[T.Mezger, Bounded Volume Hierarchies, 2005]
Zalety i wady drzewa o większym stopniu:
- mniejsza głębokość rekursji,
- mniejsza liczba wierzchołków implikuje mniejsze Nu,
- szybsza analiza niż w drzewie binarnym, gdy Cv jest małe (np. dla k- DOP),
- większe Nv, gdy liście nie kolidują a ich przodkowie tak.
Przykład.
https://www.youtube.com/watch?v=UNdHaahy8P0
Podejście stochastyczne.
Zdefiniujmy prawdopodobieństwo przecięcia się dwóch brył ograniczających w następujący sposób:
P(Ai,Bj) = (Vol (Ai) + Vol (Bj) )/(Vol(A) + Vol(B)),
gdzie A i B są przecinającymi się przodkami Ai i Bj (w przeciwnym przypadku P(Ai,Bj) = 0).
Poszukując najbardziej prawdopodobnych miejsc kolizji będziemy wybierać w drzewie BVH ścieżki o największym
prawdopodobieństwie sukcesu.
Niech q oznacza kolejkę priorytetową par węzłów uporządkowaną względem prawdopodobieństwa przecięć odpowiednich brył ograniczających.
Algorytm.
procedure traverse(A, B);
while q nie jest pusta do begin
A, B q.pop;
for wszyscy synowie A i B do
if P(Ai,Bj) jest dostatecznie duże then return „kolizja”
else if P(Ai,Bj) > 0
then q.insert((Ai,Bj) , P(Ai,Bj));
end;
Metoda elastycznych powierzchni.
Badamy mniej zależności między obszarami, które są względnie daleko i zwiększamy liczbę punktów kontrolnych w miarę zbliżania się
obiektów.
[Teschner et al. „Colision Detcttion for Deformable objects”, 2005]
Pole odległości.
Definiujemy funkcję D: R3 R w następujący sposób:
D(p) = sign(p)dist(p),
Gdzie dist( ) oznacza odległość do najbliższego punktu powierzchni, a sign( ) przyjmuje wartość ujemną wewnątrz obiektu.
Pole odległości określamy z pomocą drzew ósemkowych, BSP lub np.
diagramów Voronoi, dzieląc przestrzeń na obszary, w których będzie obliczana funkcja odległości.
Chcąc wykryć kolizję badamy pary obiektów i analizujemy ich położenie względem pól odległości.
Możemy też określać pola odległości względem konkretnych obiektów.
Przykłady.
https://www.youtube.com/watch?v=-yxF7r9hxPg
[Teschner et al. „Colision Detcttion for Deformable objeects”, 2005]
Podział przestrzeni z pomocą drzew czwórkowych.
Przestrzeń, w której badamy zderzenia możemy podzielić na obszary w zależności od liczby znajdujących się w nich obiektów - im więcej
obiektów, tym podział jest gęstszy.
Wtedy możemy ograniczyć się jedynie do badania przecięć obiektów należących do tego samego obszaru.
Przykład.
https://www.youtube.com/watch?v=fuexOsLOfl0