Mapping - Optimalizácia FPS- perd0 (2011-09-02 16:49:54)   
-
Welder vám prináša článok o tom, ako svoju mapu urobiť čo najdokonalejšou, čo sa hrateľnosti týka. Bude reč o zvyšovaní FPS a vyhýbaní sa chybám pri tvorení mapy, zapríčiňujúce jeho zvyšovanie.
Jedná sa o preklad článku od člena XJ komunity, známeho pod menom Spr1n.

Príjemné čítanie tohto užitočného článku ..

Pár slov na začiatok


Dnes vám porozprávam o všetkých možných cestách (teda väčšine) ako optimalizovať vašu mapu založenú na GoldSource engine. Je dobré mať na pamäti tieto tipy pri tvorbe novej mapy alebo optimalizovaní už jestvujúceho projektu, môžu byť užitočné pri pridaní tých pár detailov, ktoré vám chýbajú k dokonalosti bez výrazných poklesoch fps.

Avšak toto nie je typický „how to“ návod. V tomto článku zdôrazním dôležité veci a vysvetlím ako fungujú. Je to na vás ako s týmito informáciami naložíte. Nevyhnutná je aspoň základná znalosť mappingu. Poskytnem aj pár užitočných link-ov.

Intro


Existuje mnoho článkov o tom ako by ste mali postaviť mapu a aké pravidlá pri tom dodržiavať: vyhnúť sa veľkým otvoreným priestorom/príliš veľa detailov... to sú všetko iba tipy a nemajú priamo nič spoločné s fps.

Ak chcete mať masívne otvorené priestranstvá, vyšperkované detaily od výmyslu sveta a možnosť rozbehnúť to hebedo na Pentium III, vašim hlavným pravidlom je udržať si dobré r_speeds (wPoly a ePoly) – najmä na frekventovaných miestach (trasa climbu v kz, „miestá stretu“ v de_ , cs_)

Spustenie mapy v móde vývojára


Najjednoduchšia metóda na zistenie r_speeds je spustiť mapu v móde vývojára.
Potrebné príkazy:
map - spustí mapu v móde vývojára
r_speeds 1 - zapne výpočty wPoly a ePoly
developer 1 - vypíše aktuálne r_speeds na obrazovku
gl_wireframe 2 – zobrazí miesta kde sa face-y rozdeľujú do polygónov

!!! hranie so zapnutým gl_wireframe 2 môže znížiť fps, hlavne žiadnu paniku

Trocha základov - čo je čo


wPoly – je počet textúrových polygónov, ktoré pre vás engine vykresľuje, alebo inak povedané – koľko ich zo svojho pohľadu v hre momentálne vidíte. Staré mašiny začnú zvyčajne strácať fps pri 600 – 800 wPoly a 1500 je nad sily väčšiny z nich. Na frekventovaných miestach by hodnoty wPoly nemali presiahnuť 800 – 1000, ak chcete dopriať zábavu aj tejto generácii PC.

ePoly – je počet modelových polygónov, ktoré pre vás engine vykresľuje. ePoly majú menší dopad na fps, čo robí rozumné používať modely na detailné objekty. Staré tehly začínajú strácať fps pri cca 10 000 ePoly.
Taktiež veľké modely (veľkosť súboru), modely s vysokým počtom polygónov a vysoký súčet wPoly + ePoly vyžadujú oveľa viac pamäte a výkonu. Vyvarujte sa kope vysoko polygónových modeloch na jednom mieste (nezabudnite: modely hráčov, decal-y, hud – to všetko je záťaž pre PC).

Polygóny (textúrové) – engine rozdeľuje (rozsekáva) face-y na časti (polygóny). Toto puzzle môžete vidieť so zapnutým gl_wireframe 2. Čím väčšie polygóny – tým menej wPoly engine vykresľuje a tým lepšie fps. Veľmi často engine rozdelí face-y aj tam kde by nemusel – a tu nastupujete vy, aby ste to napravili. Znalosť kde/kedy/ako/prečo sa textúrové polygóny delia je základ optimalizácie.

Polygóny (modelové) – face modelu, viac menej to isté ako textúrový polygón ale na modele. O vylepšovanie/optimalizáciu modelu sa nemusíte starať pokiaľ nie ste model maker a nemáte čas. A skúsenosti. A nervy.

Face – strana brush-u/modelu pokrytá textúrou

Precache limit – predstavuje počet objektov ktoré vaša mapa dokáže precache-núť, inak povedané - ako veľa solid entít (napr. func_wall), modelov, spritov a zvukov môžete použiť vo vašej mape. A tento počet je relatívne malý – 512. Samotný CS klient vyžaduje precache-núť kopu vecí, ako napríklad modely zbraní, rôzne sprity.... dokopy približne 200. Zároveň servery s AMXX pluginom pridávajú svojou troškou do kotla. (hat plugin napríklad), pri počte 300 „pridaných“ súborov (zvuky, modely, sprity) a solid entít (VHE menu > Map > Show information > SolidEntities) začnite byť naozaj opatrný. Takéto mapy sa môžu stať totálne nehrateľnými na serveroch používajúcich AMXX.

