elektronika, chemie, pokusy, hammer, lockpicking
Nadpis whitebear

elektronika, chemie, pokusy, hammer, lockpicking

Optimalizace mapy: Pokročilé způsoby 2

28. Července 2010

Showbudget
Showbudget

Zde uvedu console příkaz +showbudget (zobrazí měřidlo) a -showbudget (vypne měřidlo)
Pokud zadáte tento příkaz do console během hry v levém horním rohu obrazovky se vám zobrazí tabulka s mnoha řádky a grafem viz obrázek vlevo. Slouží k zobrazení jednotlivých součástí engine hry a ukazuje, které procesy spotřebovávají nejvíc výkonu počítače a v souvislosti s tím ukazuje graf FPS.

Díky tomuto nástroji jste schopni zjistit který proces spotřebovává nejvíce výkonu a tím pádem proč se vám hra v dané části mapy seká. Mapu následně můžete optimalizovat tak, aby daný proces méně zaneprazdňoval počítač.

Unaccounted

Měří vše co není možno zařadit do jiné kategorie. Vysokou hodnotu zde především způsobují programy, které běží v pozadí současně s hrou. (antivirus, hammer editor, ICQ, Firefox, ...) Dále může být ovlivněna nastavením fps_max, které způsobuje, že engine se zastaví, než zobrazí další frame.

World

Měří vykreslování “světa” neboli brush geometry. Vše co nejsou modely. Pokud chcete snížit tuto hodnotu použijte Func_areaportal k rozsekání mapy na menší kousky nebo můžete snížit dohled hráče a zamaskovat to mlhou (Env_fogcontroler a nastavit clipping distance). Obecně je dobré nevytvářet zbytečně více brushů než je potřeba a nevytvářet složité “exotické” tvary, které vznikají především řezáním a používáním carve.

Užitečné příkazy pro zobrazení geometrie jsou:
r_drawworld 0/1
r_drawdecals 0/1
mat_wireframe 0/1/2/3

Displacement

Ukazuje čas potřebný ke kreslení displacement. Hodnotu jde snížit nastavením menšího POWER u povrchů s displacementem nebo stejnými způsoby jakými se snižuje World rendering.

Užitečný příkaz:
r_drawdisp 0/1

Game

Měřidlo všeho ostatního kromě NPC. (pohyb hráče, trigger entity, door entity, inputs – outputs …) Hodnota se snižuje se snižováním počtu entit v mapě.

NPCs

Měření času potřebného k výpočtu umělé inteligence. Změnit tuto hodnotu lze snížením počtu NPC a lepším plánováním a umístěním například entit typu node.

Physics

Měří vše co se týče výpočtu a simulace fyziky. Vysokou hodnotu způsobuje příliš mnoho fyzikálních objektů prop_physics a brushů func_physbox, které spolu navzájem mají nějakou interakci. Snížit ji můžete zaškrtnutím políčka debris u fyzikálních objektů (koliduje pouze se světem) nebo vypnout fyziku objektu úplně. (motion disabled).

Užitečné příkazy:
physics_report_active
physics_budget

Static

Vykreslování statických modelů prop_static. Omezit jde použitím Occluder, Areaportalfade distance u jednotlivých modelů.

Užitečný příkaz:
r_drawstaticprops 0/1

Other

Ukazuje čas potřebný ke kreslení všech ostatních modelů kromě static_propdetail_prop. Takže prop_physics, prop_dynamic, weapon modely, postavy, … Na omezení této metody jde použít to samé jako pro prop_static.

Light

Čas potřebný pro kreslení světla na pohybující se modely kromě brush entit (všechny entity tvořené z objektů potažených texturou) a static_prop. Ovlivnit lze snížením počtu pohybujících se modelů.

Brush model rendering

Měří čas potřebný na kreslení entit tvořených z brushů. To jsou Func_door, Func_rotating, Func_brush, …
Engine využívá ke kreslení brush modelů stejný postup jako ke kreslení světa World rendering, ke snížení této hodnoty se tedy používají stejné postupy.

Shadow

Kreslení stínů. Ovlivnit lze vypnutím stínů u modelů, použitím occluder, areaportal k omezení počtu kreslených modelů se stíny nebo použitím entity shadow_control.

Užitečný příkaz:
r_shadows 0/1

Detail

Kreslení prop_detailspritů automaticky generovaných na některých typech displacement textury. Ke snížení této hodnoty můžete upravit displacementy tak aby nekreslili tolik spritů. Například změnou textury nebo paint alpha.

Užitečný příkaz:
r_drawdetailprops 0/1

Particle

Kreslení efektů ve hře. Například env_beam, env_fire, env_steam, sprite.
Pokud vám toto měřidlo nevyskočí jen na pár okamžiků, ale je ve vysokých hodnotách permanentně, nejspíš to způsobuje env_steam, env_smokestackenv_fire.

Užitečný příkaz:
r_drawparticles 0/1

Ropes

Kreslení lan. Ovlivňují entity move_rope, keyframe_rope.
Snížit hodnotu můžete snížením počtu lan v mapě a snížením parametrů prokreslení samotných lan.

Užitečný příkaz:
r_drawropes 0/1

Dynamic

Kreslení dynamických světel. Snížit hodnotu lze snížením počtu dynamických zdrojů světla.

Užitečný příkaz:
r_dynamic 0/1

Sound

Zvuky. Ovlivnit lze počtem zároveň přehrávaných zvuků, například zjednodušením použití entity soundscape, aby nepřehrávala příliš mnoho zvuků zároveň nebo ubráním entit ambient_generic.

Swap

Vysokou hodnotu swap buffers způsobují především materiály složité ke kreslení, k těm patří například:
Voda, především tam, kde překrývá další složitý materiál.
efekt ohně, kouře, páry (steam effect).
Sklo, nebo průhledné materiály, především pak sklo s odrazem.
Ovlivnit tuto hodnotu lze odebráním materiálů složitých ke kreslení z mapy.

Occlusion

Čas potřebný pro počítání, které objekty mají být occluderem schované a které ne. Occluder je složitá entita, proto by měla být použitá jen když dokáže skrýt dostatek modelů aby se její použití vyplatilo. Hodnota může být ovlivněna počtem použitých occluderů.

Užitečné příkazy:
r_occlusion 0/1
r_visocclusion 0/1

Tento popis jednotlivých součástí showbudget je místy zjednodušený. Pro úplné a naprosto detailní popisy všech součástí se podívejte na Valve Developer Community (v angličtině).

Ostatní články o optimalizaci:

Nodraw a Leak
Areaportal
Occluder