Vizualizace a rendering
1. Vizualizace a rendering
Vizualizace grafických dat nabývá poslední dobou stále většího významu. V dnešní době se snažíme o nejrealističtější zobrazení různých prostředí na počítači. Postupem času se začaly vyvíjet různé algoritmy pro zobrazování 3D scén. Pod pojmem rendering se ukrývá celá škála vizualizačních algoritmů a v podstatě je to celý proces zobrazování 3D scény.
Třírozměrná scéna modelovaná v počítači se skládá z objektů, světel a z kamery, která reprezentuje polohu pozorovatele. Scéna může mít i nějaké globální fyzikální vlastnosti, můžeme brát v úvahu přitažlivost, vítr apod. Stejně tak každý objekt může mít přiřazeny své lokální atributy, třeba hmotnost (viz 3D objekt a 3D model). Tyto údaje se potom využívají zejména při simulacích pohybu objektů a jejich interakci.
1.1. Metody renderingu
· lokální
· globální – raytracing: metoda rekurzivního sledování paprsku
– radiozita: radiační metoda
· jednoduché stínování
Lokální – Lokální osvětlovací modely se zabývají pouze odrazem světla od jediného bodu na povrchu objektu. Nesnaží se určit celou scénu, ale zaměřují se pouze na jeden konkrétní objekt. Lokální osvětlovací techniky poskytují výsledky nesrovnatelně méně kvalitní, zato však velice rychle.
Lokální metody se využívají především tam, kde je třeba mít výsledky k dispozici okamžitě, tedy např. ve virtuální realitě, při interaktivní manipulaci s 3D scénou v CAD/CAM, vizualizaci vědeckých dat, rozličných počítačových simulacích a samozřejmě i v počítačových hrách.
Globální – V praxi dochází k mnohonásobným odrazům světla mezi různými objekty a barva bodu je pak výslednicí komplikované trajektorie mnoha světelných částic. Globální osvětlovací modely pracují na bázi detailní simulace šíření světla ve scéně, mnohonásobnými odrazy světla, popisují pohlcování světla v prostředí, v němž se šíří a jeho rozptyl na částečkách prachu, vzduchu a aerosolů (dnes lze nalézt v algoritmech i popisy fyzikálních vlastností atmosféry, mraků aj.), vypočítávají jeho lom, průchod poloprůhlednými objekty atd. Tato metoda poskytuje vynikající výsledky, ovšem časově značně náročné.
Globální osvětlovací techniky nalézají uplatnění zejména při výrobě filmových triků, závěrečném renderingu scén v architektuře či tvorbě reklam, zkrátka všude, kde se požaduje kvalitní výstup a na výpočet je dostatek času.
U globálním renderingu hovoříme o dvou důležitých vlastnostech světla:
Odraz světla
V podstatě se používají dva mezní případy odrazu světla. Odraz zrcadlový (specular) a odraz difuzní (diffuse). Difuzní odraz způsobuje rovnoměrný rozptyl přicházejícího světla do všech stran, zatímco zrcadlový odraz odrazí dopadající světlo přesně podle zákona o rovnosti úhlu odrazu a úhlu dopadu. Podstatné je, že při difuzním odrazu světelného paprsku vzniká množství nových paprsků, zatímco při odrazu zrcadlovém žádný nový paprsek nevzniká.
Útlum světla
Jelikož intenzita světla s jeho vzdáleností klesá, můžeme ve scéně uvažovat o útlumu světla. Proto se budeme zabývat pouze těmi odrazy, které k výsledné kvalitě obrazu přispívají výraznější měrou. Pokud klesne intenzita světla pod námi zvolenou hodnotu, nemusíme se dalším transportem paprsku v prostoru již zabývat. To nám umožní výrazně urychlit velké množství výpočtů.
Raytracing
Z kamery (kamera = pozorovatel) se vyšle paprsek a zjistí se průsečík s nejbližším objektem. Dále se vypočítávají vržené stíny, které pocházejí od světelných zdrojů, tak, že se v místě každého odrazu paprsku světla od povrchu objektu vrhnou ještě ke všem světelným zdrojům sekundární, tzv. stínovací paprsky (shadow rays). Ty pouze testují viditelnost světelného zdroje z příslušného místa. Pokud je světelný zdroj vidět, je bod tímto světlem osvětlen, pokud zdroj vidět není, leží ve stínu. Podle toho se příslušná intenzita jasu bodu sníží nebo zvýší. Stínovací paprsky se samozřejmě musí vrhat ke všem světelným zdrojům, takže počet použitých světel výrazně ovlivňuje rychlost výpočtu obrazu. Barva objektu je pak zapsána do příslušného pixelu a algoritmus pokračuje dalším bodem.
Pro zrychlení výpočtů této metody lze využít tzv. obklopujících obálek (convex hulls). Objekt sám o sobě může být poměrně komplikovaný a test průsečíku paprsku s ním tedy výpočetně náročný. Pokud jej však obklopíme nějakým tělesem, se kterým je výpočet průsečíku jednoduchý, například koulí či kvádrem, můžeme provést nejprve test s touto obálkou, a pokud není zasažena ona, nemůže být zasažen ani vlastní objekt.
Metoda sledování paprsku výtečně popisuje přenos světla mezi zrcadlovými, lesklými a průhlednými plochami. Díky tomu mají obrázky obyčejně ostré stíny, jsou nepřirozeně lesklé a textury, které jsou na površích objektů, působí při bližším pohledu nevěrohodně. Je to dáno tím, že raytracing bere v úvahu pouze světlo dopadající ze směru dokonalého, zrcadlového odrazu. Proto byla vytvořena metoda distributivního raytracingu, která tyto nedostatky řeší tak, že při výpočtu odrazu nevysílá pouze jeden paprsek, ale svazek paprsků, jejichž směr se odklání o náhodný úhel od paprsku ideálního odrazu.
Další metodou raytracingu je vrhání paprsku (ray casting). Zde se neuvažují žádné odrazy. Jedná se tedy o pouhé vyšetření průsečíků paprsků vržených od pozorovatele do scény s tím, že se mohou nebo nemusí vypočítávat stíny. Využívá se pro rychlejší náhled na scénu.
Radiozita
Radiační metoda zpracovává scénu podle vyzařování jednotlivých ploch a energetické bilance celé scény. Síla této metody spočívá ve věrném podání stínů a polostínů a podpoře plošných světelných zdrojů. Scénu připravenou pomocí radiační metody je nutné na závěr vystínovat například pomocí raytracingu, který zajistí zpracování odrazivých ploch.
Velkou výhodou této metody je, že silně osvětlená ploška se sama chová jako zdroj světla. Uvedu to na příkladu: pokud budu mít místnost s bílými stěnami a červenou podlahou, posvítím-li nyní na podlahu, stěny se mi zbarví do červena. Toho nelze jednoduše dosáhout ani raytracingem. Tato metoda je realističtější nežli raytracing, déle trvá a nedokáže zpracovávat odrazy světla.
Jednoduché stínování – nejrychlejší způsob renderingu. Nejjednodušeji ho můžeme realizovat pomocí Z-bufferu. V Z-bufferu je uložena ke každému bodu obrazu informace o jeho hloubce. Pokud máme dva body ve stejném místě (stejná x a y souřadnice), porovnají se vzdálenosti těchto bodů a bližší bod se vykreslí. Tento algoritmus je založen na porovnávání vzdáleností jednotlivých bodů zobrazovaných těles od pozorovatele. Při výpočtu užívá pouze celočíselné operace, proto je velmi rychlý. Nedokáže však vytvořit přesné a ostré stíny, zrcadlení či lom světla v průhledných materiálech, a proto je vhodný zejména pro rychlé preview (náhled na scénu). O typech stínování a jeho vlastnostech se dovíte dále.
1.2. 3D Model a 3D objekt
Každá samostatná část 3D scény se nazývá 3D objekt. 3D objekt má určitý tvar, barvu, fyzikální jevy a vlastnosti. Tyto informace jsou uloženy ve 3D modelu. Pomocí 3D modelu vytváříme 3D objekt a můžeme jej dále upravovat. Ve většině případů neobsahuje 3D model všechny vlastnosti, které 3D objekt či skupina 3D objektů ve scéně má, ale pouze určitou třídu vlastností či jevů a ostatní ignoruje (protože jsou zanedbatelné nebo nejsou důležité). V podstatě lze říci, že 3D objekt je výsledné zobrazení informací obsažených ve 3D modelu. Grafické editory mají většinou nějaké modely objektů předdefinované v knihovnách. Mezi základní objekty patří: koule, kvádr, polokoule, kužel, válec atd. Většinou se 3D modely zobrazují síťovou projekcí výsledných 3D modelů (viz obrázek 1 a obrázek 2).
obrázek 1 – 3D modely
obrázek 2 – 3D objekty
1.3. Zobrazovací řetězec
Zobrazování scény se skládá z několika základních kroků, pro něž se vžil pojem zobrazovací řetězec. Jednotlivé kroky jsou na sobě závislé v tom smyslu, že pro provedení následujícího kroku jsou nutné výstupy kroku předchozího. Celý proces je jednosměrný, tzn. žádná data se nemusejí předávat směrem zpět. Tento mechanismus je takto navržen záměrně proto, že umožňuje proudové zpracováni grafických dat (pipeline mode). Tento postup, běžně používaný při zpracování instrukcí v procesorech, pracuje na následujícím principu: Na vstup prvního bloku (viz obrázek 3) se přivede první trojúhelník, ten se transformuje do pohledu kamery a předá dalšímu bloku. V tom okamžiku už první jednotka čte data druhého trojúhelníku a v okamžiku, když druhá jednotka provádí ořezání trojúhelníku prvního, první blok transformuje data druhého trojúhelníku do pohledu kamery. Poté se oba trojúhelníky posunou o jednotku dále a na vstup celého řetězce se přivede třetí trojúhelník. V dalším kroku se zpracovaná data posunou o jeden blok dále a na vstup se přivede další trojúhelník atd. Pokud bychom zpracovávali jen jeden trojúhelník, výhody proudového zpracování se nijak neprojeví. Trojúhelník postupně projde všemi jednotkami a po opuštění poslední z nich se příslušné pixely vykreslí. Efektivnost proudového zpracování se projeví, zpracováváme-li velké objemy dat. Potom se paralelně zpracovává tolik trojúhelníků, kolik je jednotek zobrazovacího řetězce. S každým trojúhelníkem se přitom provádí jiná část operace. Dnes je snahou výrobců tento řetězec, pokud možno celý, zahrnout v hardwaru.
obrázek 3 – Zobrazovací řetězec (proudové zpracování)
1.4. Pohledový objem
Kamera je určena polohou, orientací a tzv. pohledovým objemem (viewing frustum). Pohledový objem je určen úhlem záběru a přední a zadní ořezávací rovinou (viz obrázek 4). Vše, co leží uvnitř tohoto objemu, je podrobeno zobrazovacímu řetězci a tedy i celému renderingu. Zbytek trojúhelníků je ze scény vyloučen. Tento krok je nesmírně důležitý, neboť zaručuje, že se v dalších krocích zobrazovacího řetězce nebudeme zbytečně zabývat úplně celou scénou, ale pouze tím, co je v záběru kamery.
obrázek 4 – Pohledový objem
1.5. Stínování
Stínováním (shading) se v počítačové grafice nerozumí výpočet stínů vržených objektem (shadows), ale spojité barevné přechody způsobené nestejným osvětlením různých částí objektu. V počítačové grafice se používají tři druhy stínování:
· Konstantní stínování (flat shading)
· Gouraudovo stínování (Gouraud shading) – interpolace barvy
· Phongovo stínování (Phong shading) – interpolace normály
Pro vysvětlení rozdílu mezi těmito druhy stínování budeme používat trojúhelník (základní část povrchu tělesa), zadaný třemi vrcholy, a předpokládat, že v nich známe normálové vektory.
Konstantní stínování přiřazuje celému trojúhelníku jedinou barvu na základě hodnoty v jednom z vrcholů (nejčastěji se aplikuje barva toho vrcholu, který je zpracováván jako první) nebo barvu získanou průměrem hodnot všech tří vrcholů. Pokud se provádí výpočet osvětlení, provádí se pro každý trojúhelník pouze jednou. Tento postup je výpočetně nejméně náročný, jeho nevýhodou však je, že na přechodech trojúhelníků se zvýrazňují hrany. Výsledkem je charakteristický ploškový vzhled trojrozměrných objektů (viz obr.).
obrázek 5 – Konstantní stínování
Gouraudovo stínování pracuje tak, že se vypočítá barva ve všech třech vrcholech a získané hodnoty se pro body uvnitř trojúhelníka lineárně interpolují. Výsledkem je daleko jemnější přechod nežli v případě konstantního stínování. Gouraudovo stínování navíc vyhlazuje přechody mezi sousedními trojúhelníky. Tato metoda je často implementována v hardwaru počítačů. Má však jednu nevýhodu. Představte si situaci, kdy na plošku bude přímo svítit zdroj světla a pozorovatel stojí tak, že by ploška vytvořila odlesk. Gouraudovým stínováním vypočítáme barvu ve dvou vrcholech a interpolujeme ji. Vzhledem k poloze světla a pozorovatele by mělo přesně uprostřed mezi dvěma uzly dojít k odlesku. Vzhledem k tomu, že interpolujeme barvu, tak k žádnému odlesku nedojde.
obrázek 6 – Gouraudovo stínování
Tuto závadu částečně řeší Phongovo stínování. Nejnáročnější bývá výpočet normálového vektoru, a proto se Phongovo stínování pokouší řešit tento problém tak, že interpoluje normály v bodech mezi dvěma uzly a toto přiblížení používá k výpočtu osvětlení. Je nutné podotknout, že Phongovo stínování je výpočetně daleko náročnější nežli stínování Gouraudovo především proto, že se rovnice osvětlovacího modelu vypočítávají pro všechny body objektu.
obrázek 7 – Phongovo stínování
Porovnání Gouraudova a Phongova sínování můžete vidět na následujícím obrázku (Gouraudovo je vždy vlevo a Phongovo vpravo). Koule byla nasvícena stejnými světly a pohled kamery se nezměnil.
obrázek 8 – Porovnání Gouraudova a Phongova stínování
Aliasing
Působením aliasingu vznikají v počítačové grafice různé nepěkné jevy, jako jsou zubaté okraje objektů nebo podivné chování textur. K jejich odstranění se používá tzv. Antialiasing. Antialiasing lze zajistit speciálními texturami, které ho dělají samy (filtrováním obrazu, různými heuristickými metodami) a nebo vysláním více paprsků (místo jednoho) do každého pixelu (u metody raytracingu). Antialiasing sice zpomaluje rychlost výpočtů, ale většina scén bez antialiasingu nestojí za řeč.
Speciální případ antialiasingu je motion blur. Tento pojem označuje efekt, kdy se během snímání scény objekty trochu pohnou, jsou tedy zaznamenány jako mírně rozmazané. Tento efekt zpomaluje rychlost výpočtů ještě více než antialiasing, a proto se používá jen tehdy, je-li to nutné nebo pokud je realizován na rychlém počítači a scéna není příliš složitá.
1.6. Textury
Textura je vlastnost povrchu objektu. Její hlavní charakteristikou je, že nemění geometrii objektu, na nějž je nanesena. Mění povrch objektu pouze vizuálně a tak lze říci, že textura je v podstatě jen dokončovací technikou. Aplikace textury, někdy se též říká nanášení textury, zcela zásadním způsobem ovlivňuje konečnou podobu objektu a může jej vizuálně pozměnit takovým způsobem, že bude od své předlohy prakticky k nerozeznání. Modifikace povrchu objektu mívá různé podoby, od prostého určení barvy až po tvorbu objektů, které jsou zdánlivě porostlé srstí, mechem, jsou různě hrbolaté či průhledné, jsou jakoby vyřezané z jediného kusu materiálu atp.
Textury mohou být dvourozměrné nebo trojrozměrné. Dvojrozměrné textury jsou reprezentovány obrázkem nebo tabulkou hodnot, trojrozměrné pak nějakým trojrozměrným polem hodnot (nejčastěji voxely, to jest rovnoměrně rozmístěnými body ve trojrozměrném prostoru, v nichž je uložena hodnota textury).
Dvojrozměrné textury – V prvním se obyčejný obrázek nějakým způsobem „nalepí“ na povrch objektu. Výhoda je zřejmá, obrázek si můžeme nakreslit, jaký chceme. Nevýhod je několik: musí se dávat pozor na navazování textur, na některá tělesa se textury nalepují špatně (klasickým případem je koule, kde vždy vznikne pól), a mohou nastat problémy s aliasingem. Tyto problémy lze sice řešit, ne však vždy úplně uspokojivě. Pomocí 2D textur lze jednoduše vytvořit děravý objekt tak, že se nastaví barva, která je „průhledná“, a při konečném renderování se plochy s touto barvou nevykreslí. Dále lze pomocí těchto textur vytvořit hrbolaté povrchy tak, že se změní kolmice k povrchu objektu (normálový vektor), která má zcela zásadní vliv při výpočtu osvětlení vyšetřovaného bodu.
Trojrozměrné textury – Vychází se z toho, že objekt je tvořen jednolitým materiálem, z něhož je vyříznut. Vyplňují celý trojrozměrný prostor a aplikovány jsou pouze v místě, kde protínají povrch objektu. Odpadá tedy problém navazování, potíže s aliasingem ale přetrvávají. Vzniká však obrovská nevýhoda, a tou je nemožnost takovou texturu nakreslit jako v předešlém případě. 3D Textura se musí vytvořit nějakou formou programování nebo mixováním již hotových textur.
Otázky k probrané kapitole
- Rozdělte metody renderingu a stručně je popište.
- Vysvětlete pojem zobrazovací řetězec.
- Popište, popř. nakreslete, jak vzniká pohledový objem a vysvětlete k čemu slouží.
- Popište, jak vzniká objekt pomocí konstantního (flat) stnínování.
- Vysvětlete, jaký je rozdíl mezi Gouraudovým a Phongovým stínováním.
- Popište, k čemu slouží textury a jejich použití.
- Vysvětlete pojem 2D textura.
- Vysvětlete pojem 3D textura.
- Porovnejte 2D a 3D textury a popište jejich klady a zápory.
PŘIDEJTE SVŮJ REFERÁT