|
|
Pro přidání zprávy do shoutboxu, musíte být přihlášeni.
|
|
|
|
VHLT 4. díl - Kopírujeme, co se dá
| |
| Oproti předchozím dílů seriálu, které byly vždy uceleně o jednom tématu, bude tento díl o různých možných vychytávkách, které přináší balík VHLT a které by se vám mohly hodit.
zhlt_usemodel
Jak je nám dobře známo, stařičký GoldSrc engine, na kterém csko běží, má spousty různých omezení. Některá z těchto omezení se týkají takzvaných MapModelů, neboli zjednodušeně brushových entit. Během kompilace se každý brushová entita rozdělí na mapmodel a entitu. Můžeme říct, že point entity jsou vlastně brushové entity bez mapmodelu. Jak entity vypadají po zkompilování si můžeme prohlédnout např. v BSPEditu nebo BSPVieweru. Takto je například zapsána jedna z func_wall entit:
{
"model" "*3"
"zhlt_lightflags" "2"
"rendermode" "4"
"rendercolor" "0 0 0"
"renderamt" "255"
"classname" "func_wall"
}
Může vám to připomenout natavení entity při vypnutém SmartEditu, máme zde stejné dvojice key-value, typ entity dostal vlastní klíč classname a také se objevil řádek model. Co tu ale dělá, když modely přece patří do cycler_sprite a jsou to soubory typu mdl, ne nějaká hvězdička a číslo? Tohle je právě ten mapmodel, konkrétně číslo tři. Většinou je tolik mapmodelů, co je brushových entit, takže první entita dostane model *1, druhá *2, atd.
Občas se ale může stát, že máme brushových entit hodně a to dokonce tak moc, že nám naráží na nějaké limity, ať už je to MAX_MAP_MODELS (400 nebo 512) při kompilaci, nebo pak Precache limit (512) při spouštění mapy. První zmíněný limit se váže přímo k počtu mapmodelů, do druhého limitu se započítávají navíc ještě jiné věci, které se při startu načítají, namátkou jsou to studio-modely (tzn. tentokrát opravdu ty mdl soubory, jak je známe), zvuky, sprity, ...
Takovýmto chybám buďto můžeme předejít tím, že budeme skromnější při vymýšlení mapy, nebo se vytáhneme s nějakým trikem. Můžeme například sloučit všechny func_wall s "modrou texturou" do jedné, ale to není moc pěkné, protože tím zvyšujeme wpoly. A u většiny entit ani takovýto trik nemůžeme použít, například žebříkům nebo vodě se to obzvlášť nelíbí.
Nejhezčí trik, který můžeme použít je právě zhlt_usemodel z VHLT. Jde o to, že brushová entita využije modelu cizí entity. Řekněme že máme v mapě dvě nebo více brushových entit, které jsou prakticky naklonované - jen jsme je vzali se shiftem a hodili na nové místo, neotáčeli jsme, neškálovali, nekosili, jen přesouvali. Při kompilaci by se pro každou tuto entitu vytvořil vlastní model, přestože je velice podobný, ba možná totožný. A my se proto rozhodneme, že všechny tyto entity budou využívat jeden a ten stejný model.
Jedna brushová entita se stane vzorem. Její model se zachová a bude použit ostatními. Vzor musí splňovat dvě podmínky. Musí obsahovat ORIGIN brush, stejně jako například otáčecí dveře. Tento brush určí střed entity. Dále musí být vzor pojmenovaný, takže hurá do vlastností entity a nastavíme nějaký Name.
Každá entita, která chce využívat cizí model, musí také splňovat dvě vlastnosti. Opět musí obsahovat ORIGIN brush, určující střed entity, a tento brush by měl být umístěn ve stejném místě, jako je brush ve vzoru, tzn - pokud je ve vzoru origin uprostřed entity, i v kopii dáme origin doprostřed entity. Dále musí říkat, čí cizí model chce použít, a toho dosáhneme následovně. Otevřeme vlastnosti entity, vypneme smartedit a přidáme novou dvojici, kde Key bude zhlt_usemodel a Value bude jméno vzoru.
Musíme si uvědomit, že model u kopie je jednoduše zahozen a nahrazen modelem vzoru, to znamená, že je naprosto jedno, jak je entita kopie natočená, zvětšená, zkosená, jakou má texturu, nebo jestli je to jen samotný origin brush, model bude nahrazen.
Nahrazen bude ale až v hotové mapě - všechny kopie budou stejně osvětlené.
Všechny kopie také sdílí decaly, které na nich jsou. Ať už decaly, které jsme tam umístlili my, nebo decaly ze hry - zčernalá zem od výbuchu, díry po kulkách, nebo i spray loga hráčů.
Je to určitá daň se kterou je potřeba počítat. Usemodel můžeme ale beztrestně použít u neviditelných entit - triggerů, žebříků, apod. - i u nich se vytváří mapmodel a pokud ho zkopírujeme přes tento fígl, ušetříme limity a hráč si ničeho nevšimne.
Ještě jednou z nevýhod je hláška Entity (...) has unused keyvalues v Map -> Check map for problems, která nás ale vůbec nemusí vzrušovat, protože víme, že jde právě o ten řádek s zhlt_usemodel.
zhlt_copylight
Nyní zpět k studio modelům, neboli mdl modelům, neboli ne-mapmodelům. :)
Občas vytvoříme cycler_sprite, přiřadíme mu nějaký model, vložíme do mapy, zkompilujeme a bum - model je černý jako bota, nebo naopak svtí přes celou mapu.
To je zbůsobeno tím, že modely si berou informaci o osvětlení z podlahy - podívají se pod sebe, vidí že podlaha je osvícená žlutě, tak budou taky žluté.
Jsme v situaci napravo a chceme se dostat do situace nalevo. A k tomu nám pomůže speciální textura black_HIDDEN. Najdeme ji v zhlt.wad z balíku VHLT. Tato textura je neviditelná a neblokuje světlo, ale umožňuje aby na ni světlo dopadalo. Vytvoříme si krychličku s touto texturou a vložíme ji pod náš model. Na krychličce se spočítá světlo a to použije i model, protože to je nejbližší podlaha pod ním. Abychom to dotáhli do dokonalosti, otexturujeme zbylé stěny texturou CONTENTEMPTY, což nám zajistí, že krychlička bude navíc ještě průstřelná a průchozí.
Může ale nastat případ, kdy je zdroj světla v nevhodné pozici a my nejsme schopni umístit blok s texturou black_HIDDEN tak, aby na něj dopadalo potřebné světlo a zároveň byl pod modelem. V tomto okamžiku přichází do hry vlastnost zhlt_copylight. Stejně jako u zhlt_usemodel budeme mít nějaký vzor a nějaké kopie. Vzorová entita může být jakákoli point entita, např. info_null nebo libovolná entita co je právě poblíž. Jediným požadavkem na tuto entitu je, aby byla pojmenována. U kopií vypneme smartedit a přidáme dvojici, kde Key bude zhlt_copylight a Value jméno vzoru.
Při kompilaci se pak provede následující. RAD se podívá pod vzorovou entitu, zkopíruje si informace o osvětlení a ty vloží pod všechny kopie.
Zprava doleva vidíme: vzorový model, model bez jakýchkoli úprav, model s zhlt_copylight a model, který bychom ve finále chtěli.
Důsledek zkopírování je zjevný - pod modelem vznikl nepěkný světlý bod. Tohoto světlého bodu se ale jednoduše zbavíme aplikováním předchozího postupu s blokem black_HIDDEN. Ten vložíme pod model do kterého kopírujeme světlo a tím se zbavíme i toho světlého bodu pod tím (ten se místo toho vytvořil na tom černém neviditelném bloku).
Opět vznikne hláška Map -> Check map for problems, ta nás ale zase vůbec nezajímá.
Se vším si můžete pohrát v příkladové mapě. |
|
|
|
|
Zatím nikdo nekomentoval. Buďte proto první a vložte svůj komentář.
|
|
|
Pro přidání komentáře musíte být přihlášený.
|
|
|
|
Nejnovější příspěvky (BRUT)
(Asiimovicek)
(Gyuki)
(nifty)
(Backup)
(boxolop1)
(boxolop1)
(boxolop1)
(Slivka)
(latins)
|
|
|
Hosté on-line: 28
Členové on-line: 0
Registrovaní členové: 949
Nejnovější člen: verseludes
|
|
| |