V osmém dílu tohoto seriálu jsme se hloub╪ji zab∞vali tím, jak se odráºí sv╪tlo od povrchu objektu a jak se z tohoto odrazu v poƒítaƒové grafice odvozuje barva bodu. Zab∞vali jsme se odrazem jediného paprsku od jediného bodu na povrchu objektu a model, kter∞ tento jev popisuje, jsme oznaƒili jako lokální osv╪tlovací model.
Globální osv╪tlovací modely
V praxi pochopiteln╪ 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. Techniky, které tento fakt berou v potaz, se oznaƒují jako globální osv╪tlovací modely a mezi jejich nejznám╪jτí reprezentanty pat²í radiaƒní metoda (radiozita) a metoda rekurzivního sledování paprsku (raytracing).
Odraz sv╪tla
Empirické lokální osv╪tlovací modely, tedy modely zaloºené na popisu, kter∞ není nijak fyzikáln╪ podloºen, a p²esto poskytuje realistické v∞sledky, byly uvedeny v osmém dílu seriálu. ⁿekli jsme si také, ºe tyto modely v podstat╪ uvaºují 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 tak, jak je uvedeno na obrázku. 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á.
Lokální osv╪tlovací modely se zab∞vají pouze odrazem sv╪tla od jediného bodu na povrchu objektu a nezab∞vají se násobn∞mi odrazy, o coº se pokouτejí osv╪tlovací modely globální. V t╪chto modelech je tedy smysluplné uvaºovat nap²íklad odraz sv╪tla mezi povrchy, kter∞ jsou ideáln╪ difuzní a ideáln╪ zrcadlové. Postupnou klasifikací podle mezních p²ípadà dostaneme ƒty²i základní moºnosti transportu sv╪tla mezi ràzn∞mi druhy povrchà: difuzní - difuzní, zrcadlov∞ - difuzní, difuzní - zrcadlov∞ a zrcadlov∞ - zrcadlov∞.
Dàleºité je, ºe se v realit╪ kaºd∞ z t╪chto p²ípadà màºe vyskytnout jako dàsledek libovolné kombinace odrazà p²edcházejících. Schematick∞ obrázek ukazuje p²ípad, kdy vznikl difuzn╪-zrcadlov∞ odraz jako dàsledek n╪kolika odrazà mezi zrcadly a jedinou difuzní plochou. Obecn╪ màºe samoz²ejm╪ vzniknout libovoln∞ typ odrazu jako dàsledek libovolné posloupnosti p²edcházejících odrazà. Je zjevné, ºe p²esnost v∞poƒtu v tomto p²ípad╪ souvisí s kvalitou v∞sledného obrazu známou úm╪rou - ƒím lepτí v∞sledek, tím delτí dobu v∞poƒtu musíme oƒekávat. Existují ràzné algoritmy, které popisují ràzné varianty odrazu sv╪tla, a hned na tomto míst╪ je nutno podotknout, ºe ºádn∞ z nich nepopisuje p²esn╪ vτechny ƒty²i zmín╪né varianty.
Odraz typu zrcadlo - zrcadlo je vynikajícím zpàsobem popsán vτeobecn╪ známou metodou rekurzivního sledování paprsku (raytracingem), o níº se zmíníme dále. Pokud se ve scén╪ vyskytne difuzní povrch, dojde p²i uºití této metody k simulaci odrazu sv╪tla pouze sm╪rem k pozorovateli, ne vτak k dalτím povrchàm ve scén╪. Jin∞mi slovy ²eƒeno difuzní povrch je zobrazen p²esn╪, ale sv╪tlo se od n╪j dále neτí²í. Metoda sledování paprsku tedy selhává v takov∞ch p²ípadech, jako je ten, uveden∞ na dalτím obrázku. Pokud se v posloupnosti zrcadlov∞ch odrazà vyskytne jeden odraz difuzní, simulace se v tomto míst╪ zastaví. Tuto vlastnost metody sledování paprsku prakticky nelze odstranit. Existuje nep²eberné mnoºství pokusà a variant základního algoritmu, které do urƒité míry ²eτí jednotlivé patogenní p²ípady, ale ²eτení jako celek v této metod╪ není moºné. Obrázky získané metodou sledování paprsku mají proto vºdy z²etelnou signaturu - nep²irozen╪ ostré odrazy, ostré stíny, konstantní nebo lineární barevné p²echody na difuzních povrτích atp. Existují varianty základního algoritmu, které popisují i odraz mezi difuzním povrchem a zrcadlem.
Odraz sv╪tla mezi dv╪ma difuzními povrchy je skv╪le popsán radiaƒní metodou (radiosity). Tato metoda vτak zase neposkytuje formální aparát pro simulaci zrcadlov∞ch odrazà, a tak jsou na obrázcích, které jsou v∞stupem radiaƒní metody, resp. její základní varianty, vτechna zrcadla ƒerná. Dalτím podstatn∞m rozdílem mezi t╪mito algoritmy je, ºe zatímco metoda sledování paprsku poskytuje jedno, pohledov╪ závislé ²eτení (tedy obrázek), radiaƒní metoda poskytuje celkovou sv╪telnou bilanci scény, kterou màºeme prohlíºet ze vτech moºn∞ch stanoviτ£.
Odraz zrcadlo - difuze je ²eτen empiricky tzv. metodou zp╪tného rekurzivního sledování paprsku (backward raytracingem). V tomto algoritmu, na rozdíl od základní varianty algoritmu, se uvaºuje τí²ení sv╪tla od sv╪telného zdroje. Variantou tohoto postupu v radiaƒní metod╪ je tzv. metoda sledování fotonà (photon tracing).
Θtlum sv╪tla
Globální osv╪tlovací metody by rovn╪º m╪ly popisovat pohlcování sv╪tla v prost²edí, v n╪mº se τí²í, a jeho rozptyl na ƒásteƒkách prachu, vzduchu a aerosolà. Existují pom╪rn╪ p²esné popisy fyzikálních vlastností atmosféry a mrakà a tato data nacházejí stále více cestu do algoritmà, které se vyuºívají v poƒítaƒové grafice. Màºeme se tedy setkat s ràzn∞mi simulacemi pràletu atmosférou, s popisem takov∞ch jevà, jako je halo kolem Slunce ƒi M╪síce, s odrazem sv╪tla na sn╪hu atp. P²ísluτn∞ obrázek ukazuje scénu pono²enou do syntetické mlhy. Algoritmy ²eτící spolehliv╪ tyto úlohy jsou vτak bu╘ nesmírn╪ v∞poƒetn╪ nároƒné, nebo naopak nepodávají realistické v∞sledky, a tak si na p²esné algoritmy v této oblasti budeme muset z²ejm╪ jeτt╪ n╪jak∞ ten pátek poƒkat.
V algoritmech, které se pouºívají v praxi, se z t╪chto dàvodà povaºuje útlum prost²edí za konstantní a intenzita sv╪tla za klesající pouze s druhou mocninou vzdálenosti od sv╪telného zdroje. To je nesmírn╪ dàleºit∞ fakt, kter∞ umoºσuje v∞razn╪ urychlit velké mnoºství v∞poƒtà, protoºe se màºeme zab∞vat pouze t╪mi odrazy, které k v∞sledné kvalit╪ obrazu p²ispívají v∞razn╪jτí m╪rou, ²ekn╪me alespoσ deseti procenty pro jeden pixel. Pokud klesne intenzita sv╪tla pod námi zvolenou hodnotu, nemusíme se dalτím transportem paprsku v prostoru jiº zab∞vat.
Metoda sledování paprsku
Metoda rekurzivního sledování paprsku byla poprvé popsána n╪kdy kolem roku 1980. Od té doby se tento algoritmus stal snad nejznám╪jτí aplikací poƒítaƒové grafiky, zejména proto, ºe jeho v∞stupem jsou tzv. fotorealistické obrazy. Tyto velmi p²esv╪dƒivé a p²edevτím velice v╪rohodné obrazy p²isp╪ly k nesmírnému vzràstu atraktivity poƒítaƒové grafiky v oƒích laické ve²ejnosti a vedly moºná aº k p²ecen╪ní v∞znamu poƒítaƒové grafiky jako celku. Algoritmus sám o sob╪ není nijak zvláτ£ komplikovan∞, je vτak velice v∞poƒetn╪ nároƒn∞, a proto vznikla jeho ràzná vylepτení, která jiº sloºitá jsou.
Podstata algoritmu spoƒívá v tom, ºe se sleduje dráha sv╪tla, které prochází kaºd∞m pixelem obrazu. Toho se docílí tak (viz obrázek), ºe se vrhne paprsek sm╪rem od pozorovatele do kaºdého pixelu obrazovky. P²edpokládá se, ºe v poƒítaƒi je virtuální scéna, ve které jsou jednotlivé objekty a sv╪tla, a ºe poloze pozorovatele odpovídá virtuální kamera. Paprsek, kter∞ prochází pixelem, màºe mít ràzn∞ osud. Màºe se odrazit od n╪jakého objektu n╪kter∞m ze zpàsobà, které jsou uvedeny na zaƒátku ƒlánku, màºe narazit na jin∞ objekt, màºe zasáhnout n╪jakou ƒást scény, která ho pohltí, màºe se utlumit v mlze, màºe scénu zcela opustit, màºe se rozd╪lit na dva paprsky ƒi více paprskà, p²ípadn╪ zasáhnout sv╪teln∞ zdroj. Nejƒast╪jτím p²ípadem je samoz²ejm╪ opuτt╪ní scény a odraºení od n╪jakého objektu. Test pràseƒíku paprsku s n╪jak∞m objektem a v∞poƒet sm╪ru odraºeného paprsku je tedy nejdàleºit╪jτí souƒástí tohoto algoritmu. Vτechny uvedené p²ípady osudu paprsku musejí b∞t explicitn╪ testovány. ¼tená² znal∞ programování si jiº patrn╪ uv╪domil, ºe implementace algoritmu sledování paprsku jako objektového programu je pom╪rn╪ jednoduchá.
Samostatnou kategorií v této metod╪ je v∞poƒet vrºen∞ch stínà, které samoz²ejm╪ pocházejí od sv╪teln∞ch zdrojà. Ty se vypoƒítávají 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.
Jak je patrné, zásadní operací algoritmu je testování pràseƒíku paprsku s objektem. T╪chto operací se skuteƒn╪ provádí velice mnoho a ràzné techniky, které se pokouτejí o efektivní implementaci, se p²edevτím snaºí minimalizovat práv╪ tyto v∞poƒty. Nejƒast╪jτí praktikou je ràzn∞m zpàsobem rozd╪lit scénu a sdruºovat objekty do skupin. Je potom jasné, ºe pokud paprsek nezasáhne skupinu, nemàºe zasáhnout ani její jednotlivé objekty. Tomuto postupu se ²íká hierarchizace scény.
Jinou moºností je vyuºití 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. Tento test konƒívá neúsp╪chem ve více neº devadesáti procentech p²ípadà, a proto je hojn╪ vyuºíván.
Existují kilogramy literatury zab∞vající se urychlováním metody sledování paprsku. Tato oblast jeτt╪ není zdaleka uzav²ená - zejména proto, ºe algoritmus je komerƒn╪ velice úsp╪τn∞, a je tedy nesmírn╪ ƒasto pouºíván v praxi. Pràm╪rná doba v∞poƒtu jednoho snímku v rozliτení videa (i kdyº je samoz²ejm╪ t╪ºké ²íci, co je to pràm╪rn∞ snímek a na ƒem se poƒítá) se pohybuje n╪kde mezi jednou minutou aº n╪kolika hodinami. Je tedy zjevné, ºe urychlovací techniky jsou zde zcela na míst╪.
Jist╪ by se mnohé dalo urychlit hardwarov╪, ale jak se ukazuje, hardwarová akcelerace není vàbec jednoduchá. Algoritmus sám o sob╪ je rekurzivní, protoºe kaºd∞ paprsek se odrazí a tím generuje dalτí paprsek nebo paprsky. Rekurzivní algoritmy se ze své podstaty v hardwaru implementují obtíºn╪. Druh∞m problémem je, ºe není p²íliτ jasné, co by se v hardwaru m╪lo implementovat. Nejjednoduττí by bylo implementovat test pràseƒíku paprsek - objekt, ale objektà je celá ²ada, a které z nich by se tedy m╪ly vybrat? Sv╪tlem na konci tohoto tunelu je snad NURBS reprezentace, o níº jsme hovo²ili v jednom z p²edcházejících dílà seriálu a která se stává standardem v CAD a modelování vàbec. Tato reprezentace umoºσuje jednotné vyjád²ení vτech pouºívan∞ch objektà, a to jak klasick∞ch koulí a kvádrà, tak i voln╪ definovan∞ch ploch, které se pouºívají nap²íklad v CAD nebo ve strojírenství. K v∞poƒtu pràseƒíku s libovoln∞m objektem je tedy zapot²ebí jediná procedura, která vypoƒítá pràseƒík NURBS plochy s paprskem. Tento v∞poƒet vτak není nijak jednoduch∞, nicmén╪ objevují se jiº první vlaτtovky, a tak se snad doƒkáme hardwarov∞ch akcelerátorà pro metodu sledování paprsku uº v brzké dob╪.
Jak bylo ²eƒeno v∞τe, sledování paprsku màºeme ukonƒit tak, ºe se stanoví limit, pod kter∞ nesmí klesnout intenzita sv╪tla. To vτak platí v p²ípad╪, kdyº postupujeme od sv╪telného zdroje. V metod╪ sledování paprsku ale postupujeme od pozorovatele ke zdroji sv╪tla, takºe toto kritérium není moºné pouºít. Obyƒejn╪ se tedy stanovuje poƒet nezbytn∞ch odrazà a ukazuje se, ºe sedm je pro v╪tτinu aplikací zcela postaƒující. V n╪kter∞ch p²ípadech - nap²íklad ve scénách, kde jsou sklen╪né objekty - je nutné pouºít odrazà daleko více.
Jak jiº bylo ²eƒeno, metoda sledování paprsku v∞teƒn╪ popisuje p²enos sv╪tla mezi zrcadlov∞mi plochami. Obrázky, které jsou v∞stupem metody sledování paprsku, mají tedy charakteristické rysy, které jsou dàsledkem tohoto faktu. Obyƒejn╪ mají ostré stíny, jsou nep²irozen╪ lesklé a textury, které jsou na povrτích objektà, pàsobí p²i bliºτím pohledu nev╪rohodn╪. To nelze zlepτit zv∞τením kvality renderingu, ale jen pouºitím jin∞ch metod, konkrétn╪ takov∞ch, které simulují p²enos sv╪tla mezi difuzními povrchy.
S metodou sledování paprsku je spojeno n╪kolik nep²esností v terminologii, a proto se pokusím vysv╪tlit n╪které z nich hned na tomto míst╪.
Vrhání paprsku (ray casting) je zvláτtním p²ípadem sledování paprsku, ve kterém se neuvaºují ºádné odrazy. Jedná se tedy o pouhé vyτet²ení pràseƒíku paprskà vrºen∞ch od pozorovatele do scény s tím, ºe se mohou nebo nemusí vypoƒítávat stíny.
Distribuovaná metoda sledování paprsku (distributed raytracing) není paralelní nasazení metody sledování paprsku, ale metoda, která vrhá do jediného pixelu více paprskà. To se obyƒejn╪ provádí za úƒelem sníºení aliasu a jedná se v podstat╪ o vzorkování s vyττí frekvencí tak, jak bylo popsáno ve druhém dílu seriálu.
Paralelní sledování paprsku (parallel raytracing) je aplikací sledování paprsku na více poƒítaƒích ƒi procesorech. Obyƒejn╪ se aplikuje rozd╪lení obrazu na pruhy nebo ƒtverce a kaºd∞ z nich je vypoƒítáván na jiném procesoru.
Jak je ze schematického obrázku z²ejmé, metoda sledování paprsku poskytuje jedin∞, pohledov╪ závisl∞ v∞poƒet scény. To je její p²edností a nev∞hodou zároveσ. Pokud máme scénu, která se nijak nem╪ní, a jediné, co se v ní pohybuje, je kamera (walk through), musíme touto metodou vypoƒítávat scénu pro kaºd∞ snímek znovu, coº je ƒasov╪ nesmírn╪ nároƒné. V∞hodou pohledov╪ závislého renderingu je, ºe se vypoƒítávají pouze ty pixely, které jsou nezbytné. Bude-li nap²íklad n╪kde v dálce nesmírn╪ komplikovan∞ objekt, màºe se stát, ºe ho vàbec ºádn∞m paprskem nezasáhneme. Tato metoda je tedy ƒásteƒn╪ adaptivní v tom smyslu, ºe se zab∞vá pouze tím, co je nezbytn╪ nutné.
Radiaƒní metoda
Jiº jsem se zmínil o tom, ºe radiaƒní metoda popisuje p²enos mezi difuzními povrchy, coº metoda sledování paprsku neumoºσuje. Abychom zaƒali tam, kde jsme skonƒili v p²edcházejícím odstavci, znovu p²ipomínám, ºe tato metoda vypoƒítává sv╪telnou bilanci celé scény. Jin∞mi slovy ²eƒeno, jejím v∞sledkem není jedin∞ obrázek, ale vypoƒítané intenzity a barvy sv╪tla na vτech plochách ve scén╪. Jak∞m zpàsobem je zobrazíme, je potom na nás. Obyƒejn╪ se k tomu pouºívají hardwarové akcelerátory grafick∞ch pracovních stanic a OpenGL.
Je z²ejmé, ºe pokud se v takové scén╪ bude pohybovat pouze kamera, màºeme generovat velice efektivní pràchody scénou. Zcela podstatnou nev∞hodou je, ºe radiaƒní metoda neumoºσuje poƒítat scény, které jsou otev²ené. Z toho pramení i fakt, ºe radiaƒní metoda nachází aplikace hlavn╪ v architektu²e a stavebnictví, kde se pouºívá zejména pro simulaci interiérà.
Zatímco metoda sledování paprsku je zcela empirická, radiaƒní metoda je zaloºena na pozorování p²enosu energie mezi povrchy, a je tedy zaloºena na fyzikální bázi. Z toho plyne i pom╪rn╪ nep²íjemn∞ fakt, ºe její popis není zdaleka tak snadn∞ jako popis metody sledování paprsku, a stejn╪ tak je velice nároƒná i její implementace.
Velmi zjednoduτen╪ ²eƒeno pracuje radiaƒní metoda na tom principu, ºe se pro kaºdou plochu, která se ve scén╪ nachází, vypoƒítá, jak moc "vidí" ostatní plochy. K tomu se mohou pouºít klasické p²esné geometrické algoritmy, dnes se ale ƒast╪ji pouºívá aproximace pomocí ray castingu. Míra viditelnosti se oznaƒuje jako form factor a je úheln∞m kamenem celé metody, protoºe je nesmírn╪ v∞poƒetn╪ nároƒná. Musí se totiº vypoƒítat, jak kaºdá ploτka ovlivσuje kaºdou ploτku, a ve druhé fázi se z t╪chto údajà a z údajà o sv╪teln∞ch zdrojích vypoƒítá, kolik sv╪tla a odkud na kterou ploτku dopadá. Velice p²íjemné je, ºe tento v∞poƒet lze provád╪t inkrementáln╪, tedy tak, ºe se nejprve urƒí, co zasáhnou sv╪telné zdroje, poté se urƒí, co zasáhne první odraz, druh∞ atd. Tím ²eτení postupn╪ konverguje a je moºné je ukonƒit na základ╪ jiº n╪kolikrát zmiσovaného kritéria o útlumu sv╪tla se vzdáleností, p²ípadn╪ na základ╪ jin∞ch kritérií. Scéna se nám tak jakoby rodí p²ed oƒima, "vykukuje" z úplné tmy do stále se projasσujícího obrazu.
Dalτí jev, kter∞ radiaƒní metoda umoºσuje simulovat, je tzv. krvácení barev (color bleeding). To je dàsledkem difuzního odrazu sv╪tla a projevuje se tak, ºe nap²íklad na zcela bílé ploτe, která sousedí s plochou ƒervenou, jsou z²etelné ƒervené artefakty.
Zatímco ƒasová nároƒnost metody sledování paprsku se m╪²í v minutách, u radiaƒní metody jde spíτe o desítky minut aº hodiny. Tento fakt spoleƒn╪ s jiº zmín╪n∞m omezením radiaƒní metody na uzav²ené scény by tuto metodu zdánliv╪ odsuzovaly k nepouºitelnosti. Skuteƒn╪ komerƒních aplikací, které tuto metodu pouºívají, není zdaleka tolik, jako t╪ch, jeº pouºívají sledování paprsku, na druhou stranu je vτak tato metoda natolik obecná a navíc fyzikáln╪ korektní, ºe je p²edm╪tem velice intenzivního v∞zkumu v oblasti poƒítaƒové grafiky.
V p²edcházejících letech se chvíli zdálo, ºe cesta k simulaci vτech druhà odrazu vede p²es kombinaci sledování paprsku a radiaƒní metody. V souƒasné dob╪ radiaƒní metoda opustila své pàvodní hranice a stává se zcela obecn∞m, i kdyº ƒasov╪ stále neúnosn╪ nároƒn∞m nástrojem pro simulaci τí²ení sv╪tla v prostoru. Tím navíc poƒítaƒová grafika p²ekroƒila své hranice a stala se interdisciplinární, protoºe v∞sledky radiaƒní metody nacházejí uplatn╪ní i v takov∞ch aplikacích, jako je p²enos energie mezi objekty, simulace τí²ení sv╪tla, nauka o materiálech z hlediska optick∞ch vlastností aj.
Bed²ich Beneτ
Doporuƒená literatura:
A. Watt, M. Watt: Advanced Animation and Rendering Techniques, Addison Wesley 1992
J. ªára, B. Beneτ, P. Felkel: Moderní poƒítaƒová grafika, Computer Press 1998