.[ ČeskéHry.cz ].
NavMesh :: Optimalizace tri-meshe

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 20. únor 2011, 12:43:43    Předmět: NavMesh :: Optimalizace tri-meshe Odpovědět s citátem

Zdravím lidi,

provádím nějaké optimalizace navmeshů. No a klasický způsob, jak snížit počet uzlů grafu takového navmeshe je pospojovat několik trianglů do konvexních polygonů. Ale nějak nemohu vymyslet obecný postup, jak něco takového udělat.
Přikládám dva obrázky pro ty, co to nepochopili z textu:



Možná že za nějaký čas na to přijdu sám, ale proč se o takovou věc nepodělit s ostatními... Wink

Díky za pomoc...

Pozn.: Všiml jsem si pár chybiček v tom druhém obrázku...udělal jsem tam jeden nekonvexní polygon...a někde jsem mohl polygon vytvořit větší...
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 20. únor 2011, 13:47:02    Předmět: Odpovědět s citátem

Nejsem si jistý, jestli lze najít nejoptimálnější variantu, aniž bys otestoval všechny kombinace... Ale tak zkusil bych vždycky začít na jednom trojúhelníku a seskupit celé okolí do konvexního polygonu (dokud by to šlo). Následně bych přešel k dalšímu trojúhelníku. Ale to nejoptimálnější řešení nenajde... Jen najde cosi přijatelného... možná.
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
igor



Založen: 28. 07. 2007
Příspěvky: 196

PříspěvekZaslal: 20. únor 2011, 16:58:07    Předmět: Odpovědět s citátem

Trojúhelníky jsou v rovině nebo obecně v prostoru?

Prý je to NP-úplné pro obecné polygony s dírami, lepší je to pro polygony bez děr (které by z toho meshe ale měly jít vytvořit).

Zahlédl jsem nějaké papery
http://www.cs.unc.edu/~snoeyink/papers/ (ten On the time bound for convex decomposition of simple polygons)
http://cs.gmu.edu/~jmlien/research/app-cd/

Moc jsem je nestudoval, tak nevím, jestli nejsou nepoužitelné nebo nechutně složité (jak už to u paperů bývá Wink

Mě mimo soutěž napadá akorát něco docela primitivního heuristického - přiřadíš párům trojúhelníků nějaké hodnoty, podle kterých bude lepší spojovat právě je (velikost? počet sousedů? podobnost? něco s úhly? všechno dohromady?), vybereš nejlepší pár a tyto trojúhelníky spojíš (vznikne polygon, kterému opět přiřadíš hodnotu a dále počítáš). Vzniklé polygony bude do toho třeba nějak zařadit (ať už nějak rovnocenně s trojúhelníky nebo ihned se snažit co nejlepší trojúhelníky na polygon nalepit dokud bude pořád konvexní). A dál provádět dokud to bude možné nebo dokud nebude dosaženo nějaké časové/trojúhelníkové hranice. Není optimální, složitost blbá, ale předpokládám, že to je spíš pro nějaký preprocessing.

Pak třeba BSP by to dokázalo nějak rozdělit na konvexní útvary, ale kvalita zase záleží na výběru rovin/přímek a hlavně to rozsekává trojúhelníky, což by ale možná šlo nějak řešit (držet informace o rozseknutích a zkoušet zpětně spojit? To ale může selhávat, občas po rozseknutí 2 konvexní útvary nevytvoří spolu konvexní útvar, ale kdyby se tam přidal třetí, tak jo...)

No nic chytrého jsem koukám nenapsal, hlavně koukni na ty články, pokud je ještě nemáš za sebou.

Jo a ještě tohle vypadá jednoduše http://www.philvaz.com/compgeom/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 24. únor 2011, 23:28:31    Předmět: Odpovědět s citátem

Ach jo, za tento týden jsem s tím skoro vůbec nehnul. Začínám přemýšlet jestli bych raději neměl zrychlit nějakým způsobem algoritmus na předpočítání pathfindingu...
Stavající algoritmus je založen na Floyd-Warshallovi...ale když to nechám počítat při loadingu, tak na nějakých obrovských datech se to počítá příliš dlouho (N^3)...a zase se mi nechce předpočítávat tabulku mimo jádro do souboru...
No a když použiju A* za běhu, tak bude zas pomalejší generování cesty (resp. směru pohybu)...
Pořád uvažuji o zahrnutí Recast&Detour, ale stále se mi nepodařilo sehnat nějakou pořádnou dokumentaci a z těch jejich kódů se mi to luštit nechce (jednak jsem línej a jinak mám spousta další práce do školy)...

Tak já nevím...tohle mě tak dojebává...
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 28. únor 2011, 17:54:08    Předmět: Odpovědět s citátem

Já jsem věděl, že to časem dokážu... Wink

Původní mesh:


Optimalizace:


Je pravda, není to ještě úplně ideální, ale algoritmus se snaží najít co největší polygony...trochu ještě zlobí test na konvexnost (když jsou dvě sousední hrany rovnoběžné), ale to se ještě pokusím dát dohromady...

U tohoto navmeshe se snížil počet uzlů z 92 na 41, což znamená, že v tomto případě se výpočet floyda přibližně 11x zrychlí. Je jasné, že to zavisí na sestavení meshe...může se stát, že se třeba nemusí vůbec zoptimalizovat, ale takový případ snad nenastane. Wink
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna