PDA

Zobrazit normální verzi : Metody optimalizace map



Grakon2702
31-08-18, 18:53
V září minulého roku jsem napsal článek o testování optimalizace map (http://csko.cz/forum/showthread.php?59248-Testov%E1n%ED-optimalizace-map). Dozvěděli jsme se, že se mapy skládají z polygonů nazyvaných wPoly a ePoly a že čím více musí počítač těchto polygonů vykreslovat, tím více je zatížen HW počítače. Pokud je HW počítače zatěžován moc, dochází k poklesu FPS. Tato záležitost je samozřejmě individuální pro každý počítač, ovšem všeobecně je lepší na tohle brát ohled. Optimalizace map v GoldSource enginu tedy závisí na omezení počtu polygonů, které musí počítač v reálném čase vykreslovat. Na to existuje několik užitečných metod, které se nyni pokusím objasnit v tomto článku.




Jak se vlastně textury rozdělují na jednotlivé wPoly?


Ještě před ukázkou jednotlivých metod je důležité si říct, jak se vlastně textury dělí na wPoly. Má to úzkou souvislost s jednou z metod optimalizace a je lepší, když člověk ví, co vlastně dělá a proč to dělá. Každá textura, která je nalepená na stěnu brushe, je rozdělena na menší části po 240 pixelech (horizontálně i vertikálně). Toto je pevně daná hodnota definovaná kompilátorem BSP a lze ji změnit pomocí příkazu -subdivide # (defaultní hodnota je právě 240). Zvětšení tohoto čísla může zmenšit počet wPoly, nicméně při hodnotách větších než 240 se mapa ve většině případů nezkompiluje dobře a následující pokus o načtení mapy skončí spadnutím hry.

Stabilnějším řešením je zvětšení samotných pixelů pomocí nástroje Texture Application. Defaultní velikost pixelu je 1,0, což znamená, že je jeden pixel roven jedné jednotce vzdálenosti v GoldSource enginu. To znamená, že defaultně je každé wPoly velké 240 jednotek na délku a šířku. Pokud bychom nastavili velikost pixelů na 0,5, bylo by jich pořád stejně (240), ale byly by menší o polovinu, což znamená, že každé wPoly by bylo na délku i na šířku velké 120 jednotek a v konečném důsledku, by bylo na jedné stěně více wPoly.


https://i.imgur.com/JvizvVg.jpg https://i.imgur.com/FjX857F.png


Textury se dále dělí na wPoly přes brashe, které se navzájem dotýkají.


https://i.imgur.com/HRGTwDd.jpg https://i.imgur.com/D1tjh5W.gif https://i.imgur.com/Uoj6b0Y.jpg





Metody optimalizace


1. Architektura

Mapu lze optimalizovat až na konci jejího budování, je tu však jeden aspekt, který by měl každý vývojář map brát v ohled už od začátku budování mapy, a proto to dávám hned na první místo. Není nic horšího, než velké otevřené zóny s detailně propracovanými proporcemi se spousty dalších věcí (řekněme "nábytku") uvnitř. Vždycky je lepší myslet na možnost zablokování pohledu hráče do velkých zón na místech, kde ty zóny není potřeba vidět. V jedné velké místnosti to moc nejde, ale velmi dobrým příkladem je situace, kdy máte dvě velké místnosti a chcete je spojit chodbou. Jednoduchá rovná chodba je to nejhorší, co můžete udělat. Vždycky myslete na možnost udělání chodby ve tvaru "L" nebo "Z". Díky tomu zablokujete pohled hráčů z jedné místnosti do druhé a jejich počítač tak nebude muset zbytečně vykreslovat wPoly místností, které ani nepotřebují vidět. Lépe to pochopíte, když se podívate na následující obrázek ve spoileru.


https://i.imgur.com/E8Fqhzp.jpg


Malé ale důležité poznámky:

1. Nikdy neblokujte vyhled pomocí entit! Použijte solidní brush!
2. Nikdy neblokujte vyhled pomocí stěn, které v sobě mají i malé díry např. na okna či šachtu!


2. Skybox

Už vás někdy napadlo ulehčit si práci vytvořením jedné velké krychle kolem celé mapy, která by posloužila jako skybox a zároveň by vám pomohla odstranit leaky? Tak na to rychle zapomeňte! Nejen, že bude vaše mapa vykreslovat mnohem více wpoly, ale také dáte možnost hráčům se bugnout pod mapu. Vždycky si pohrejte se skyboxem tak, aby vypadal jako skybox na následujících obrázcích níže ve spoileru. Je to sice více práce, ale ta se nakonec mnohonásobně vyplatí!


https://i.imgur.com/bNTsj8m.png
https://i.imgur.com/vQb59Hy.png



3. Zvětšování textur

Jak už jsem psal před tím, textury jsou rozdělovány na jednotlivé wPoly dle jejich hodnoty scale (velikost, měřítko, stupeň, ...). Čím větší je hodnota scale, tím máme méně wPoly. Pokud má textura scale 2,0, je rozdělena každých 480 jednotek, při scale 1,0 to je 240 jednotek a při scale 0,5 to je každých 120 jednotek.

Mějte na paměti, že reálné rozlišení textury nemá žádný vliv na počet wPoly. Pokud má textura rozlišení např. 256x256, pořád bude na brushi rozdělována po 240 pixelech. V jednotkách vzdálenosti záleží na hodnotě scale. Děláte-li na mapě menší objekty (např. krabice), snažte se trefit scale s velikostí objektů tak, aby na každou stěnu objektu vyšlo pouze jedno wPoly.


https://i.imgur.com/offWljP.jpg
https://i.imgur.com/lmb2LEf.jpg



Ještě budu pokračovat.