Rozdělení binárního prostoru ( rozdělení binárního prostoru nebo BSP ) je systém používaný k rozdělení prostoru na konvexní oblasti . Tyto buňky jsou ohraničeny hyperplany ; v případě dvourozměrného (rovinného) prostoru jsou separace rovné čáry a buňky jsou čtyřúhelníky (často obdélníky ); v případě trojrozměrného prostoru jsou separacemi roviny a buňky polyhedry (často obdélníkové rovnoběžnostěny ).
Buňky jsou uspořádány v binárním stromu, který se nazývá strom BSP . Tato datová struktura usnadňuje určité operace. Je obzvláště zajímavý pro 3D vykreslování, a proto se používá ke správě grafiky určitých videoher .
Z geometrického hlediska jsou stromy BSP obecnou verzí platanů pro dělení prostoru. Mezi K -d stromy jsou speciální případy BSP stromy, v němž jsou letadla vyrovnané s osami a jejichž uzly obsahovat pouze jeden bod. BSP stromy jsou obecnější struktury, ve kterých mohou mít roviny jakoukoli orientaci - jsou to obecně roviny generované z polygonů - a jejichž uzly mohou obsahovat jakýkoli typ geometrického objektu - obecně „primitivní“ tvary (jednoduché geometrické tvary: polygony, kostky, koule , válce atd.).
První uzel stromu je prostor, obsahuje rovinu, která rozděluje prostor na dvě části. Jeho dva podřízené uzly jsou poloprostory, samy obsahují roviny, které rozdělují tyto podprostory na dva. Koncové uzly stromu již neobsahují žádné roviny a nazývají se „listy“.
„Úroveň podrobnosti“ - kde se zastavíme při konstrukci stromu, co uzly obsahují - závisí na oblasti použití. Například :
Konstrukce stromu BSP se může spolehnout na velmi odlišné techniky.
Je to velmi jednoduché, když ho chcete použít pouze jako strukturu úložiště polygonů. Fyzikální motory často používají základní BSP k ukládání statické geometrie (obvykle k -d stromy ), jejich konstrukce se provádí velmi rychle.
Stroje pro videohry používají mnohem složitější stavební systémy, protože BSP se musí shodovat se strukturou typu sektoru / portálu, aby bylo možné provádět výpočty okluze. Aby byla zajištěna co nejčistší struktura, stromy se obvykle nevytvářejí z polygonální sítě, ale pomocí blokování konvexních pevných látek, jak to dělají id Tech a Unreal Engine . Id Tech pouze přidat konvexní tělesa je Unreal Engine zavádí booleovské výkop dále optimalizovat geometrii stromů.
Jakmile je strom BSP postaven, je převeden na strukturu sektoru / portálu, strukturu, na které bude spočívat okluze. Ve stroji id Tech jsou portály generovány automaticky ořezovým algoritmem , potom je okluze předpočítána v bitové masce zvané potenciálně viditelné sady . V Unreal Engine , od verze 2, je to obrácený proces: portály jsou vytvářeny ručně návrhářem a jsou přidány do geometrie stromu BSP. Okluze se vypočítává v reálném čase díky portálům.
Vzhledem k tomu, že tento proces vytváření map BSP je velmi dlouhý a jeho vývoj je nákladný, studia tvorby videoher obecně upřednostňují použití standardů id Tech nebo Unreal .
Příklad konstrukceZvažte 3D vykreslení v případě, že je pravděpodobné, že budou vidět obě strany mnohoúhelníků. Můžeme použít následující algoritmus rekurzivní konstrukce:
Můžeme tedy uspořádat polygony od nejvzdálenějšího po nejbližší k úhlu pohledu, a proto víme, v jakém pořadí nakreslit polygony, aby se zohlednily maskovací efekty.
Konkrétněji si vezměme příklad roviny (dvourozměrného prostoru), ve které jsou geometrickými objekty úsečky . Každý segment má orientaci, takže má „přední stranu“ a „zadní stranu“, které jsou definovány při vytváření segmentu.
BSP díry a HOMBSP díra nebo BSP díra je běžný problém, se kterým se můžete setkat při prohlížení grafu uloženého jako strom BSP. To se projevuje dírou v reprezentovaném objektu, která může být černá, nebo nechat ukázat, co je za ní; v tomto případě mluvíme o „ledovém paláci“ neboli HOM (pro zrcadlový sál ), ale můžeme mít HOM, aniž bychom měli díru BSP.
Některé díry BSP jsou náhodné: objevují se pouze z určitých úhlů pohledu. Jiné jsou trvalé: objekt chybí z jakéhokoli úhlu pohledu; obvykle se jedná o chybu úprav. Může také nastat účinek srážky s neviditelnou překážkou (ICH, neviditelný kolizní trup ): motor detekuje kolizi a brání hráči v pohybu vpřed, ale nezobrazí se žádný předmět.
Díra BSP se obvykle vyskytuje, když je geometrie příliš podrobná. Jeho řezání může vést k příliš malému měřítku, které generuje chyby související s aproximací čísel ( chyba zaokrouhlování ). Aby se těmto problémům předešlo, programy kodéru BSP zničí geometrii tam, kde je měřítko příliš malé, což způsobí díry ve stromu.
Aby se těmto otvorům zabránilo, musí být geometrie zjednodušena. Proto musí být podrobné části mapy vytvořeny s prvky, které nejsou součástí BSP: quadpatch , trimesh , modely a entity pro id Tech engine , terény a statické sítě pro Unreal Engine .
HOM nastane, když grafický modul nemá nic k zobrazení (což neznamená, že je v něm otvor BSP); Abychom ušetřili zdroje, motor pouze přetáhne starý obrázek a nevymaže ho, takže vidíme obrazové prvky zobrazené nad sebou, jako když jsou proti sobě dvě zrcadla, odtud název „ledový palác“. HOM se často vyskytuje u stříleček z pohledu první osoby - hledisko hráče má být v omezené oblasti. Tento předpoklad však může být porušen, pokud hráč použije režim „virtuální kamery“ (režim noclip ); zobrazená část stromu BSP je pak neúplná a obsahuje otvory BSP, které odhalují prvky starého obrázku.
Cesta stromu BSP je lineární v čase , O ( n ). Algoritmus trasy závisí na sledovaném cíli.
Vyhledání bodu je nejjednodušší operace a provádí se v malé smyčce bez nutnosti rekurzivní funkce. Vyzkoušíme, na které straně kořenové roviny je bod, potom začneme znovu na odpovídajícím dítěti a smyčkujeme, dokud nespadneme do listu, který obsahuje bod.
V případě stromu představujícího polygony, které se mají zobrazit, lze pomocí cesty stromu určit pořadí, ve kterém musí být polygony zobrazeny ( malířský algoritmus ). K tomu se používá následující algoritmus rekurzivního zobrazení:
Použijme tento algoritmus na předchozí příklad:
Uzel se prochází lineárně v čase a polygony se zobrazují v pořadí od nejvzdálenějšího k nejbližšímu (D1, B1, C1, A, D2, B2, C2, D3), jak to vyžaduje malířův algoritmus.
Ve videohrách jsou určité předměty nebo předměty pohyblivé. Konstrukce stromu BSP proto musí být provedena pokaždé, když je obraz obnoven. Je to předpočítávací krok.
Vzhledem ke složitosti vytváření stromů BSP vhodných pro herní enginy mnoho společností nevyvíjí vlastní formát map, ale používá stávající enginy, zejména standardy Unreal a id Tech ( Quake ) . Například motor Half-Life je založen na motoru Quake 1 . Současným standardem je Unreal Engine . Id Tech , kolem komunity open source , se stala standardní formát používaný BSP vývojů amatér nebo nezávislé.
Různá pozorování níže jsou proto v zásadě založena na studiu těchto dvou standardních formátů.
Toto jsou hlavní funkce stromů BSP: optimalizovat výpočty kolizí, okluzí a stínů.
Motor Doom vypočítal okluzi v reálném čase přímo v rutině zobrazení oříznutím objednaných obličejů pomocí BSP. Zemětřesení motoru a jeho deriváty precompute okluze v seznamech skupin listů, které mohou být viděny navzájem ( potenciálně viditelné sadě ) . U modernějších motorů je okluze založena na branách a bránách, BSP ztrácí svou okluzivní funkci, ale stále slouží jako skladovací struktura pro vnitřní prostředí .
U starších motorů byly výpočty kolizí založeny přímo na kartáčích (konvexních pevných látkách) použitých ke konstrukci hřídele. V Doomově motoru byly tyto kartáče postaveny samotným stromem. V novějších motorech jsou srážky založeny na fyzickém motoru, jehož kolizní mapa může být zcela nezávislá na struktuře stromu.
Vrhané stíny byly představeny v Unreal Engine nebo Doom 3 . Doom 3 používá algoritmus velmi podobný algoritmu použitému k vykreslení tváří, zcela založeném na BSP (viz Carmack's Reverse ).
BSP se používá téměř ve všech 3D hrách od Doom , Unreal , Quake a Half-Life .
Doomův motor stavěl BSP z polygonálních sektorů. Motor Quake / Half-Life staví BSP z konvexních pevných látek. Systém modelování stromů BSP používaný Unreal Engine zvaný konstruktivní objemová geometrie zavádí pojem booleovského výkopu : používají se „obrácené“ pevné látky, které zefektivňují konstrukci BSP, tento systém má tu výhodu, že snižuje riziko HOM nebo Otvor BSP (viz výše ), konstrukční chyby společné pro všechny motory.
Nejprve použitý ve dvou rozměrech pro všechny úrovně pod Doomem , BSP 2d původně neumožňoval vytvářet překrývající se kusy na ose Z (výšková osa). Jednalo se však o inherentní omezení motoru, Doom Engine , který, nyní revoluční, se nyní jeví jako extrémně omezený.
Je to s jeho variací ve 3D v motoru Quake a jeho nástupců Quake II nebo Quake III a jeho konkurentů Unreal , nebo o něco později Half-Life, které BSP dosáhne svého maximálního využití, jsou dekorace obohacené díky znásobení výkon motorů, ale také rychlost zpracování a výpočetní výkon mikroprocesorů a stále silnější vzhled grafických karet . BSP poté představoval největší část celkové architektury úrovní ve 3D. To bylo v této době, kdy se začali objevovat herci dekorací, kteří nebyli tvořeni BSP, ale jen málo z nich a namáhavé stvoření. Prefabrikované systémy umožňují vytvářet složité struktury, ukládat je nezávisle na aktuální úrovni a později je nekonečně opakovaně používat. Tyto „prefabriky“ jsou poté upřednostňovány před aktéry dekorací, ale jsou vyrobeny z BSP a mají všechny nevýhody.
Nevýhodou BSP je, že je vhodná pro architekturu s nízkým počtem polygonů (nízký polygon) , pro podrobnosti je nutné přidat prvky jiné než BSP.
V nedávných hrách (přibližně od roku 2000) má BSP tendenci být spojen s architektonickými detaily a složitými dekoracemi s lépe optimalizovanými systémy.
Nejvýraznějším příkladem je nepochybně statická síť (en) a terény Unreal Engine , které se objevily s druhou verzí enginu v roce 2002, ve hře Unreal II . Tyto objekty jsou vývojem hráčů dekorace jiných než BSP, kteří mají tendenci obsazovat většinu funkcí dříve přiřazených BSP: mobilní objekty, architektonické detaily a stále více a velké obecné tvary místností.
Id Tech 3 zaveden quadpatch (křivky) a oka jakékoliv. Systémy zavřít na Unreal své terény / staticmesh však méně optimalizována.
Důvody této náhrady jsou jednoduché: statické sítě (a jejich ekvivalenty v jiných motorech) nejsou citlivé na všechny problémy spojené s BSP: HOM, „solid phantoms“ (v rámci Half-Life ) atd. Zlepšují také rychlost úrovní načítání: lze vytvořit instanci statické sítě . To znamená, že motoru stačí načíst objekt pouze jednou a poté jej duplikovat tolikrát, kolikrát je potřeba, s příslušnými změnami, které se na něj použijí.
Na druhou stranu to nezlepšuje rychlost zobrazení: každý takto „klonovaný“ objekt musí být stále zobrazen samostatně. Snížení počtu přístupů na pevné disky však může u některých her stále zlepšit výkon.
Vnější úrovně používají velmi málo BSP a upřednostňují přizpůsobenější struktury, jako jsou výšky a osmičky .
Jelikož terénní systémy BSP vyžadují velké množství silně deformovaných BSP, které způsobují stále více problémů a chyb , byly současně se statickými sítěmi zavedeny generátory terénu , aby se vytvořily velké části s velmi vysokou geometrií optimalizované pro tyto typy vykreslení. Kombinované použití statických sítí a stále výkonnějších generátorů terénu vede k vytvoření úrovní, které někdy obsahují posměšný počet objektů BSP: v Unreal Tournament 2004 vám tyto systémy umožňují vytvářet úrovně obsahující dvě velké prázdné kostky, z nichž jedna obsahuje terén a statické sítě a druhým je Skybox . Hry jako Unreal a Half-Life používaly terén BSP, který byl velmi hranatý a obtížně optimalizovatelný.
Osvětlení povrchů BSP prošlo třemi hlavními fázemi. Prvním bylo jednoduché statické osvětlení používané v Doom a Doom II: Hell on Earth : několik definovaných úrovní osvětlení umožňuje, aby byla úroveň osvětlena téměř rovnoměrně.
Hry nové generace umožňovaly velmi živé atmosféry díky dynamickému a kontrastnímu osvětlení, jako jsou určité úrovně Unreal , Unreal Tournament , Half-Life . V Quake 3 si můžete vybrat mezi tímto dynamickým osvětlovacím systémem nebo systémem Lightmap : barevné textury aplikované průhledností na geometrii úrovně pro simulaci rozdílů ve světle. Tento proces zakazuje jakékoli dynamické světlo, ale umožňuje velmi přesné a výrazné stíny. Pod UT2003 a jeho přímým nástupcem UT2004 tvoří Lightmaps téměř veškeré osvětlení BSP. Některé dynamické osvětlovací systémy přetrvávají, ale jsou velmi nákladné z hlediska zdrojů, což nutí motor každou chvíli aktualizovat Lightmaps. Světla také nemohou vrhat stíny tak realistické a detailní jako statická světla.
Novější hry jako Doom 3 jsou vysoce optimalizované a jejich osvětlovací systémy, podrobné i dynamické, vám umožňují vrhat velmi dobře spravované stíny na BSP, ale také na herce dekorace.
Obecně se stromové struktury používají pro mnoho algoritmů. Například můžeme použít binární oddíl k nalezení nejbližších sousedů bodu nebo hledání podle rozsahu : konstrukce stromu je náročná na zdroje, ale jeho cesta je mnohem rychlejší než systematické tažení všech bodů. K -d strom je zajímavé v tomto ohledu, protože příčky algoritmy, aby bylo možné postavit zhruba vyrovnaná stromy s několika prázdných buněk a velkorozměrových / malého rozměru mobilního příznivé pro výzkum.
BSP se dlouho používalo ve videoherních enginech, jako jsou staré verze Quake nebo Unreal, protože mělo dvě výhody: třídit tváře v době, kdy 3d nebyl vykreslen GPU, a automaticky generovat Velmi jemný graf buněk a portálů, který umožňoval vypočítat okluzi k nejbližšímu polygonu.
Struktura BSP však měla nevýhodu generování mnoha chyb: „díry“, „úniky“, „zkreslení“, „ploché listy“ a špatně optimalizované stromy kvůli mnoha téměř zmateným plánům.
V moderních 3D motorech se okluze provádí objekt za objektem („chunk“ nebo „batch“), proto se používají hrubší buňky, které lze modelovat ručně (cry engine), nebo dokonce automaticky generované kostky (neskutečné 4, knihovna umbra používaná jednota a id tech 6). Poté použijeme úložné struktury odvozené od bsp (osminové a kd-stromy, založené na ortogonálních rovinách, tedy ne přibližných normálech), které mají tu výhodu, že jsou stabilní a během jejich konstrukce neprodukují chyby.
Na druhé straně BSP zůstává používán jako nástroj pro modelování k urychlení „konstruktivní geometrie těles“, konstrukce složitých těles z jednoduchých těles.