Minule jsme si řekli něco o CSG a BSP, tentokrát se podíváme na VIS, a pak si posvítíme na RAD.
VIS
V kostce:
VIS má na starosti viditelnost (Visibility) - určit, jaká část mapy je z jistého místa vidět a jaká naopak není. Lidem s modernějšími stroji se toto zdá jako bezvýznamný výpočet, protože to s jejich 101 fps nehne. Když jsou tito lidé obdařeni ještě arogancí a sebejistotou, setkáváme se na fóru s bezmeznou do nebe volající demencí. VIS je důležitý výpočet, obzvlášť pro herní servery, které nejsou na tvůrčí demenci některých individuí připraveny, a tak dochází k lagům. Tento výpočet také hodně urychlí kompilaci RADu.
Do hloubky:
Ve většině 3D her probíhá vykreslování scény pomocí malířova algoritmu - objekty se vykreslují od těch nejvzdálenějších po ty nejbližší, a jak jsou vzdálené objekty překreslovány těmi bližšími, vzniká výsledná scéna. Problém je v tom, že se toto děje při vykreslování každého snímku, takže bychom si nemohli dovolit pokaždé postupně překreslovat celou mapu, i když nejsou některé její části v závěru vidět. Řešením tohoto problému je BSP strom s PVS - Potentially Visible Set. BSP strom nám zajistí vykreslení jen těch objektů, které jsou v hráčovo zorném poli, a díky PVS se můžeme pokusit vykreslit jen ty nezbytně nutné objekty.
Přeneseně na náš problém: VIS vytvoří PVS pro leafy z BSP stromu, který jsme získali kompilací BSP. Kompilací BSP jsme získali také soubor s portály, pomocí kterého se PVS počítá. VIS vezme každou dvojici portálů a zkontroluje, jestli existuje úsečka mezi libovolnými dvěma body z každého z portálů, která by neprotínala žádný face. Jinými slovy VIS zjišťuje, jesli jeden portál vidí druhý a jesli jim nic nepřekáží ve výhledu. Pokud pak hráč stojí uvnitř leafu, jehož portál vidí jiný portál, vykreslí se všechny facy jemu náležícímu leafu.
Parametry:
-fast |
Místo počítání viditelnosti se nastaví, že se všechny portály mezi sebou vidí - z každého místa je vidět celá mapa. |
-full |
PVS se počítá důsledněji. |
Výše zmíněné parametry jsou určené pro HLVIS. Kompletní seznam parametrů k HLVIS naleznete na stránkách zhlt.
RAD
V kostce:
RAD nám zajistí výpočet světel, lépe řečeno stínů, na naší mapě. Pro každý face se spočítají stíny podle toho, jaká světla ho dokážou osvítit.
Do hloubky:
Výpočet světel se zdá být podobný VISu, je ale o hodně složitější. Nejprve se musí celá mapa rozdělit na menší části, tzv. patche, úseky o velikosti 16x16, pro které se bude provádět výpočet. Kdybychom měli vypočítat stín pro každý bod na mapě, kompilace by trvala neuvěřitelně dlouho a nakonec by byla obrovská (256x větší velikost), takže se budeme muset smířit s rozkostičkovanými stíny.
Všechny patche se nejprve obarví na černo, takže bude všude tma. Následně se pro každý patch vytvoří paprsky z jeho středu směřující do všech světel, které se nachází v leafech, viditelných z leafu, kam patří aktuální patch. Pokud paprsek narazí do brushe, nijak patch neovlivní. Pokud se podaří paprsku dorazit až do zdroje světla, do barvy patche se aditivně přimíchá barva světla s intenzitou závislou na vzdálenosti světla. Může se tedy stát, že paprsek úspěšně dorazí do světla, to ale daný patch neovlivní, protože je moc daleko. Pokud máte v mapě skybox a light_environment, vytvoří se také paprsek pod úhlem nastaveném v light_environmentu. Když paprsek dorazí do skyboxu, do patche se přimíchá barva light_environmentu. Světlo vyzařující textury se počítají jako spousta jednoduchých světel rozmístěných po určitých intervalech (určených parametrem -texchop).
Parametry:
-ambient R G B |
Místo prvotního obarvení faců na černo se facy obarví na vámi určenou barvu (zápis formou RGB od 0 do 1). |
-bounce počet_odrazů |
S kolika odrazy světel se bude počítat. |
-extra |
Místo jednoho paprsku se použije paprsků 9, jejichž výsledky se nakonec zprůměrují. Také se automaticky -texchop zmenší na polovinu. |
-lights soubor.rad |
Vybere se soubor se seznamem světlo vyzařujících textur. |
-sparse |
Umožňuje kompilaci s komprimovaným VISem - ušetří se využitá paměť za cenu delší kompilace a většího vytížení procesoru. |
-texchop velikost |
Určuje velikost intervalu, v kterém se rozmisťují obyčejná světla jako nahrazení světlo vyzařující textury. |
Výše zmíněné parametry jsou určené pro HLRAD. Kompletní seznam parametrů k HLRAD naleznete na stránkách zhlt.
|