| Kompilace - co se vlastně děje, když stiskneme F9? Co dělají ty čtyři programy? Dnes se podíváme na první dva - CSG a BSP - trochu okrajově, trochu do hloubky, a řekneme si i pár parametrů, které se občas hodí.
.rmf › .map
Před samotnou kompilací VHE provede konverzi mapy z formátu .rmf na .map, který se následně použije při kompilaci. Hlavní rozdíly mezi .rmf a .map:
- .rmf ukládá souřadnice objektů pomocí desetinných čísel; .map pomocí celých čísel. Pokud tedy máte mapu mimo mřížku, může dojít např. k LEAKu, i když v .rmf není na první pohled vidět.
- .rmf ukládá i všelijak pokroucené (nekonvexní, obrácené naruby...) objekty. Po konverzi na .map se tyto objekty deformují v nekonečně dlouhé brushe, které způsobují nechvalně známou chybu brush outside world při kompilaci CSG.
- .map oproti .rmf neobsahuje informace o seskupení objektů (Groups), VisGroups a barvách objektů.
- .map oproti .rmf naopak obsahuje informace o použitých wadech.
- .rmf zapisuje informace v binární podobě; .map v člověkem čitelné podobě.
- .map zapisuje face objektu třemi body určující orientaci facu; .rmf zapisuje face objektu polem souřadnic jednotlivých vrcholů a dodatečně i trojicí prvních tří vrcholů, které se využijí právě při konverzi na .map.
Při konverzi se také změní Cordon Bounds na brushe a informace z Path Toolu na point entity.
CSG
V kostce:
CSG má na starosti kontrolu chybných brushů, rozřezání faců na menší části, vytvoření kolizního boxu celé mapy, zápis entit a vše kolem textur.
Do hloubky:
Constructive Solid Geometry; název vyjadřuje to hlavní, s čím tento program pracuje. CSG načte z .map souboru všechny brushe, rozebere je na jednotlivé facy a ty rozřeže na ještě menší. Řeže je buď podle hran jiných faců, podle mřížky scale_textury*240 (např. při scale 0,8 to bude mřížka 192x192; konstanta 240 lze změnit, ale je to víc ke škodě než k užitku), nebo podle dalších kritérií (např. průsečnice s jednou ze tří rovin).
V .map souboru jsou facy zapsány pomocí souřadnic tří bodů, které určují orientaci facu; pro další krok kompilace je vyžadován zápis pomocí souřadnic všech vrcholů facu, takže pokud CSG narazí na něco nečekaného (nekonvexní brush, převrácený face, brush s nečekaným počtem faců), skončí chybou, nejčastěji brush outside world.
Z faců se vytvoří čtyři hull soubory, které následně zpracuje BSP. První hull obsahuje ty facy, které se vykreslují. Zbylé tři hully zajišťují kolizi. V hull souborech jsou facy zapsány pomocí souřadnic všech jejich vrcholů; souřadnice jsou zapsány jako čísla s desetinnou čárkou.
CSG má dále na starosti vytvoření základního .bsp souboru, do kterého zapíše entity, informace o mapě ("entitu" worldspawn), informace o použitých texturách (dále se nepředávájí jména textur, ale jen indexy odkazující na tento seznam) a seznam potřebných wadů.
Parametry:
-nowadtextures |
Všechny použité textury se přibalí do bsp souboru. Místo tohoto parametru používejte raději -wadinclude, protože při použití -nowadtextures zůstanou v .bsp zapsané všechny použité wady jako potřebné, přestože nejsou, a tak dochází k chybám např. v ResGenu. |
-wadinclude soubor.wad |
Použité textury ze soubor.wad se přibalí do bsp souboru. |
-cliptype způsob |
Nastaví se způsob vytváření kolizního boxu mapy.
precise - nový typ kolizního boxu, zabraňuje chození po okrajích zkosených objektů
legacy - starý typ kolizního boxu
normalized - z jedné poloviny starý kolizní box, z druhé nový
simple - jednodušší kolizní box, na druhou stranu méně přesný
smallest - co nejmenší kolizní box (na některých místech může dojít k zaseknutí hráče)
|
-onlyents |
Jen se aktualizují entity v již existujícím bsp souboru. Pokud přidáváte / mažete brushové entity nebo samotné brushe, musíte překompilovat celou mapu. |
-wadconfig nastavení |
Použije vybrané nastavení wadů z wad.cfg. |
-wadcfgfile soubor.cfg |
-wadconfig vybere nastavení z soubor.cfg namísto z wad.cfg. |
-wadautodetect |
Do bsp souboru se jako potřebné zapíšou jen ty wady, ze kterých jsou použité textury. |
Výše zmíněné parametry jsou určené pro HLCSG. Kompletní seznam parametrů k HLCSG naleznete na stránkách zhlt.
BSP
V kostce:
Tento program má na starosti zahození zbytečných faců a mimo jiné vytvoření hratelného spustitelného bsp. Je nechvalně známý kvůli chybě LEAK
Do hloubky:
Binary Space Partitioning; tentokrát nám název řekne trochu méně. BSP je metoda rozdělení mapy (v našem případě čtyř hull souborů) do binárního stromu (v tomto kontextu též jako BSP tree nebo česky jako BSP strom), který nám umožní vykreslovat jen ty potřebné části mapy. Je to celkem známá a hojně používaná metoda. V GoldSrc enginu se v BSP stromu používají tzv. leafy (leaves - listy). Tyto leafy jsou konvexní objekty, které vyplňují celý vnitřek mapy. K leafům jsou přiřazené příslušné facy, které se vykreslují v závislosti na viditelnosti leafů, ke kterým jsou přiřazeny. Leafy se dále využijí při kompilaci VISu a RADu. Při kompilaci BSP se také vytvoří soubor, který obsahuje seznam portálů - faců, kterými se dotýkají jednotlivé leafy. Tento soubor se také zužitkuje při kompilaci VISu.
BSP strom by si šlo představit jako odlitek z formy, kterou představují čtyři hull soubory od CSG. Kdybychom tento odlitek nabarvili a rozbili na konvexní kousky, získali bychom leafy s barvou označenými facy. Stěny bez barvy by byly portály. Díky těmto kouskům můžeme sestavit jen tu část, kterou potřebujeme vykreslit. Pokud je forma (mapa) dobře utěsněná, je nám její vnějšek (vnější facy) k ničemu a tak ho můžeme bezstarostně zahodit. Pokud je ale děravá, hmota vyteče ven (LEAK), přilepí ke stolu (vytvoří se leafy na vnějšku mapy), a pak už nepoznáme, které facy jsou zbytečné, takže se použijí všechny.
Parametry:
-leakonly |
Proběhne pouze kontrola, zda-li v mapě není LEAK. |
Výše zmíněné parametry jsou určené pro HLBSP. Kompletní seznam parametrů k HLBSP naleznete na stránkách zhlt.
|
|
Moh si tam jeste pridat nejaky obrazky k lepsimu predstaveni treba jak tenhle
http://de.wikipedia.org/w/index.php?title=Datei:Leaf-storingBSP.svg&filetimestamp=20080818120307