„Detail textures“ - normálne textúry pokryté špeciálnou overlay maskou vďaka ktorej získajú „detailný“ výzor, boli použité napríklad v kzblt_zigzaghop

Ako sa delia face-y


Všetky face-y s textúrou scale-ovanou na 1.0 sa delia po každých 240 units, pri scale 0.5 je to každých 120 units, nezáleží na veľkosti textúry ale na BSP kompilačnom príkaze -subdivide # (defaultne je to 240). Zvýšenie tohto čísla by mohla byť cesta ako znížiť wPoly avšak hodnoty nad 240 nepracujú vo väčšine prípadoch správne a mapa po načítaní padne.



Face-y sa taktiež rozdeľujú na miestach kde sa dotýka jeden brush druhého – teda krabice, stĺpy a ostatné veci ktoré sa dotýkajú stien alebo podlahy.







Celá mapa je taktiež rozdeľovaná po 1024 units (okrem entít). Snažte sa umiestňovať world brush-e od takýchto miest.



http://www.egir.dk/index.php?page=vhe_bsp.php

Veci ovplyvňujúce r_speeds a výkon


1. Architektúra, VIS block, sky box, leak-y

Nič nezachráni mapu pred zlými r_speeds (vysokými) a neprijateľným fps ak je totálne vyšperkovaná detailami od výmyslu sveta a má masívne otvorené priestranstvá (niečo podobné som už niekde čítal). Vždy myslite na to ako zablokovať hráčov výhľad na veľké a detailné priestory – či už samotnou architektúrou alebo visBlockermi. Pravdaže správne urobený sky box a absencia leak-ov je samozrejmosť.

Tip1: NIKDY nespravte zo sky boxu krabicu obklopujúcu celú mapu – inak nazývanú univerzálny liek na leak-y.
Tip2: NIKDY nespojte dve veľké/detailné miestnosti rovnou chodbou/tunelom. Pri prechode v tvare „L“ alebo „Z“ nemusí engine vykresľovať obidve miestnosti naraz.



Tip3: Aj malá diera/okienko robí zo steny zlý visBlocker.
Tip4: Entita nie je visBlocker, používajte world brush-e.

Správny sky box: http://img448.imageshack.us/img448/8752/sky7ln.jpg
Leafs: http://members.multimania.co.uk/EditHalfLife/tutorials/leafs.htm
Vis block & leafs: http://www.egir.dk/index.php?page=hlvis/hlvis.htm

2. Scale textúr, 240 unit-ové textúry

Ako sme už spomínali face-y sa delia podľa toho ako sme textúru nascale-ovali.
scale 2.0 – každých 480 units
scale 1.0 – každých 240 units
scale 0.5 – každých 120 units

Veľkosť textúry nehrá rolu!

Tip1: Zvýšte scale textúr pre zníženie počtu polygónov na face-y





Vysvetlenie obrázka s krabicami: Predstavme si, že silou mocou chceme krabicu s veľkosťou 256*256 ale zároveň chceme aby 1 face mal len 1 polygón. Máme pár možností.
Prvá: Použijeme textúru s veľkosťou 256*256 a scale približne 1.07. Ale prečo? Pretože ako už vieme, pri scale 1.0 sa face delí po 240 units – avšak my máme krabicu o veľkosti 256*256, to by znamenalo 4 polygóny na 1 face. Preto upravíme scale na 1.07 – to spôsobí, že sa face rozdelí každých 256,8 units – 1 polygón na 1 face. Problémom je to, že textúra „nezapadá“ - vyzerá zle.

Druhá: Toto je doporučená možnosť. Použijeme textúru s veľkosťou 240*240 opäť ju scale-neme tak aby sa face delil po 256+ units. Výhoda je v tom, že textúra oveľa lepšie sedí na face-y – vyzerá dobre!

Príklad: Predstavme si, že máme v miestnosti 13 krabíc. Každá má 5 viditeľných face-ov a 256*256 textúru – to znamená, že každý face sa rozdelí na štyri polygóny namiesto jedného. Ak to opravíme rescale-om textúr zbavíme sa 3 polygónov na jeden face. 3 polygóny na face*5 face-ov na jednu krabicu*13 krabíc = 195 polygónov. A to je dosť!

3. NULL textúra

K tomu niet čo dodať. Je to jedna z najpoužívanejších techník na zníženie wPoly. Jednoducho pokryte všetky face-y, ktoré hráč nemôže v hre priamo vidieť textúrou NULL – to odstráni nepotrebné polygóny.

