2008-09-19 91 views
56

Niedawno dowiedziałem się o drzewach dzielących przestrzeń binarną i ich zastosowaniu do grafiki 3D i wykrywania kolizji. Krótko zapoznałem się również z materiałem dotyczącym ćwiartek i ósemek. Kiedy używałbyś ćwiartek na drzewach BSP i na odwrót? Czy są wymienne? Byłbym usatysfakcjonowany, gdybym miał wystarczającą ilość informacji do wypełnienia tabeli:Kiedy używać partycji Binary Space, Quadtree, Octree?

  | BSP | Quadtree | Octree 
------------+----------------+------- 
Situation A | X |   | 
Situation B |  |  X | 
Situation C |  |   | X 

Co to są A, B i C?

Odpowiedz

57

Nie ma jednoznacznej odpowiedzi na twoje pytanie. Wszystko zależy od tego, jak zorganizowane są Twoje dane.

Coś pamiętać:

Quadtrees działa najlepiej dla danych, które jest przeważnie dwa wymiarowe jak mapa renderowania w systemach nawigacyjnych. W tym przypadku jest szybszy niż liczba ósemkowa, ponieważ lepiej dostosowuje się do geometrii i utrzymuje małe struktury węzłów.

Oktawy i BVH (hierarchie wielkości granicznych) korzystają, jeśli dane są trójwymiarowe. Działa również bardzo dobrze, jeśli twoje obiekty geometryczne są zgrupowane w przestrzeni 3D. (patrz Octree vs BVH)

Zaletą Oc- i Quadtrees jest możliwość zaprzestania generowania drzew w dowolnym momencie. Jeśli chcesz renderować grafikę za pomocą akceleratora graficznego, możesz po prostu generować drzewa na poziomie obiektu i wysyłać każdy obiekt w jednym wywołaniu do interfejsu API grafiki. To działa lepiej niż wysyłanie pojedynczych trójkątów (coś, co musisz zrobić, jeśli używasz drzewek BSP w pełnym zakresie).

Drzewa BSP są naprawdę wyjątkowe. Działają bardzo dobrze w 2D i 3D, ale generowanie dobrych drzewek BSP jest sztuką samą w sobie. Drzewa BSP mają tę wadę, że możesz podzielić geometrię na mniejsze części. Może to zwiększyć ogólną liczbę poligonów zestawu danych. Są dobre do renderowania, ale są znacznie lepsze do wykrywania kolizji i ray-tracingu.

Miła właściwość drzew BSP polega na tym, że rozkładają one wielobokową zupę w strukturę, która może być doskonale odwzorowana z powrotem na przód (i odwrotnie) z dowolnej pozycji kamery, bez wykonywania faktycznego sortowania. Kolejność z każdego punktu widzenia jest częścią struktury danych i jest wykonywana podczas kompilacji BSP-Tree.

To, przy okazji, jest powodem, dlaczego byli tak popularni 10 lat temu. Quake ich używał, ponieważ pozwalał na to, by rasteryzer graficzny/programowy nie używał kosztownego bufora z.

Wszystkie wymienione drzewa to tylko rodziny drzew. Są też luźne ośmiokąty, drzewa hybrydowe kd-drzewa i wiele innych podobnych struktur.

+1

Dobra odpowiedź, chociaż nie jestem pewien, co rozumiesz przez "wysyłanie" obiektu do procesora graficznego zamiast pojedynczych trójkątów. Czy odnosisz się do trybu VBO i natychmiastowego? Ponieważ można to zrobić za pomocą obu podejść, które myślałem ... – Aktau

+0

@DavidJeske Ta odpowiedź ma sześć lat. Długi czas w informatyce. To mogło się teraz zmienić. –

+0

Komentarz dotyczący wolniejszego rysowania przy pomocy BSP jest nieprawidłowy. BSP zostały zaprojektowane w celu optymalizacji dużej geometrii statycznej. Były pierwotnie używane do optymalizacji okluzji w celu rasteryzacji oprogramowania i od tego czasu były również używane do wstępnego obliczania partii rysunku w celu rasteryzacji sprzętu. BSP nie są dobrym rozwiązaniem, gdy istnieje wiele instancji, ponieważ obiekty muszą być instancjami i podzielone na BSP. BSP są również szkodliwe dla obiektów dynamicznych, ponieważ są zbyt wolne do zbudowania. –

0

Nie mam dużego doświadczenia z BSP, ale mogę powiedzieć, że powinieneś użyć ośmiu punktów na quadtrees, kiedy scena, którą renderujesz, jest wysoka. Oznacza to, że wysokość jest większa niż połowa szerokości i głębokości - mała zasada. Ogólnie rzecz biorąc, liczby ósemkowe nie przynoszą ogromnych kosztów w stosunku do quadtrees i mają potencjał, by przyspieszyć sprawę. YMMV.

