English Welcome Kecy Programování 3D - Engine Guestbook Odkazy Downloady O autorovi Napiš mi Mailform
box_cz 3D - Engine 13 - různé dodělávky box_cz

Lens flares

    Lens flares se dá přeložit asi jako "odlesky v objektivu". Určitě ste už v televizi viděli, jak se kamera dívá do sluníčka a objeví se několik odlesků okolo. To je ono, o čem mluvím. Je to způsobeno odrážením se světla od čoček a jiných optických příšerností v kameře. Ve hrách bývají ve dvou základních druzích. První, méně častý je právě simulace kamery. Na obrazovce je několik kroužků, které se pohybují podle vzájemné pozice kamery a světla. Druhý, častější způsob je prostě jen jeden světlý kroužek okolo světla. Ten funguje tak, že čím dál jste od světla, tím je větší (tedy obráceně, než ostatní objekty) a pokud je světlo něčím zakryto, pomalu zhasne - ne okamžitě. Lepší by bylo, kdyby se počítala viditelnost nějakého bounding boxu okolo světla, ale to je zase dost složité. Možná vám ještě není jasné, jak se vlastně kreslí - jednoduše : aditivním směšováním. Prostě sečtete texturu flare s obrazem. Měl bych poznamenat, že lens flares by se neměly protínat se světem, působí to hodně nepřirozeně. No a jak má taková textura vypadat ? Třeba takhle :

max-flare
(3DS-Max)

A výsledek ...

unreal-flare
(Unreal)

q3a-flare
(Quake 3 Arena)

... pokud kreslíte textury, měli byste si dát pozor a udělat vlastní flare radši menší, aby nebyla v textuře "uřízlá" - potom to vypadá ošklivě.     Zdrojáky na lens-flares jsou tak jednoduché, že je sem snad ani nebudu dávat ... no a stejně jsou vlastně v engine s lightmapama (dva díly dozadu)     Pokud jde o ty světla, teď jdou do módy plošná světla. Takové neelegantní řešení je udělat na něj víc kulatých flares ... a je to. Ale jde to i jinak - udělá se druhá vrstva obrazu (třeba i s čtvrtinovým rozlišením), do které se nakreslí světla jako barevné plochy a potom se normálně rozmáznou. Výsledek nevypadá špatně:

area-flare

area-flare
Farbrausch používá tuhle metodu poměrně často

    Další možnost, kterou používá třeba i takový Doom3, je vytvořit speciální geometrii která bude vypadat jako flare. Opět na tom není nic moc složitého, vypadá to takhle:

doom3-flare

    A pro úplnost ještě jak to vypadá wireframe:

doom3-flare wireframe
Ta kulatá podivná geometrie je pro flare



Particle systémy

    Particle systémy se používají na věci jako oheň, kouř, atd ... Mohl bych přeložit, že paricle znamená "částečka". Tak to také vypadá : particle systém má nějaký emitor, který má určitý tvar, umístění a velikost a z něj vyletují částečky. Jak se zobrazí ? Jako sprite. Sprite jsou 2D útvary, podobně jako lens-flares, jenže ty už se kreslí normálně se zapnutým Z-Bufferem (S-bufferem) Částečky můžou lítat různými směry, různými rychlostmi a můžou nějak měnit svůj směr (opilecká chůze, nebo turbulence, nebo gravitace / vítr, atd ...) Particle systém by měl být hodně rychlý, protože částeček bývá mnoho (řádově tisíce), takže se nemůže počítat žádný složitý výpočet (protože se dělá pro každou částečku zvlášť)
    Zase vás zklamu, protože zdroják na poměrně dobrej particle systém je ve hře Indiana Jones & Sila, v sekci downloady, takže si ho prohlídněte i se hrou ...
    Ještě zase taková rada ... částečky za sebou můžou nechávat stopu (tzn. kreslí se víc částeček, ležících na stejné trajektorii, jenže se proti směru pohybu zmenšují) viz. Doom 3 :

Doom3 particle



After - efekty

    To jsou volně přeloženo efekty po (ne požití, ale vykreslení obrazu). Sem může patřit gamma korekce, kontrast a jas nebo podobné, ale také různé jiné. V mnoha hrách jsou různé "quad damage" stavy, kdy se změní celé vidění - potom se dělají různé transformace barev, blurování atd ... vezmu pár efektů, jak mě budou napadat

Starý film
- budete potřebovat funkci, která převede barvy na sépiovou hnědou. starým filmům chybí modrá
- film je v rozích tmavší, než uprostřed
- můžete přidávat vlasy a ťápance prsty, ale nepřežeňte to !
- filmový pás bývá poškrábaný, což se projevuje svislými čárami, které jsou světlejší než okolí
- film občas poskočí, obraz se zatřese