4. Func_wall a ostatné entity

Ďalšia známa technika na zníženie wPoly a tiež je o nej na internete dostatok informácií.

Pár vecí, ktoré chcem dodať:
1) Prerobenie world brush-u na solid entitu (func_wall, func_illusionary atď.) zabráni deleniu face-ov pri dotyku s inými povrchmi. pic1 pic2 pic3 pic4 pic5 pic6 pic7
2) Používajte NULL textúru! Entity sú enginom spracovávané odlišne a sú viditeľné z väčšej vzdialenosti (dokonca aj poza rohy).
3) Nezoskupujte príliš veľa objektov po celej mape do jednej entity. Ak vidíte jeden objekt, engine vykresľuje aj ostatné – a to zvyšuje wPoly. Aj keď sú schované za visBlocker-y alebo sú na opačnej strane mapy. Najlepšia voľba je zoskupiť tie objekty (do jednej entity), ktoré sú viditeľné z väčšiny uhlov naraz.
4) Premyslite si či je zoskupovanie objektov, ktoré sa navzájom dotýkajú dobrý nápad. Navzájom si rozdelia face-y a pridajú wPoly. Buď vynechajte pár z nich alebo z nich vytvorte oddelené entity. pic1 pic2
5) Vyvarujte sa prerobeniu dlhých/veľkých brush-ov na entitu. Čím väčší objekt – tým väčšia vzdialenosť kam až treba objekt vykresliť.

!!! Textúry aplikované na entitu nevydávajú zvuk keď po nich prechádzate.
!!! Precache limit je naozaj nízky, nepreháňajte to s func_wall technikou.

5. 1 unit medzera

Opäť starý trik. Nechcete aby nejaký brush rozdeľoval face-y ktorých sa dotýka? Nechajte medzi ním a dotyčným face-om medzeru (1 unit). Nie je to tak dobré riešenie ako func_wall – nevyzerá to dobre a väčšinou spôsobí light bugy (otrasné tiene), avšak má svoje výhody (zvuky textúr, neráta sa do precache limitu atď.) pic1 pic2

6. VIS - full

Pri finálnej kompilácii vždy použite VIS -full, spresní výpočty a väčšinou zníži r_speeds. Nie je to nejaký extra rozdiel avšak je to viac ako doporučená možnosť. http://zhlt.info/settings-for-final-compiles.html

7. Hint brush

Na internete je kopa návodov zaoberajúcimi sa HINT brush-mi.
Pár z nich:
http://twhl.co.za/tutorial.php?id=71 http://www.egir.dk/index.php?page=vh_hint.php
http://www.countermap2.com/Tutorials/tutorial0b30.html?id=2

Len chcem dodať, že pri moderných kompilátoroch nie je HINT brush až tak užitočný. Avšak zíde sa ak potrebujete vlastné delenia face-ov. Správne použitie HINT-u môže znížiť kompilačný čas.

8. Viditeľná vzdialenosť

VHE menu > Map > Map properties > Max viewable distance

Hovorí samo za seba, „násilne“ vypustí polygóny za touto vzdialenosťou. Problém je v tom, že to vyzerá príšerne. Neviem si predstaviť rozumné použitie... možno pri hustej hmle.

9. Trik so sky textúrou

Spočíva vo výrobe world brush-a ktorý nerozdeľuje face-y ktorých sa dotýka (presne ako func_wall).

Vytvorte „krabicu“ pomocou 6 pyramíd – obrázok vám to vysvetlí. Všetky vnútorné face-y pokryte textúrou sky. Odstráňte pyramídu na strane, ktorá sa bude dotýkať iného povrchu (stena, podlaha), prípadne z nej spravte CLIP – Brush kvôli ušetreniu clipnodes). Ako vidíte na obrázku, takýto brush nerozdeľuje face-y.





10. Brush-in-brush efekt

Rozdelenia „navyše“ sa môžu vyskytnúť ak je nejaká časť jedného brush-u v druhom. Takéto rozdelenia sa môžu vytvoriť aj na druhej strane brush-u, taktiež susedné brush-e môžu byť postihnuté týmto neduhom.



11. Rafters

Všetko tu: http://www.egir.dk/index.php?page=vhe_rafter.htm
Myslite na to, že rafter-y rozdelia pár face-ov.

12. Max node size

BSP kompilačný príkaz -maxnodesize # nastaví maximálnu veľkosť VIS-Leafov, ktoré HLBSP generuje. Zníženie na 512 (z pôvodných 1024) môže obmedziť počet polygónov ktoré majú byť spracované z rôznych „neviditeľných“ oblastí. Avšak v skutočnosti to väčšinou len zvyšuje r_speeds.

13. Voda

