Sledování paprsku

Sledování paprsků (z anglického ray tracing) je metoda renderování (výpočtu a zobrazení) 3D počítačové grafiky; přesněji řečeno metoda globálního osvětlení. Na rozdíl od běžného života, kdy se paprsky pohybují od zdroje, odráží se a lámou, až se nakonec střetnou s okem pozorovatele, zde paprsky vycházejí z kamery. To protože ze zdrojů světla vychází nekonečné množství paprsků a nedalo by se v rozumném čase spočítat, které dopadnou na pixely plátna, přes které se oko dívá. Tuto techniku používají například počítačové programy POV-Ray, Blender, Cinema 4D, OctaneRender, Corona Renderer nebo Redshift.

Historie 
Historie sledování paprsku sahá až do období první poloviny 16. století, kdy umělec Albrecht Dürer využíval lanka pro projekci správné perspektivy obrazu. Sledování paprsku popisoval také Isaac Newton v jeho knize Optika.

Do roku 2004 bylo sledování paprsku (ray tracing) prakticky nevyužívané kvůli nedostatečné výkonnosti hardware a převažovala metoda rasterizace. V roce 2006 společnost NVIDIA přišla s počítačovou architekturou CUDA, která zlepšila výpočetní výkon v reálném čase a umožnila tak širší využití této technologie.

Využívané algoritmy

Ray casting algoritmus 
Jedná se o předchůdce klasického rekurzivního ray tracingu. V porovnání s rekurzivním algoritmem je rychlejší, protože využívá čistě jednoduchých geometrických tvarů. Barva světla je počítačově vypočítána, ale již nebere v potaz odraz paprsku na okolní objekty. Tímto je technika velice omezena. Nedovoluje přesné vykreslování odrazů světla, přirozených stínů a refrakcí. Tyto efekty se dříve snažili lidé obejít použitím různých kreativních metod jako jsou vlastní texturové mapy.

Využití této techniky proslavil John Carmack v jeho počítačové hře Wolfenstein 3D (iD software).

Rekurzivní algoritmus 
Rekurzivní algoritmus sledování paprsku navazuje na Ray casting. Potom, co světlo dopadne na povrch, tak algoritmus vypočítá, zda se paprsky nerozdělí na další menší paprsky, které vytvoří odlesk a přirozené stíny.

V dnešní době je nejpoužívanější a pomocí tohoto algoritmu jsme schopní vytvořit fotorealistické obrázky, které perfektně simulují dopad světla, stíny, nebo i hloubku ostrosti fotoaparátu. Kvůli náročnosti výpočtů tento proces trvá značně déle. 

Přiblížení, jak algoritmus funguje:
Pro každý pixel v obraze
{
  Vytvoř paprsek mířící z oka skrze pixel roviny, kterou renderuješ
  Inicializuj NejbližšíT na NEKONEČNO a NejbližšíObjekt na ŽÁDNÝ

  Pro každý objekt ve scéně
  {
     Jestliže paprsek protíná tento objekt
     {
        Jestliže je vzdálenost protnutí t menší než NejbližšíT
        {
           Nastav NejbližšíT na vzdálenost protnutí t
           Nastav NejbližšíObjekt na tento objekt
        }
     }
  }

  Jestliže je NejbližšíObjekt roven ŽÁDNÝ
  {
     Vyplň tento pixel barvou pozadí
  }
  Jinak
  {
     Vyšli stínový paprsek ke každému zdroji světla (zjištění zdali je ve stínu pro difuzní a spekulární složku)
     Jestliže je povrch objektu odrazivý, vytvoř odražený paprsek (rekurze)
     Jestliže je povrch objektu průhledný, vytvoř refrakční paprsek (lom světla, rekurze)
     Použij NejbližšíObjekt a NejbližšíT k výpočtu stínovací funkce (barva objektu)
     Vyplň tento pixel výslednou barvou stínovací funkce
  }
}

Sledování paprsků v optice 
Metoda sledování paprsku (ray tracing) je též využívána k simulaci optických systémů.
Výhodou je univerzálnost metody. Metodu je možno použít i k simulaci systémů, jejichž analytický popis
je jen přibližný nebo není vůbec možný: nelineární optické prvky, prvky pro rentgenovou optiku, atd.
Nevýhodou je vysoká výpočetní náročnost metody.

Limitace Ray tracingu 
Přestože technologie sledování paprsku funguje dobře pro vypočítání bodových a směrových světel, nefunguje už tak dobře pro plošné světla. Jedná se o světla, která vyzařují záři po celém svém povrchu. Ray tracing využívá pro zjištění, zda je objekt osvětlený, odrazy stínů. Ty jsou ale pouze jednosměrné. Pro správnou implementaci je nutné využít různé odrazy stínů pro různé body v plošném světle. V praxi se využívá aproximace, která ale nedosahuje tak přesných výsledků.

Dalším problémem je to, že ray tracing nebere v potaz vyzařování světla u objektů, kde se světlo odráží (například u skla).

Galerie

Reference

Související články 
 radiozita
 Zobrazovací rovnice (rendering)

Externí odkazy 
 
 

Počítačová 3D grafika
Algoritmy počítačové grafiky