elektronika, chemie, pokusy, hammer, lockpicking
Nadpis whitebear

elektronika, chemie, pokusy, hammer, lockpicking

Optimalizace mapy: Pokročilé způsoby

28. Července 2010

Func_areaportal
Func_areaportal

minulém článku jsme se naučili nekreslit zbytečně části mapy, které hráč nemůže spatřit. Nicméně kromě pevných částí mapy tvořených brushi s materiály, obsahuje každá složitější mapa i modely.
Vykreslování modelů tvoří další požadavky na procesor a kreslení mnoha modelů v jeden okamžik může způsobit sekání mapy. Pro omezení počtu zobrazovaných modelů v jeden okamžik se v Hammeru používají entity Func_areaportalFunc_occluder.

Func_areaportal je entita tvořená brushem z materiálu AREAPORTAL.
Func_areaportal hlídá zorné pole hráče a v části mapy za sebou nekreslí žádné modely, které by hráč nemohl ze své pozice vidět. Areaportal má také schopnost při vhodném umístění, nechat zmizet celý kus mapy včetně modelů i samotného světa tvořeného z brushů s materiálem.
Ale tato entita vyžaduje opatrnou konstrukci, protože podmínkou aby fungovala je, že od sebe hermeticky odděluje dvě části mapy.

Nejvhodnější je ji umisťovat do oken a dveří, kde je jednoduché uhlídat hermetické uzavření části levelu. Spojení se dveřmi se používá místo triggeru.
Pokud kompilátor zjistí, že existuje spojení mezi oběma polovinami, které má areaportal dělit, napíše vám během kompilace Leak. Díru pak jde vyhledat pomocí Pointfile. Při konstrukci dávejte pozor na používání Func_detail, který neblokuje visibilitu a nelze s ním uzavřít level. Func_detail může způsobovat Leak i když je tvořen na jakoby pevným objektem, protože engine ho vidí jako průhledný. Mapu naopak jde uzavřít texturou NODRAW, která se sice nekreslí (nezaměstnává tak procesor), ale je pevná a pro engine jakoby neprůhledná. (viz předchozí článek)

Samotná konstrukce spočívá ve vytvoření brushe v místě předělu a potažení všech stran brushe materiálem AREAPORTAL. Následně z tohoto objektu vytvoříme entitu Func_areaportal.

V nastavení areaportalu jde zvolit jeho jméno, počáteční chování, dveře ke kterým je připojen a verzi. Verze se nemění tu si určuje hammer sám. Pokud umístíte areaportal do dveří a udáte mu jejich jméno, tak při zavření dveří se zavře i areaportal a při otevření dveří se otevře.

Jméno se používá pokud chcete z nějakého místa areaportal ovládat. Je možné mu poslat příkazy CloseOpen.
Otevřený (Open) areaportal zobrazuje jen modely v zorném poli. Zavřený (Close) areaportal nechá celý kus mapy za ním zmizet včetně samotného světa tvořeného z objektů. Engine se tak o kreslení této části levelu nemusí starat a soustředí svou sílu na viditelnou část mapy.

Jestli vám Func_areaportal správně funguje můžete zkontrolovat příkazem:
mat_wireframe 0/1/2/3
Tento příkaz přepíná mezi způsoby zobrazení mapy a je díky němu možno pozorovat modely, které jsou v normálním zobrazení schované za stěnou.

Ostatní články o optimalizaci:

Nodraw a Leak
Occluder
Showbudget