Delenie funguje u vody (func_water a func_illusionary) trocha odlišne. Povrch vody je rozdelený jednak klasicky – defaultne každých 240 units pri scale 1.0 (môžete ovplyvniť scale-ovaním textúry) a druhé delenie prebieha každých 64 units (scale-ovaním to neovplyvníte).



Za každých okolností sa vyhnite veľkým vodným plochám – sú vykresľované z väčšej vzdialenosti – viac viditeľných polygónov. Dokonalá voda je model – menej polygónov a menej záťaže pre PC. Pravdepodobne viete že func_water je „lag maker“, nie je to kvôli polygónom, tá entita je proste úplne posr*** (vysoká záťaž pre PC).
Func_illusionary s textúrou vody (+ contents: water) je lepšia voľba... teda ak nepotrebujete vlny.

14. Modely

Modely zvyšujú počet ePoly a nerozdeľujú žiadne okolité face-y. To z nich robí výbornú voľbu pre detailné objekty. Ak sa považujete za model makera a používate veľa modelov v jednej mape mali by ste pouvažovať nad odstránením/optimalizáciou nepotrebných polygónov. Modelové polygóny sú vykresľované aj z veľkej vzdialenosti a engine spracúva každý polygón každého modelu v každom videnom leafnode (aj z druhej strany, než z ktorej sa naň pozerá hráč ), zapamätajte si to ak sa chystáte umiestniť veľa modelov na jedno miesto.

15. Sprites, hmla, dážď

Aj keď neovplyvňujú priamo r_speeds, predstavujú záťaž pre engine. Netrápil by som sa nad hmlou a dažďom (keďže hráč si ich môže vypnúť – cl_weather 0/1/2) avšak pri veľkom počte spritov na jednom mieste vám môže hra aj padnúť.

16. File sizes, „detail textures“

Veľké súbory (zvuky, modely) a „detail textures“ nemajú s r_speeds nič spoločné ale taktiež predstavujú záťaž pre PC. Pri použití detail textúr sa snažte využívať scale-ovaciu techniku kvôli zníženiu wPoly.

Záver


Ako som už spomínal – toto nie je „how to“ tutoriál. Hore uvedené informácie by nemali byť považované ako prísne pravidlá a nebudú vždy fungovať tak ako ste chceli. Existuje kopa spôsobov ako znížiť r_speeds, použite mozog a rozhodnite sa čo chcete optimalizovať a ako. Mód vývojára je výborný na hľadanie slabých miest mapy.

PS: (od prekladateľa) Veľa vecí som musel zmeniť, vypustiť alebo pridať – nie je to presný preklad!

Autori:
Spr1n – originálny článok (http://spr1n.kz-baltic.eu/mapping/FPSimprove/)
Welder (DfW) – preklad
Marqueuz – dodatočný preklad, úprava obrázkov a morálna podpora (:D)

Visit:
cs.czbf.net
kzsk.sk
xtreme-jumps.eu

Návod si môžete stiahnuť do svojho PC aj ako .doc verziu: stiahnuť
Komentáre (4) | Pridať komentár | Prečítané 2026-krát
Komentáre
#1- thieff.cze  02.09.2011 17:16:15  
-Návod je docela dobrý, je tu spousta dobrých věcí. Kdyby mě bavil mapping, tak bych se asi právě teď šel po hlavě vrhnout do tvorby nové mapy.
#2- ChiChiN  02.09.2011 21:21:28 
-ta 9. je nalej vylej, spotrebuje to 6 brushu na 1 dementnu bednu, to je celkem dost uz
fajny text, tho -
#3- marqueuz  02.09.2011 23:06:54 
-Tam ide o to, ze ked takto spravis bednu tak nerozdeli face, na ktorom je ta bedna polozena -> menej polygonov - viac fps. na obrazku pod tym je to ukazane. A pocet brushov vo vhe je neobmedzeny (aspon myslim), tak je jedno ci tu bednu spravis z 5 brushov alebo len z jednoho.
#4- spr1n  24.09.2011 00:09:32 
-well done
ShoutBox
18.11.2017 23:06:08
Všetci starnú, všetkých začína baviť niečo nové, kz časy boli parádne, som rád že som tu mohol spoznať kopu ľudí z cz/sk, dúfam že sa vám každému darí v živote aj dariť bude, buďte optimista na každom kroku chaloši -
18.10.2017 12:03:19
posílám jeden umírající release
01.10.2017 14:40:04
Ahojte -
30.09.2017 16:28:11
Klox0^ .. čas na comeback -
26.08.2017 20:44:10
csgo surf -
24.08.2017 12:56:55
Ako pozerám kz pomaly ale iste umiera, koľko tomu ešte dávate?
All rights reserved 2007-2017 © by KZSK.sk # Coded by Jakub "rEs0LuTe" Sedláček. Designed by Oldřich "jab" Selner.