Kiedy używać partycjonowania binarnego, Quadtree, Octree?

Ostatnio dowiedziałem się o binarnych partycjonowaniu drzew przestrzeni i ich zastosowaniu do grafiki 3d i wykrywania kolizji. Przejrzałem również krótko materiały dotyczące czworokątów i ośmiornic. Kiedy używać quadtrees nad drzewami bsp, czy odwrotnie? Czy są wymienne? Byłbym zadowolony, gdybym miał wystarczająco dużo informacji, aby wypełnić tabelę taką jak Ta:

            | BSP | Quadtree | Octree
------------+----------------+-------
Situation A |  X  |          |
Situation B |     |     X    |
Situation C |     |          |   X
Czym są A, B I C?
Author: VividD, 2008-09-19

7 answers

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

Coś o czym warto pamiętać:

Quadtrees działają najlepiej dla danych, które są w większości dwuwymiarowe, jak renderowanie map w systemach nawigacyjnych. W tym przypadku jest szybszy niż oktrees, ponieważ lepiej dostosowuje się do geometrii i utrzymuje małe struktury węzłów.

Oktrees i Bvhs (Bounding Volume hierarchy) korzystają, jeśli dane są trójwymiarowe. Działa również bardzo dobrze, jeśli twój byty geometryczne są grupowane w przestrzeni 3D. (zobacz Octree vs BVH )

Zaletą Oc - I Quadtrees jest to, że możesz przestać generować drzewa w dowolnym momencie. Jeśli chcesz renderować grafikę za pomocą akceleratora graficznego, pozwala on po prostu generować drzewa na poziomie obiektów i wysyłać każdy obiekt w jednym wywołaniu rysowania do interfejsu graficznego API. To działa o wiele lepiej niż wysyłanie pojedynczych trójkątów (coś, co musisz zrobić, jeśli używasz BSP-Trees w pełni zakres).

BSP-drzewa są naprawdę szczególnym przypadkiem. Działają bardzo dobrze w 2D i 3D, ale generowanie dobrych drzewek BSP jest formą sztuki samą w sobie. BSP-drzewa mają tę wadę, że być może trzeba będzie podzielić geometrię na mniejsze kawałki. Może to zwiększyć ogólną liczbę wielokątów zestawu danych. Są ładne do renderowania, ale są znacznie lepsze do wykrywania kolizji i ray-tracingu.

Miłą właściwością BSP-drzew jest to, że rozkładają wielokąt-zupę na struktura, która może być doskonale renderowana z powrotem do przodu (i odwrotnie) z dowolnej pozycji kamery bez wykonywania rzeczywistego sortowania. Kolejność z każdego punktu widzenia jest częścią struktury danych i wykonywana podczas kompilacji BSP-Tree.

To, nawiasem mówiąc, jest powodem, dla którego były tak popularne 10 lat temu. Quake użył ich, ponieważ pozwoliło to graphic engine / software rasterizer nie używać kosztownego bufora Z.

Wszystkie wymienione drzewa są tylko rodzinami drzew. Są luźne oktrees, KD-drzewa hybrydowe-drzewa i wiele innych pokrewnych struktur, jak również.

 60
Author: Nils Pipenbrinck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-22 21:46:13

Największa praktyczna różnica między drzewami BSP a innymi rodzajami drzew 3d polega na tym, że drzewa BSP mogą być bardziej optymalne, ale działają tylko na geometrii statycznej. Dzieje się tak dlatego, że drzewa BSP są zazwyczaj bardzo powolne w budowie, często trwają godziny lub dni dla typowego statycznego poziomu gry miejskiej.

Dwa główne powody, dla których drzewa BSP potrzebują więcej czasu na budowę, to (a) używają nieosiowych płaszczyzn podziału, które optymalnie znajdują się dłużej, oraz (b) dzielą geometrię na osi granice, zapewniając, że żadne obiekty nie przekraczają podzielonych płaszczyzn.

Inne typy drzew trójwymiarowych (Oktrees, Quadtrees, KD-tree, Bounding-Volume-Hierarchy) używają obwiedni wyrównanych do osi, a woluminy mogą (opcjonalnie) nakładać się na siebie, więc zawarte obiekty nie muszą być wycinane na granicach woluminów. Oba te elementy sprawiają, że drzewa są mniej optymalne niż drzewa BSP, ale są szybsze w budowie i łatwiejsze do zmiany dla obiektów dynamicznych.

Ekstrapolowanie tych czynników na sytuacje...

Outdoor areas zazwyczaj stosuje się reprezentacje terenu oparte na polu wysokości, proste mapy wysokości lub bardziej złożone techniki mapowania geo-mip, takie jak ROAM. Sama ziemia nie uczestniczy w podziale przestrzeni 3d, tylko obiekty umieszczone na ziemi.

Światy z wieloma przykładami prostszej i podobnej geometrii (Domy, Drzewa, asteroidy itp.) często używają nie-BSP-tree (np. BVH), ponieważ umieszczenie geometrii w BSP-tree oznaczałoby powielanie i dzielenie geometrii szczegółów dla każdy przypadek.

Odwrotnie, duża niestandardowa siatka statyczna bez instancjonowania, taka jak scena miejska lub złożone środowisko wewnętrzne, zwykle używa drzewa BSP w celu poprawy wydajności pracy. Fakt, że BSP-Tree dzieli geometrię na granicach węzłów jest pomocny dla wydajności renderowania, ponieważ węzły BSP mogą być używane jako wstępnie zorganizowane partie renderowania trójkątów. Drzewo BSP może być również zoptymalizowane pod kątem okluzji, unikając konieczności rysowania części drzewa BSP, które są wiadomo, że stoi za inną geometrią.

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

 11
Author: David Jeske,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-08 07:38:23

BSP jest najlepszy w środowisku miejskim.

Quadtree jest najlepszy, gdy używasz mapy wysokości dla terenu, itp.

Oktr jest najlepszy, gdy masz kępy geometrii w przestrzeni 3d, takich jak układ słoneczny.

 4
Author: TraumaPony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 09:31:41

BSP są dobrym rozwiązaniem do przyspieszania wykrywania kolizji, w zależności od używanego smaku. Są one szczególnie szybkie w testach punktowych i liniowych lub ray, nieco mniej szybkie i trochę bardziej skomplikowane dla rzeczy z głośnością.

Jeśli chodzi o ich wykorzystanie w grafice, BSP są dość przestarzałe. Ośmiornice dobrze sprawdzają się przy takich rzeczach jak ubój widoczności, podobnie jak drzewa AABB.

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 09:49:44

Nie mam dużego doświadczenia z BSP, ale mogę powiedzieć, że powinieneś iść z oktrees nad quadtrees, gdy 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, oktrees nie przyniesie ogromnych kosztów w stosunku do quadtrees i mają potencjał, aby przyspieszyć wszystko przyzwoicie. YMMV.

 0
Author: Cody Brocious,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 05:11:28

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

 0
Author: Sam Hoice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 05:29:40

BSP jest lepszy dla mniejszej, prostszej przestrzeni, z którą chcesz zrobić tylko okluzję. Jeśli chcesz wszystkie przecięcia dla danego promienia, musisz uaktualnić do quad/octree.

Co do quadtree vs. octree-ile wymiarów Ci zależy? Dwa wymiary oznaczają czworokąt, cztery ośmiokąt. Jak wspomniano, jako quadtree może pracować w trzech przestrzeni, ale jeśli chcesz, aby każdy wymiar został odpowiednio potraktowany, oktree jest drogą do zrobienia.

 0
Author: hazzen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 05:40:27