Ray tracing
Z Wikipedii
Ray tracing (dosłownie śledzenie promieni) to technika renderowania fotorealistycznych scen 3D. Obecnie najpopularniejszy z systemów. Jest dość wolny, lecz daje dobre rezultaty, sytemy dające lepsze efekty są zwykle o wiele wolniejsze - często używa się systemów mieszanych.
Algorytm ray tracingu wygląda następująco:
- Z punktu w którym znajduje się kamera wypuszczany jest promień (półprosta) w kierunku rzutni. Rzutnia podzielona jest na piksele, jeden (lub więcej) promieni przechodzi przez każdy piksel.
- Wyszukiwane są wszystkie przecięcia promienia z obiektami. Tutaj szybkość algorytmu zależy nie tyle od efektywności wyznaczania współrzędnych punktu przecięcia promienia z powierzchnią obiektu, ale od tego by tych dokładnych obliczeń było jak najmniej, by przetwarzać tylko te obiekty, które wysłany w p.1 promień przecina. Mówiąc obrazowo: jeśli scena zawiera milion obiektów, by za każdym razem nie testować milion razy, czy promień przecina każdy z obiektów, ale testować jedynie te, które potencjalnie mogą mieć punkt przecięcia z promieniem.
- Spośród uzyskanych punktów przecięć wybiera się ten, który leży najbliżej kamery.
- Punkt ten jest następnie przetwarzany. Najpierw są wypuszczane promienie z tego punktu w kierunku każdego ze świateł na scenie, by określić które oświetlą przetwarzany punkt. Na tym etapie można wyznaczyć cienie, testując czy odcinek pomiędzy punktem przecięcia, a światłem przecina jakiś obiekt - innymi słowy, czy jakiś obiekt zasłania konkretne światło. Następnie dla wszystkich "widocznych" świateł, podstawie wektora normalnego w tym punkcie, oblicza się, używając zadanego modelu oświetlenia (np. Lamberta, Phonga, Metal Shading), jasność punktu. Dodatkowo uwzględnia się takie parametry jak kolor punktu (np. odczytany z tekstury).
- Jeśli obiekt jest przezroczysty to z tego punktu mogą zostać wypuszczanone dodatkowe promienie (rekursywny raytracking) - może to być zarówno promień odbity, jak i promień załamny - dla tych promieni algorytm jest powtarzany od punktu 2. Wówczas, nim przypisze się kolor danemu pikselowi, przetwarzane jest drzewo promieni; w programach, które umożliwiają rekursywny raytacking jest możliwe ograniczenie glębokości drzewa.
Napisanie programu który po prostu robi ray tracing nie należy do specjalnie trudnych zadań, konieczna geometria (Powierzchnie wielomianowe, Płaty Beziera, NURBS i kilka innych tworów) też nie jest specjalnie trudna.
W praktyce jednak nie był by on zbyt użyteczny bez:
- odpowiedniego interfejsu do tworzenia scen
- dobrej wydajności (którą nie jest już tak prosto osiągnąć)
- dość skomplikowanego systemu decydującego o tym co zrobić z suchymi danymi geometrycznymi (czyli systemu tekstur, odbić, świateł, przejrzystości itd.).
Dość poważnym problemem mogą być też sprawy zwiazane z błędami obliczeń zmiennoprzecinkowych, które mogą spowodować pojawienie się artefaktów.
[edytuj] Wady
Raytracing, mimo swoich zalet, nie jest idealnym sposobem tworzenia fotorealistycznych obrazów. Przede wszystkim słabo radzi sobie ze światłem rozproszonym i z modelowaniem bardziej skomplikowanych źródeł światła. Efektem są bardzo ostre, nierealistycznie wyglądające, krawędzie cieni.
Ponieważ raytracing operuje na pojedynczych promieniach, nie może prawidłowo modelować dyfrakcji, np. na pryzmacie, interferencji fal świetlnych i innych zjawisk falowych.
Stworzono wiele technik które stosowane samodzielnie, bądź razem z raytracingiem pozwalają obejść te wady. Są to m.in. radiosity, photon map i forward raytracing.