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é programyPOV-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
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]
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]
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]
↑ abPEDDIE, 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].
↑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.
↑ ab Introduction to Computer Graphics, Section 8.1 -- Ray Tracing. math.hws.edu [online]. [cit. 2022-11-23]. Dostupné online.