Sledování paprsku

Radiozitou v kombinaci s ray tracingem je možno dosáhnout až neuvěřitelného realizmu.

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.[1]

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.[1]

Využívané algoritmy

Počítačová hra Doom využívající metodu texturových map pro simulaci stínů a odrazů světla.

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.[2]

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

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.[3]

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ů.[4]

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).[4]

Galerie

Reference

  1. a b VINKLER, Marek. Raytracing on GPU [online]. Brno: 2010 [cit. 2022-11-06]. Dostupné online. 
  2. a b PEDDIE, Jon. What’s the Difference Between Ray Tracing, Ray Casting, and Ray Charles? [online]. 2016-02-02 [cit. 2022-11-19]. [www.electronicdesign.com/technologies/displays/article/21801219/whats-the-difference-between-ray-tracing-ray-casting-and-ray-charles Dostupné online]. 
  3. NIKODYM, Tomáš. Ray Tracing Algorithm For Interactive Applications [online]. Praha: 2010 [cit. 2022-11-19]. Dostupné v archivu pořízeném dne 2011-07-18. 
  4. a b Introduction to Computer Graphics, Section 8.1 -- Ray Tracing. math.hws.edu [online]. [cit. 2022-11-23]. Dostupné online. 

Související články

Externí odkazy

Média použitá na této stránce

Ray tracing with AA.png
Scéna vyrenderovaná ray tracingem s antialiasingem (supersampling), perspektivní projekcí a procedurálními texturami.
Freedoom aaa.png
Autor: Původně soubor načetl Liftarn na projektu Wikipedie v jazyce angličtina, Licence: GPL
Screenshot of en:FreeDoom from http://freedoom.sourceforge.net/screenshots/
Glasses 800 edit.png
This image was created by Gilles Tran with POV-Ray 3.6 using Radiosity. The glasses, ashtray and pitcher were modeled with Rhino and the dice with Cinema 4D.