0

Zazwyczaj te rzeczy nie mają jednoznacznej odpowiedzi. Sugerowałbym, że A, B i C są wynikiem funkcji rozmiaru twojej przestrzeni i ilości rzeczy, które różnicujesz.

+1

Proszę wyjaśnić, czy BSP pasowałoby do dużej lub małej przestrzeni? Więcej lub mniej obiektów? – Martin

0

BSP jest lepszy w przypadku mniejszej, prostszej przestrzeni, w której można wykonywać tylko okluzję. Jeśli chcesz wszystkie skrzyżowania dla danego promienia, musisz uaktualnić do kwadratu/ósemki.

Co do quadtree vs octree - ile wymiarów dbasz o wiele? Dwa wymiary oznaczają czworokąta, cztery ósemki. Jak stwierdzono, ponieważ quadtree może działać w trzech miejscach, ale jeśli chcesz, aby każdy wymiar był poddany odpowiedniej obróbce, oktree jest drogą do zrobienia.

4

BSP jest najlepszy w środowiskach miejskich.

QuadTree jest najlepsze dla podczas korzystania z mapy wysokość dla terenu itp

Octree najlepiej jest, gdy masz kępy geometrii w przestrzeni 3D, takich jak układ słoneczny.

2

BSP to dobry sposób na przyspieszenie wykrywania kolizji, w zależności od tego, jakiego smaku używasz. Są one szczególnie szybkie w testach punktowych i liniowych lub ray, nieco mniej szybkie i nieco bardziej skomplikowane dla rzeczy o objętości.

Jeśli chodzi o ich użycie w grafice, BSP są prawie przestarzałe. Octuty sprawdzają się w takich przypadkach, jak uśpienie widoczności brutto, podobnie jak drzewa AABB.

8

Największa praktyczna różnica pomiędzy drzewami BSP i innymi rodzajami drzewek 3D polega na tym, że drzewa BSP mogą być bardziej optymalne, ale działają tylko na geometrii statycznej. Dzieje się tak, ponieważ drzewa BSP są generalnie bardzo powolne w budowie, często zajmując godziny lub dni dla typowego statycznego poziomu gry miejskiej.

Dwa główne powody, dla których drzewa BSP trwają dłużej, to (a) wykorzystują płaszczyzny podziału bez osi, które trwają dłużej, aby optymalnie znaleźć, oraz (b) dzielą geometrię na granicach osi, nie zapewniając żadnych obiektów przecinają podzielone samoloty.

Inne typy drzewek 3D (Octuty, Quadtrees, kd-tree, Hierarchia obwiedni-objętości) używają ograniczających się do osi objętości, a woluminy (opcjonalnie) mogą się nakładać, więc zawarte obiekty nie muszą być obcięte na granicach objętości. Dzięki temu drzewa są mniej optymalne niż drzewa BSP, ale szybciej się je buduje i łatwiej je zmieniać w przypadku obiektów dynamicznych.

Ekstrapolacja tych czynników w sytuacjach ... Obszary

Outdoor zazwyczaj używają wysokość pola opartych reprezentacje ziemi albo proste heightmaps lub bardziej skomplikowanych technik geo-mip-mapping jak wędrować. Sama ziemia nie uczestniczy w dzieleniu przestrzeni 3D, a jedynie obiekty umieszczone na ziemi.

Światy z dużą ilością przykładów prostszej i podobnej geometrii (domy, drzewa, asteroidy, itp.) Często wykorzystują drzewo inne niż BSP (np. BVH), ponieważ umieszczenie geometrii w drzewie BSP oznaczałoby duplikowanie i dzielenie geometrii szczegółów dla każdej instancji.

I odwrotnie, duża niestandardowa statyczna siatka bez instancji, taka jak scena miejska lub złożone środowisko wewnętrzne, zazwyczaj wykorzystuje drzewo BSP w celu poprawy wydajności środowiska wykonawczego. Fakt, że drzewo BSP dzieli geometrię na granicach węzłów, jest pomocne w renderowaniu wydajności, ponieważ węzły BSP mogą być używane jako wstępnie zorganizowane partie renderowania trójkątów. Drzewo BSP można również zoptymalizować pod kątem okluzji, unikając konieczności narysowania części drzewa BSP, o których wiadomo, że znajdują się za inną geometrią.

Zobacz także: Octree vs BVH, Bounding Volume Hierarchy Tutorial, BSP Tutorial.

+0

Link http://www.3dmuve.com/3dmblog/?p=182 wydaje się martwy :( – rjdkolb

+1

@rjdkolb Naprawiłem go w nowej lokalizacji, jeśli nadal jesteś zainteresowany. – Bart