Rozladěná televize
- v obrazu bude šum, buď může být konstantně, nebo občas naskočit (v tom případě je hrubější)
- televize mívá stíny - obraz je zkopírován ještě jednou kousek vedle (většinou vodorovně)
- může se rozladit synchronizace - obraz přeskakuje, nebo mění rozměry
- obraz taky můžete proložit jinými obrazy, které do scény nepatří
- může se zvětšovat kontrast - světlým plochám se bude oběvovat "svatozář"

Noční vidění
- většinou zelený, nebo červený filtr
- mírný, ale viditelný šum

Painkiller boost
- všechno se kreslí černobíle, nepřátelé červeně
- obraz je mírně zdeformovaný směrem do středu
- poměrně silný blur

Pod vodou
- nějaký barevný filtr - pod vodou nebudou barvy tak jasné
- deformace obrazu nějakou sinusovkou

Vlnící se vzduch
- v podstatě stejné jako pod vodou, ale aplikuje se jen na ta místa na obrazovce, kde se má vyskytovat horký vzduch (-> particle) viz. obrázek z FarCry :

FarCry smoke


Docela často se používá deformace obrazu, stálo by za to říct, jak se to dělá. První možnost je mít nějakou funkci a s tou posouvat souřadnice čteného pixelu (pixely se budou kopírovat do jiného bufferu) Další možnost ja rozdělit obrazovku na polygony a hýbat s jejich vrcholy, takže obraz se deformuje. Jednoduše se tak taky dělají všelijaké efekty čoček.

original image       polygon fence

after transformation

Na prvním obrázku je originální obraz, na druhém obrázku je znázorněná síť polygonů, použitá pro deformaci a na třetím obrázku je výsledný zdeformovaný obrázek.
    Mezi after-efekty by se taky dala zařadit HDR post-produkce. Jde to dokonce i bez HDR, i když ne tak dobře. Stačí, když budete obraz počítat trošku tmavší (třeba o 10%) a potom všechny hodnoty > 90% budou zářit (ne samy, musíte to samozřejmě napasat - uděláte si masku ve které bude bílá na 100% a černá na 90%. Potom zkopírujete obraz do druhého bufferu, násobíce jej touhle maskou a celý buffer rozmažete (ne obráceně! napřet maska, potom rozmazat!). Potom ho zkopírujete zase zpět - a světlé věci budou zářit do okolí !). Stejně dobře můžete udělat i exposure-control, a to tak že budete vždy sledovat světlost předchozího snímku a podle toho expozici upravíte. Výsledek sice není tak přesný jako opravdové HDR, ale i tak vypadá dobře.

original image      mask

fake HDR      blurred mask

Na prvním obrázku je zase originální scéna, na druhé je scéna vynásobená maskou, na třetím je navíc rozmazaná a čtvrtý obrázek vznikl součtem prvního a třetího. Vypadá to dobře, ale dejte si pozor - co je bílé, začne zářit. Takže je opravdu lepší kreslit obrázky tmavší, než by ve skutečnosti byly. Tenhle trik používal například 3D Mark 2003 ve scéně "Nature", a to jen v módu demo, ne v testovacím módu.

3D Mark 2003



Antialiassing

    Antialiassing je docela dobrá věc, ale tak jak je implementovaná na grafických kartách, sežere dost výkonu. Antialiasing způsobuje rozmáznutí hran, takže rastr vypadá korektněji a ne tak zubatě. Antialiasingu je hodně druhů. Mezi ty základní patří FSAA (full screen AA) - obraz se spočítá s několikrát vyšším rozlišením (2x, 4x, 6x, 8x) a potom se zmenší. Potom připadne na jeden výsledný pixel víc zdrojových a průměr dá poměrně dobrý výsledek. Bohužel, tahle metoda je nejnáročnější. Určitou optimalizací je Quincunx AA, který potřebuje obraz s rozměry o jedna větší, takže není tolik náročný jako FSAA. No jo, ale jak z toho uděláme výsledný obraz ? Vezme se bod, potom tři další, ležící na dalším sloupci (řádku). První bod má váhu 1/2 + 1/8, další mají váhy 1/8, což dohromady dá jedna. Quincunx se ale chová systémem "za málo peněz málo muziky". Další druh je adaptivní AA, který počítá obraz s vyšším rozlišením jen tam, kde jsou rušivé hrany. Potom by mohly následovat obrazové filtry, které vezmou obraz jako časový průběh a odstraní z něj vysoké frekvence (= ostré hrany) Asi nejúčinějším algoritmem je přímo optimalizovaný rasterizér, který nedává výsledky "hrana začíná tady a končí tam", ale i informaci o tom, jak dlouho hrana nabíhá a jak dlouho se ztrácí (tzn. přechází z / do průhlednosti)     No a takhle vypadá FSAA v praxi :

fullscreen AA (FSAA)
vlevo s FSAA, vpravo bez (zvětšeno 4x)

Tak ... to bude pro dneska asi všechno, příště se vrhnem na OpenGL.

    -tHE SWINe-

zpět


Valid HTML 4.01!
Valid HTML 4.01