Animowana grafika 3D

Komentarze

Transkrypt

Animowana grafika 3D
Przetwarzanie obrazu i
dźwięku
Opracowanie: J. Kęsik
[email protected]
Oświetlenie
„Fiat lux! Et facta est lux” (Rdz 1, 3)
Wtedy Bóg rzekł: Niechaj się stanie światłość!
I stała się światłość.
Powierzchnia obiektu 3D jest renderowana
jako czarna jeżeli nie jest oświetlana żadnym
światłem
(wyjątkiem
są
obiekty
samoświecące)
Animowana grafika 3D - J. Kęsik
Oświetlenie
Generowanie oświetlenia i cieni obiektów 3D
na scenie jest zadaniem skomplikowanym i
wiąże się wieloma zasadami i prawami – nie
koniecznie
odpowiadającymi
fizycznemu
modelowi opisu zachowania fal świetlnych
Generalną zasadą jest dążenie do uzyskania
„odpowiedniego wyglądu” w sensownym*
czasie renderowania
*”sensowny” czas jest zależny od przeznaczenia
renderingu
Animowana grafika 3D - J. Kęsik
Oświetlenie
Powszechnie stosowaną metodą jest rozwiązywanie
zadania znajdowania oświetlenia na zasadzie:
obiekt JEST OŚWIETLANY przez źródła światła
Dla każdego obiektu (obszaru obiektu) obliczana jest
suma oświetlenia pochodząca od różnych źródeł
światła. W zależności od ilości i rodzaju źródeł światła
oraz możliwości karty graficznej obliczenie to
wykonywane jest w jednym lub kilku przebiegach
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Stosowany powszechnie w grafice 3D model
oświetlenia uwzględnia kilka możliwych
sytuacji
• Obiekt nie jest oświetlany, świeci własnym
światłem
• Obiekt jest oświetlony światłem jednakowo
rozproszonym - bezkierunkowym (ambient
light)
• Obiekt odbija kierunkowe światło
• W sposób idealnie rozproszony
• Uzyskując połysk
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Opisuje wynikowe natężenie oświetlenia obiektu w
danym punkcie – I
Natężenie to jest najczęściej mnożone przez wartość
koloru w tym punkcie (kolor obiektu lub punktu
tekstury) aby uzyskać wartość koloru piksela na
ekranie
Jeżeli światło padające nie jest białe, intensywność
zapisywana jest za pomocą koloru RGB a równanie
oświetlenia rozbijane na 3 składowe
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
W najprostszym przypadku – samoświecenia,
równanie to sprowadza się do
 = 
Gdzie ki jest współczynnikiem intensywności
świecenia obiektu
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Tak prosta wersja nie daje możliwości pokazania głębi
obiektu. Wszystkie piksele wewnętrzne świecą z
jednakową intensywnością powodując jego optyczne
spłaszczenie
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Oświetlenie bezkierunkowe jest opisywane
zbliżoną wersją równania
 =  
Gdzie Ia jest współczynnikiem natężenia
światła bezkierunkowego
a ka jest współczynnikiem odbicia światła
otoczenia przez obiekt
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Również w tym przypadku nie ma możliwości
ukazania głębi obiektu
Światło
otoczenia
symuluje
sytuację
jednolitego oświetlenia sceny światłem
powstałym z dużej ilości wielokrotnych odbić.
Umożliwia uwidocznienie wszystkich obiektów
sceny,
nawet
tych
nie
oświetlanych
bezpośrednio.
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Odbicie rozproszone (dispersed) zakłada sytuację
istnienia
światła
punktowego,
wysyłającego
jednakowe promienie we wszystkich kierunkach
Oświetlany obiekt ma powierzchnię idealnie matową.
Padające światło odbija się
równomiernie we wszystkich
kierunkach
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Jasność powierzchni w odbiciu rozproszonym
(Lambertowskim) zależy od kąta  między
dwoma wektorami:
• Wektorem jednostkowym L określającym
kierunek od punktu na obiekcie do źródła
światła
• Wektorem normalnym N (jednostkowym)
powierzchni obiektu w tym punkcie
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Odbicie rozproszone
Zależy od kąta padania światła
Nie zależy od kąta obserwacji powierzchni
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Odbicie rozproszone
Podlega
Lambertowskiemu
kosinusowemu
prawu
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Odbicie rozproszone jest więc opisywane
równaniem
 =    ∙  =   cos 
Gdzie Ip jest intensywnością światła
punktowego a kd jest współczynnikiem
intensywności odbicia rozproszonego obiektu
Kąt Θ musi zawierać się w zakresie <0,90)
stopni,
dla
wszystkich
innych
kątów
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Odbicie rozproszone
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Wariantem
światła
punktowego
jest
światło
kierunkowe, zakładające że źródło światła znajduje
się w znacznej odległości od obiektów.
Wtedy można założyć, że dla wszystkich obszarów o
tej samej wartości (skierowaniu) N, wartość kąta
∙
jest jednakowa
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Tłumienie światła zakłada że obiekty
znajdujące się w różnej odległości od źródła
światła są oświetlane z różną intensywnością
Zgodnie z teorią rozchodzenia się fali kulistej,
moc światła powinna maleć wraz z kwadratem
odległości
 =
1

Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
W grafice 3D wprowadzony został jednak
bardziej „odpowiedni” współczynnik tłumienia
 =
1
1 +2  +3  2
przy założeniu, że nie może on przekroczyć
wartości 1.
Stałe c1, c2, c3 są określane empirycznie
przez projektanta
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Równanie
oświetlenia
uwzględniające
dotychczasowe rozważania, miałoby postać
 =   +    cos 
A w przypadku wielu źródeł światła

 =   +
   cos 
=1
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Jeszcze bardziej ogólny wzór uwzględnia
możliwość padania światła kolorowego (RGB)
na powierzchnię o różnych współczynnikach
odbicia (ambient i dispersed) dla każdej
składowej
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Odbicie zwierciadlane (idealne)
Przedstawia
sytuację
idealnie
gładkiej
powierzchni, od której odbija się padające na
nią światło
Kąt odbicia jest równy kątowi padania światła
w stosunku do wektora normalnego
Światło odbija się tylko pod kątem odbicia a
jego kolor nie jest zależny od koloru
powierzchni odbijającej
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Prawo Snella
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Odbicie zwierciadlane (idealne)
Może zależeć od kąta padania światła
Jest widoczne tylko przy obserwacji
kierunku R
Animowana grafika 3D - J. Kęsik
z
Model oświetlenia
Równanie oświetlenia
Odbicie zwierciadlane (nieidealne)
Przedstawia bardziej rzeczywistą sytuację
gdzie odblask jest widoczny także z innego
kierunku niż kierunek odbicia światła
Odblask maleje wraz ze wzrostem kąta α
między kierunkiem obserwacji a kierunkiem
odbicia
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Odbicie zwierciadlane (nieidealne)
(specular)
Może zależeć od kąta padania światła
Jest zależne od kąta α między kierunkiem
odbicia i kierunkiem obserwacji
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Odbicie zwierciadlane jest więc opisywane
równaniem
 =     cos ∝
Gdzie
W(Θ)
jest
współczynnikiem
intensywności odbicia zwierciadlanego, często
ustalanym jako wartość stała <0,1>
A n jest wykładnikiem odbicia, określającym
„szerokość” rozbłysku – szybkość zanikania
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Odbicie zwierciadlane
Źródło: http://pl.wikipedia.org/w/index.php?title=Plik:Phong_shading-balls.jpg&filetimestamp=201002231
n = 1, 5, 10, 20, 50, 100
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Przybliżoną wartość wektora odbicia R można
obliczyć ze wzoru
 = 2  ∙  − 
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia
Model uwzględniający wszystkie rodzaje
oświetlenia został opracowany przez Phong
Buoi-Tuonga w 1975r.
można go zapisać wzorem

   cos  +   cos ∝
 =   +
=1
Animowana grafika 3D - J. Kęsik
Model oświetlenia
Równanie oświetlenia Phonga
Źródło: http://wazniak.mimuw.edu.pl/images/3/3d/GKIW_M8_Slajd_08.pn
Animowana grafika 3D - J. Kęsik
Cieniowanie
Korzystając z modelu Phonga, można
wyznaczyć kolor (intensywność oświetlenia) w
dowolnym punkcie obiektu
Obliczanie oświetlenia dla każdego punktu nie
jest jednak możliwe ze względu na
• ograniczenia sprzętowe
• ograniczenia w dokładności modelu obiektu
Animowana grafika 3D - J. Kęsik
Cieniowanie
Najprostszą metodą wyznaczania oświetlenia
obiektu (cieniowania) jest cieniowanie płaskie
Każdy wielokąt siatki opisującej obiekt jest
cieniowany stałą wartością intensywności
oświetlenia.
Intensywność ta jest wyznaczana dla wektora
normalnego wielokąta
Animowana grafika 3D - J. Kęsik
Cieniowanie
Najprostszą metodą wyznaczania oświetlenia
obiektu (cieniowania) jest cieniowanie płaskie
Animowana grafika 3D - J. Kęsik
Cieniowanie
Podstawową wadą tego cieniowania jest
występowanie ostrych przejść koloru na
krawędziach wielokątów opisujących obiekt.
Cieniowanie to będzie poprawne tylko wtedy
gdy krawędzie wielokątów siatki odpowiadają
krawędziom rzeczywistym obiektu
W innych przypadkach konieczna jest
interpolacja – wygładzenie przejść kolorów
między wielokątami
Animowana grafika 3D - J. Kęsik
Cieniowanie
Cieniowanie Gouraud
W tej metodzie brane są pod uwagę wektory
normalne wierzchołków wielokąta (trójkąta)
Dla każdego wierzchołka obliczany jest kolor
oświetlenia.
Kolory pikseli wypełnienia trójkąta obliczane są
na podstawie interpolacji biliniowej kolorów
wierzchołków
Animowana grafika 3D - J. Kęsik
Cieniowanie
Cieniowanie Gouraud
Animowana grafika 3D - J. Kęsik
Cieniowanie
Cieniowanie Gouraud
W przypadku braku wektora normalnego
wierzchołka, jest on wyznaczany z uśrednienia
wektorów normalnych wszystkich ścian do
których należy dany wierzchołek
Animowana grafika 3D - J. Kęsik
Cieniowanie
Cieniowanie Gouraud
Animowana grafika 3D - J. Kęsik
Cieniowanie
Cieniowanie Gouraud
Zaletą tego cieniowania jest zniwelowanie
efektu ostrego przejścia między krawędziami
wielokątów
Wadą jest
• zanik ostrych krawędzi na powierzchni
obiektu
Animowana grafika 3D - J. Kęsik
Cieniowanie
Cieniowanie Gouraud
Zaletą tego cieniowania jest zniwelowanie
efektu ostrego przejścia między krawędziami
wielokątów
Wadą jest
• zła realizacja odbić zwierciadlanych
•
•
•
Ignorowanie rozbłysku wewnątrz trójkąta
„trójkątny” kształt rozbłysku
Skokowa zmiana rozbłysku podczas animacji
Animowana grafika 3D - J. Kęsik
Cieniowanie
Cieniowanie Gouraud
Animowana grafika 3D - J. Kęsik
Cieniowanie
Cieniowanie Phong
W tej metodzie brane są pod uwagę wektory
normalne wierzchołków wielokąta (trójkąta)
Wektory te służą jako wektory wyjściowe do
określenia (interpolacji) wektorów normalnych
dla każdego piksela w trójkącie
W każdym z pikseli obliczana jest jasność
według określonego modelu (np. Phong)
Animowana grafika 3D - J. Kęsik
Cieniowanie
Cieniowanie Phong
Animowana grafika 3D - J. Kęsik
Cieniowanie
Cieniowanie Phong
Animowana grafika 3D - J. Kęsik
Cieniowanie
Cieniowanie Phong
Zaletą tego cieniowania jest uzyskiwanie
gładkich przejść oraz możliwość generowania
odbić mniejszych od wielkości wielokąta
Wadą jest
• Znacznie większa złożoność obliczeniowa
•
•
Wyznaczanie wektora normalnego 3x bardziej
złożone
Obliczanie jasności w każdym pikselu
Animowana grafika 3D - J. Kęsik
Cieniowanie - porównanie
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Ray tracing jest techniką renderowania
będącą obecnie podstawą wielu algorytmów
fotorealistycznych
Po raz pierwszy wykorzystana w 1980 przez
Turnera Whitteda
Dzięki ray tracingowi można uzyskać szereg
efektów oświetlenia (dokładne cienie i odbicia,
przenikania
przez
powierzchnie
przezroczyste, również ugięte)
Znaczący wzrost jakości wizualnej za cenę
poważnego zwielokrotnienia obliczeń
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Podstawowy pomysł to symulacja przebiegu
promienia światła od źródła światła do
obserwatora
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Dwa
możliwe
podejścia:
Wyznaczanie
promieni wychodzących ze źródła światła
Nieefektywne obliczeniowo
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Dwa
możliwe
podejścia:
Wyznaczanie
promieni docierających do obserwatora
Właściwy Ray-tracing
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Wyznaczanie
pojedynczego
promienia
wymaga określenia czy ten promień przecina
się z którymkolwiek z prymitywów (miliony)
Podstawowy
problem
to
stworzenie
algorytmu, nie tylko umożliwiającego takie
obliczenia ale wykonującego je w sposób
najbardziej efektywny
Śledzenie pojedynczego promienia jest
skomplikowanym zadaniem a wykonanie
obrazu wymaga prześledzenia ogromnej ilości
promieni
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Real time?
Quake3 : Raytraced
(2005)
20 klatek 512x512 na sek.
36 GHz klaster 20 AMD
1800XP
http://graphics.cs.unisb.de/~sidapohl/egoshooter/
W chwili obecnej pierwsze karty graficzne z potokami raytrace
Animowana grafika 3D - J. Kęsik
Gry z raytracingiem do końca roku…
Śledzenie promieni
Promień jest elementem geometrycznym,
posiadającym punkt początkowy i kierunek
Zapis promienia w 3D wymaga dwóch
wektorów 3 wartościowych (3D)
Wektor 3D źródła – origin
Wektor 3D kierunku – direction
(znormalizowany)
class Ray {
Vector3 Origin;
Vector3 Direction;
};
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Algorytm
śledzenia
rozpoczynamy
„wypuszczając” promienie z kamery w
kierunku sceny, każdy promień odpowiada
jednemu pikselowi obrazu
Kolejność generowania pikseli obrazu nie ma
większego znaczenia. Dla każdego piksela
obrazu wyznaczany jest promień podstawowy
(primary ray)
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Źródłem promienia jest pozycja kamery
Kierunek wyznaczany jest wg. zasady
• Wyznaczenie wektorów kierunków dla 4
rogów obrazu
• Aproksymacja kierunku promienia na
podstawie położenia piksela
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Promień
podstawowy
jest
następnie
testowany na okoliczność przecięć z
prymitywami sceny
• Jeżeli promień nie przecina się z niczym to
piksel przyjmuje kolor „tła”
• W innym przypadku musimy wyznaczyć
pierwszy z prymitywów, w który trafił
promień (najbliższy kamerze)
W miejscu przecięcia musimy wyznaczyć:
pozycję, kolor, normalną, współrzędne
tekstury i in. (interpolacja danych werteksów)
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Dane punktu przecięcia
zapisane następująco:
class Intersection {
Vector3 Position;
Vector3 Normal;
Vector2 TexCoord;
Material *Mat;
float Distance;
//
przecięcia
};
odległość
mogłyby
od
źródła
Animowana grafika 3D - J. Kęsik
być
do
Śledzenie promieni
Mając pozycję przecięcia możemy w tym
miejscu obiektu wyznaczyć oświetlenie
według dowolnego modelu (np. Phong)
Efektem będzie uzyskanie koloru, jaki
przyjmie piksel obrazu (w najprostszym
przypadku kolor obiektu w punkcie przecięcia)
Zakończenie algorytmu na tym etapie
skutkowałoby obrazem nie lepszym (a
czasem gorszym) niż uzyskanym tradycyjnymi
metodami
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Śledzenie promieni zakończone na pierwszym
etapie (model oświetlenia ambient)
Animowana grafika 3D - J. Kęsik
Śledzenie promieni
Wiele
algorytmów
śledzenia
promieni
przewiduje kontynuację poprzez wyznaczenie
nowych promieni z punktu przecięcia
promienia podstawowego
Istnieje kilka typów promieni generowanych z
miejsca przecięcia. Wszystkie te promienie
określane są mianem promieni drugorzędnych
(secondary rays)
Animowana grafika 3D - J. Kęsik
Shadow rays
Shadow rays odpowiadają za określenie, czy
miejsce przecięcia jest oświetlone konkretnym
światłem.
Za ich pomocą można w stosunkowo łatwy
sposób wyznaczyć cienie. Chcąc tego
dokonać, wyznaczamy z punktu przecięcia
promienie do każdego źródła światła
znajdującego się po właściwej stronie
prymitywu (kąt mniejszy niż 90 stopni do
normalnej)
Animowana grafika 3D - J. Kęsik
Shadow rays
Światło z danego źródła będzie wzięte pod
uwagę tylko wtedy, gdy promień do tego
źródła nie przecina żadnego innego
prymitywu.
W takim przypadku w równaniu oświetlenia
np. Phonga współczynniki intensywności
diffuse i specular światła zacienionego
przyjmą wartość = 0
Animowana grafika 3D - J. Kęsik
Shadow rays
W obliczeniu oświetlenia nie jest brane pod uwagę źródło 5 a
źródła 1 i 4 mają wyzerowane współczynniki.
4
2
3
1
5
Animowana grafika 3D - J. Kęsik
Shadow rays
Shadow rays nie potrzebują znać parametrów
punktu przecięcia z prymitywem, wystarczy
parametr binarny wystąpienia przecięcia
Dzięki temu generowane są nieco szybciej niż
standardowe promienie
Dobrą praktyką przy generowaniu shadow
rays jest przesunięcie źródła promienia o
nieznaczną odległość w kierunku normalnej
prymitywu. Unika się w ten sposób
potencjalnego błędu zaokrągleń mogącego
spowodować wykrycie przecięcia własnej
Animowana grafika 3D - J. Kęsik
powierzchni
Shadow rays
Shadow rays
Animowana grafika 3D - J. Kęsik
Reflection rays
Kolejną
możliwością
raytracingu
jest
generowanie
dokładnych
odbić
od
skomplikowanych powierzchni.
Gdy
promień
podstawowy
trafia
w
powierzchnię lustrzaną, tworzony jest promień
odbicia. Promień ten, podobnie jak promień
główny testowany jest na okoliczność
przecięcia z obiektami sceny.
Animowana grafika 3D - J. Kęsik
Reflection rays
Promień odbicia wyznaczany jest na
podstawie promienia głównego i wektora
normalnego
n
d
r
r  d  2d  n n
Animowana grafika 3D - J. Kęsik
Reflection rays
Gdy promień odbicia natrafi na obiekt,
możliwe są dwa przypadki:
1. Powierzchnia obiektu nie jest lustrzana.
2. Powierzchnia obiektu jest lustrzana
W 1 przypadku obliczany jest kolor w punkcie
przecięcia (z uwzględnieniem shadow rays)
W przypadku 2 rekursywnie generowany jest
następny promień odbicia…
W przypadku wielu luster istnieje możliwość
wystąpienia pętli nieskończonej. Zapobiega
się temu przez ograniczenie głębokości
rekursji do np. 10 poziomów
Animowana grafika 3D - J. Kęsik
Reflection rays
Powierzchnia obiektu jest lustrzana
Animowana grafika 3D - J. Kęsik
Reflection rays
W rzeczywistości rzadko mamy do czynienia z
idealnymi lustrami
Prawdziwe lustro odbije maksymalnie 95-98%
światła padającego.
Niektóre powierzchnie mogą powodować
odbarwienia odbitego światła
Taką
sytuację
symuluje
się
przez
przemnażanie koloru światła padającego
przez kolor lustra przy odbiciu od niego.
Animowana grafika 3D - J. Kęsik
Reflection rays
Możemy
również
symulować
odbicia
rozproszone. W takim przypadku dla punktu
przecięcia obliczane jest pełne równanie
oświetlenia,
zawierające
składnik
rozproszenia jak i odbicia (należy uwzględnić
również shadow rays dla tego punktu) a
następnie dodawana wartość pochodząca od
promienia
odbicia
(z
wagami
odpowiadającymi zachowaniu energii)
Animowana grafika 3D - J. Kęsik
Transmission rays
Ray tracing pozwala również na dokładne
renderowanie
ugięcia
światła
przy
przechodzeniu
przez
przezroczyste
powierzchnie.
Gdy promień pada na powierzchnię
przezroczystą, generowany jest nowy promień
przenikania i analizowany dalej podobnie jak
promień odbicia
Animowana grafika 3D - J. Kęsik
Transmission rays
Zgodnie
z
prawem
Snella
promień
przenikający z jednego środowiska do
drugiego, będzie odchylony od normalnej pod
kątem
wynikającym
ze
wzoru
(n1sinθ1=n2sinθ2), gdzie n1 i n2 są
współczynnikami
przenikania
dla
obu
środowisk
r  d  2d  n n
n1
z  d  d  n n 
n2
2 

t  z   1  z n


n
d
r
θ1
n1
z
n2
θ2
t
Animowana grafika 3D - J. Kęsik
Transmission rays
Gdy światło przemieszczające się w
środowisku
o
wysokim
współczynniku
przenikania trafia na materiał o niskim
współczynniku przenikania pod ostrym kątem,
następuje całkowite wewnętrzne odbicie.
W takim przypadku nie jest generowany
promień przenikania
n
d
r
θ1
n1
z
n2
Animowana grafika 3D - J. Kęsik
Transmission rays
Odbicie całkowite można wykryć sprawdzając
czy długość wektora z jest większa od 1. W
tym przypadku wektora t nie można obliczyć
(ujemna wartość pierwiastka)
n1
z  d  d  n n 
n2
2 

t  z   1  z n


Animowana grafika 3D - J. Kęsik
Transmission rays
Gdy
światło
trafia
na
powierzchnię
przezroczystą, często oprócz przenikania
widzimy odbicie. Dlatego natrafienie na taką
powierzchnię
powoduje
wygenerowanie
dwóch promieni (odbicia i przenikania),
przeanalizowanie ich i połączenie uzyskanych
kolorów.
Wynikiem każdego z promieni jest kolor jaki
„widzi” dany promień. W przypadku promieni
głównych jest to kolor ostateczny piksela. W
przypadku promieni pośrednich ich kolor jest
połączony w wynikowy kolor piksela
Animowana grafika 3D - J. Kęsik
Transmission rays
Promień odbicia
N
Promień
główny
Promień
przenikania
Animowana grafika 3D - J. Kęsik
Transmission rays
Równania
Fresnela
n2 (n  d)  n1 (n  t )
określają proporcje między rhor  n (n  d)  n (n  t )
2
1
światłem przenikającym (ft)
a odbitym (fr).
Uwzględniają równania dla
n1 (n  d)  n2 (n  t )
r 
światła
spolaryzowanego wert n (n  d)  n (n  t )
1
2
horyzontalnie i wertykalnie
(najczęściej uśrednione do
1 2
jednej wartości)
2
fr 
(rhor  rwert )
2
f t  1 .0  f r
Animowana grafika 3D - J. Kęsik
Recursive Ray Tracing
Klasyczny algorytm raytracingu uwzględnia
cienie, odbicia, przenikania i nietypowe
materiały
Pojedynczy
promień
główny
może
wygenerować
znaczną
ilość
promieni
pośrednich w zależności od ilości źródeł
światła i ułożenia obiektów
Promienie te układają się
w strukturę
drzewiastą
Animowana grafika 3D - J. Kęsik
Recursive Ray Tracing
Przykład
itd.
Animowana grafika 3D - J. Kęsik
Recursive Ray Tracing
Przykład
Animowana grafika 3D - J. Kęsik
Ray Tracing
Obrazy wyrenderowane klasyczną metodą
raytracingu mogą zawierać cienie, dokładne
odbicia pomiędzy obiektami
i efekty
przezroczystości
Wadą jest wrażenie zbytniej ostrości
uzyskanego obrazu (aliasing) z powodu
ograniczenia do punktowych źródeł światła i
idealnego odbicia od powierzchni. Dzieje się
tak z powodu wykorzystywania pojedynczych
promieni przy określaniu cieni, odbić i
przenikań
Animowana grafika 3D - J. Kęsik
Stohastic Ray Tracing
Pewne wygładzenie krawędzi można uzyskać
zaburzając kierunki promieni głównych tak
aby kierowały się losowo w ramach obszaru
zajmowanego przez piksel
Animowana grafika 3D - J. Kęsik
Distribution Ray Tracing
Rozproszone
śledzenie
promieni
jest
rozszerzeniem klasycznego podejścia –
zakłada
wyprowadzenie
w
miejsce
pojedynczego promienia wiązki kilku(nastu)
promieni
Jest to technika pozwalająca uzyskać bardzo
naturalne efekty za cenę kolejnego,
znacznego zwielokrotnienia obliczeń
(setki a nawet tysiące promieni dla jednego
piksela)
Animowana grafika 3D - J. Kęsik
Distribution Ray Tracing
Za pomocą takiego podejścia można uzyskać:
• Antyaliasing – przy stosowaniu wiązki dla
promieni głównych (dla pojedynczego
piksela)
• Uwzględnienie powierzchni emitującej
światło – rozproszone cienie
• Rozmyte odbicia i przenikania
• Rozmycie zbliżeniowe (focus blur)
• Motion Blur
Animowana grafika 3D - J. Kęsik
Distribution Ray Tracing
Przykład
itd.
itd.
Distribution Ray Tracing
Animowana grafika 3D - J. Kęsik
Distribution Ray Tracing
Animowana grafika 3D - J. Kęsik
Distribution Ray Tracing
Animowana grafika 3D - J. Kęsik
Przecięcia promieni
Podstawowym
elementem
algorytmu
raytracingu jest system określający w co trafił
promień
Typowa scena może zawierać miliony
prymitywów
Przymitywy te mogą być po prostu trójkątami
albo być złożone – w takim przypadku
następuje teselacja (podzielenie siatki na
trojkąty)
Animowana grafika 3D - J. Kęsik
Przecięcia promieni
Scena jest zbudowana z pewnej liczby
obiektów – składających się z prymitywów
i/lub innych obiektów
Aby obiekt był renderowalny, potrzebujemy
procedury określającej przecięcie tego obiektu
z promieniem.
Dla różnych rodzajów obiektów można
zdefiniowac inne procedury wyznaczania
przecięcia.
Animowana grafika 3D - J. Kęsik
Przecięcia promieni
Promień - sfera
Promień ma źródło w punkcie p i kierunek u a
sfera ma środek w punkcie c i promień r
p
u
c
r
Animowana grafika 3D - J. Kęsik
Przecięcia promieni
Promień - sfera
Promień jest zbiorem punktów p+αu, dla α≥0
Znajdujemy punkt q, który jest punktem na linii
promienia leżącym najbliżej środka sfery
Linia qc musi być prostopadła do wektora u,
czyli (q-c)·u=0, lub (p+αu-c)·u=0
Z tego możemy obliczyć: α=-(p-c)·u, takie że
q=p-((p-c)·u)u
q
p
u
c
Animowana grafika 3D - J. Kęsik
Przecięcia promieni
Promień - sfera
Następnie sprawdzamy czy q znajduje się
wewnątrz sfery: |q-c|≤r
Gdy q jest poza sferą promień jej nie przecina
Gdy q jest w środku sfery – poszukujemy
punktu przecięcia z powierzchnią sfery
Promien przebija powierzchnie w 2 punktach
q1 i q2:
q2
q1
p
u
q
c
Animowana grafika 3D - J. Kęsik
Przecięcia promieni
Promień - sfera
Pozycje przebić:
q1=p+(α-a)u)
q2=p+(α+a)u)
gdzie a=sqrt(r2-|q-c|2)
Dla α-a≥0, promień przebija sferę w punkcie
q1, dla α-a<0 q1 znajduje się bliżej niż źródło
promienia (jest ono wewnątrz sfery)
q2
q1
Wtedy wybieramy q2
q
p
u
c
Animowana grafika 3D - J. Kęsik
Przecięcia promieni
Promień – powierzchnia płaska
Powierzchnia taka jest zdefiniowana przez
wektor normalny n i odległość d od środka
układu wsp.
Testując przecięcie obliczamy punkt q
przecięcia promienia z płaszczyzną, by q
leżało na płaszczyźnie:
d=q·n=p·n+αu·n
więc
α=(d-p·n)/(u·n)
Jeżeli (u·n)=0 to promień jest równoległy do
płaszczyzny
Dla α≥0 promień przecina płaszczyznę
Animowana grafika 3D - J. Kęsik
Przecięcia promieni
Promień – trójkąt
Sprawdzenie przecięcia polega najpierw na
sprawdzeniu przecięcia z płaszczyzną, na
której leży trójkąt (można również sprawdzić
kierunek trójkąta – backface culling).
Gdy punkt q przecięcia promienia z
płaszczyzną, musimy sprawdzić czy leży on
wewnątrz trójkąta
Animowana grafika 3D - J. Kęsik
Przecięcia promieni
Promień – trójkąt
p
u
v0
v2
•q
v1
Animowana grafika 3D - J. Kęsik
Przecięcia promieni
Promień – trójkąt
Jedna z prostrzych obliczeniowo metod
uwzględnia wsp. barycentryczne punktu q
v2
q' =q-v0
e1=v1-v0
β
e2=v2-v0
α=(q'·e2)/(e1·e2) v0
α
β=(q'·e1)/(e1·e2)
q
v1
Gdy α<0, β<0 lub α+β >1 to punkt q znajduje
Animowana grafika 3D - J. Kęsik
się poza trójkątem
Przecięcia promieni
Promień – trójkąt
Jedna z prostrzych obliczeniowo metod
uwzględnia wsp. barycentryczne punktu q
v2
q' =q-v0
e1=v1-v0
β
e2=v2-v0
α=(q'·e2)/(e1·e2) v0
α
β=(q'·e1)/(e1·e2)
q
v1
Gdy α<0, β<0 lub α+β >1 to punkt q znajduje
Animowana grafika 3D - J. Kęsik
się poza trójkątem
Metody akceleracji
Przykład
• Obraz 1280x1024 - przeciętnie 10
promieni/piksel
• 1000 obiektów różnych typów
• 3 poziomy rekurencji
~39321600000 testów przecięć
Dla prędkości 100 000 testów/s rendering
potrwa ponad 100 dni!
Akceleracja jest konieczna
Animowana grafika 3D - J. Kęsik
Metody akceleracji
Struktury akceleracji
Są to zestawy danych grupujące obiekty w
taki sposób, że można wydzielić z nich
podgrupę obiektów, dla której będziemy
sprawdzać przecięcie z promieniem
Większość tego typu struktur bazuje na
hierarchicznym
podziale
przestrzeni
otaczającej grupę obiektów
Animowana grafika 3D - J. Kęsik
Metody akceleracji
Hierarchie przestrzeni otaczającej (omawiane
częściowo wcześniej)
Generalnie tworzymy otoczenie sceny (sfera,
sześcian itp) a następnie dzielimy go na
obszary tego samego typu (mniejsze sfery…)
Testując promień sprawdzamy jego zderzenie
z
poszczególnymi
poziomami
otoczeń
dochodząc do obszarów zawierających
rzeczywiste prymitywy
Taka metoda redukuje ilość testów z O(n) do
O(log n), gdzie n jest ilością prymitywów
Animowana grafika 3D - J. Kęsik
Metody akceleracji
Wykorzystywane hierarchie to:
•
•
•
•
•
•
Drzewa ósemkowe
Drzewa KD
Drzewa BSP
Siatki jednolite
Hierarchie sferowe
Drzewa hierarchiczne
Animowana grafika 3D - J. Kęsik
Metody akceleracji
Wykorzystywane hierarchie to:
• Drzewa ósemkowe
Podział wg. Zasady: Jeżeli sześcian zawiera
więcej niż graniczna liczbę prymitywów – jest
dzielony na 8 jednakowych sześcianów
Jest to struktura regularna, łatwa do
automatycznego wyznaczenia – tworzy
jednak dużo niepotrzebnie rozdrobnionych
przedziałów
Animowana grafika 3D - J. Kęsik
Metody akceleracji
Wykorzystywane hierarchie to:
• Drzewa KD
Podział wg. Zasady: Jeżeli równoległobok
zawiera
więcej
niż
graniczna
liczbę
prymitywów – jest dzielony na 2 niejednakowe
równoległoboki.
Podział
następuje
w
arbitralnie wybranym punkcie
Nieco
lepiej
dopasowuje
się
do
nieregularnych kształtów – dobrze spisuje się
w raytracingu
Animowana grafika 3D - J. Kęsik
Metody akceleracji
Wykorzystywane hierarchie to:
• Drzewa BSP (binary space partitioning)
Podział wg. Zasady: Jeżeli obszar zawiera
więcej niż graniczną liczbę prymitywów – jest
dzielony na 2 niejednakowe części za pomocą
płaszczyzny nie koniecznie równoległej do osi
wsp.
Lepsze wyniki niż drzewa KD – bardziej
skomplikowany algorytm doboru miejsca
cięcia
Animowana grafika 3D - J. Kęsik
Metody akceleracji
Wykorzystywane hierarchie to:
• Siatki Jednolite
Podział na jednolite obszary (np. sześciany)
Zysk na szybkości metody, strata na zajętości
pamięci dla skomplikowanych scen.
Niewygodne przy dużym zróżnicowaniu
wielkości obiektów – rzadko stosowane w
raytracingu (tylko szczególne przypadki)
Animowana grafika 3D - J. Kęsik
Metody akceleracji
Wykorzystywane hierarchie to:
• Hierarchie sferowe
Sfera jest dzielona na podsfery obejmujące jej
obszar – sfery się nakładają. Łatwość
wyznaczenia przecięcia za cenę redundancji
Nie są zbyt popularne ze względu na
trudności z automatycznym określeniem
podziału
Animowana grafika 3D - J. Kęsik
Metody akceleracji
Wykorzystywane hierarchie to:
• Drzewa hierarchiczne
Działają na podobnej zasadzie jak drzewa
ósemkowe
ale
dopuszczają
podział
poszczególnych bloków na dowolnie dobrana
ilość części
Bardzo dobrze sprawdzają się w raytracingu
Animowana grafika 3D - J. Kęsik
Metody akceleracji
Rozwinięciem tych struktur jest wprowadzenie
możliwości zagnieżdżania struktur różnego
typu
Np. jeden z sześcianów drzewa ósemkowego
może zawierać wewnątrz strukturę drzewa
BSP
Animowana grafika 3D - J. Kęsik
Teksturowanie
Polega na mapowaniu płaskich (i nie
tylko) obrazów na trójwymiarowe bryły
 Jest prostym sposobem na
zwiększenie wizualnej złożoności
sceny o stosunkowo niewielkiej liczbie
trójkątów

Po co tekstura
Uzyskanie wrażenia realizmu bez nadmiernego zagęszczania
siatki
Współrzędne tekstury 2D
W dwu wymiarze współrzędne tekstury są
podawane w układzie U,V (s,t)
Wartości U, V są znormalizowane do 1


V
Tekstura jest opisana jako tablica
wartości RGB
1.0
Każdy element tekstury jest
nazwany “tekselem” (ang. texel)
Tekstury są najczęściej
obrazkami kwadratowymi o
rozdzielczości =^2 np. 256x256
0.0
1.0
U
Mapowanie tekstury
0.1
0.0
V
Tekstura
1.1
1.0
Wynik
1.0
0.0
Polygon
1.0
U
Mapowanie tekstury
(1,1)
t1
v1
v0
v
t2
(0,0)
t0
u
Wsp. tekstury
v2
Trójkąt (w dowolnej przestrzeni 3D)
Mapowanie tekstury
• Kafelkowanie - tiling
(1,1)
(0,0)
v
u
Wsp. tekstury
Kafelkowanie


Zachodzi gdy współrzędne wykraczają poza 1
Od budowy tekstury zależy widoczność połączeń
(0,3)
(0,3)
(1,1)
(1,1)
(0,0)
(0,0)
(0,0)
(3,0)
Łączenia widoczne
(0,0)
(3,0)
Łączenia zamaskowane
Mapowanie tekstury
• Smużenie - clamping
1.5,0
(1,1)
1.0,0
v
(0,0)
u
0, 0
Wsp. tekstury
Mapowanie tekstury
• Odbicie - mirroring
(1,1)
v
(0,0)
u
Mapowanie tekstury
Dopasowanie wielkości tekstury
Wielkość tekstury i wielkość obiektu, na który
nakładana jest tekstura nie musi się zgadzać
Prawie na pewno będziemy nakładali mniejszą
teksturę na większy obszar albo odwrotnie
Konieczne jest dopasowanie tekseli
Mapowanie tekstury
Dopasowanie wielkości tekstury
Zakres u, v tekstury jest równy [0.0,1.0]
teksel
Mapowanie tekstury
Dowolna wartość (u, v) jest dopasowywana
do tekseli tekstury wg. Zasady:



Wartość (u,v) jest mnożona przez rozdzielczość
tekstury w poziomie i pionie.
Odpowiednia pozycja jest odnajdywana na
teksturze (najczęściej nie trafia w teksel)
Kolor jest dobierany w zależności od sąsiadujących
tekseli
Mapowanie tekstury
Najbliższy sąsiad
Interpolacja biliniowa
Mapowanie tekstury
Tekstura
Obraz
Tekstura > obraz
Obraz > tekstura
Inne algorytmy przy powiększaniu i
pomniejszaniu
Powiększenie: Interpolacja
Zmniejszenie: Uśrednianie
Dobrze by było mieć jednolity algorytm
Mip Mapping
MIP = Multim In Parvo = wiele w małym
d
v
u
Dla danego obszaru dobierana jest wersja tekstury o najbliższej rozdzielczości
Mip Mapping
Dla tekstury 2n x 2n pixeli, wyznacz n-1
tekstur
pochodnych
–
każda
z
rozdzielczością =
½ rozdzielczości
poprzedniej
Oryginał
Niższe rozdzielczości
Mip Mapping - Przykłady
John Hart
Mip Mapping

Zapis MIP mapy w pojedynczym pliku
RGB nieefektywny
Obszar nie używany
MIP mapę N bajtowej tekstury można zapisać na 4n/3 bajtach
stosując trik rozkładu na kanały RGB
Mip Mapping
R G
R G
B B
R
G
R G
B
B
Ułożone w mozaikę kanały RGB kolejnych MIP map
Mip Mapping - przykład
Cztery razy więcej pikseli, trzy razy mniej bitów na piksel
Mip Mapping – filtrowanie triliniowe
Trilinear filtering
rozszerzenie filtrowania
biliniowego
zamiast wybierać
najbliższą MIP mapę –
uśrednia liniowo dwie
najbliższe
Dopasowanie liniowe:
Uproszczone równanie dla mapowania
liniowego:
uα = (1 – α)u0 + αu1, dla 0 ≤ α ≤ 1
Wyznacza wartości uα pomiędzy u0 i u1
• Proste równanie
• Nie ma dzielenia
• Szybki algorytm
Mapowanie tekstury
Dopasowywanie liniowe nie sprawdza
się przy nakładaniu tekstury na
powierzchnie będące pod kątem do
kamery
(0,1)
(0,0)
(1,0)
Liniowe mapowanie tekstury
• Wada:
– Zaburzenia w teksturze
Liniowe mapowanie tekstury
Tekstura
Efekt uzyskany
Efekt oczekiwany
Liniowe mapowanie tekstury
Problem
Jednakowe kroki na płaszczyźnie obrazu nie odpowiadają jednakowym
krokom na płaszczyźnie obiektu
Liniowe mapowanie tekstury
Interpolacja w
przestrzeni
ekranu
Interpolacja w
3D
Liniowe mapowanie tekstury
Aby
zmniejszyć
widoczność
zniekształcenia można podzielić obszar
na mniejsze trójkąty
Mimo to błędy mogą
być widoczne w
połączeniach typu „T”
Liniowe mapowanie tekstury
Liniowe mapowanie tekstury
Perspektywiczne mapowanie
tekstury
uα = (1 – α)u0 + αu1, dla 0 ≤ α ≤ 1
uα =
(1 – α)(u0/z0) + α(u1/z1)
(1 – α)(1/ z0) + α(1/z1)
Mapowanie perspektywiczne uwzględnia informację o głębi
położenia werteksów (za cenę bardziej skomplikowanych
obliczeń)
MIP mapy - Prefiltrowanie
Wystąpienie powierzchni znajdującej się pod
ostrym katem do obserwatora powoduje
dodatkowo kłopoty z MIP mapowaniem
Na skutek złożenia mapowania na wielokąt z
mapowaniem na ekran w obszarach dalszych
może zostać wybrana zbyt mała MIP mapa
4
16
32
Algorytm dopasowuje do kwadratu
MIP mapy - Prefiltrowanie
Rozwiązaniem jest filtr anizotropowy (an-isotropic -> nie tak samo w każdą stronę).
Do MIP map dokładane są także wersje
(N)x(N/2) np. 128x64 i odwrotnie
Odpowiednia wersja dopasowywana jest w
przypadku wąskich
pasków
MIP mapy - Prefiltrowanie
© Extremetech
MIP mapy - Prefiltrowanie
© 3D Mark 2006
Automatyczne mapowanie
tekstury
Teksturę 2D można zmapować na obiekt 3D w sposób
„automatyczny”

metoda planarna, rzutuje obraz na płaszczyznę XY
Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually”
Automatyczne mapowanie
tekstury
Teksturę 2D można zmapować na obiekt 3D w sposób
„automatyczny”

metoda planarna, rzutuje obraz na płaszczyznę XY
Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually”
Automatyczne mapowanie
tekstury
Teksturę 2D można zmapować na obiekt 3D w sposób
„automatyczny”

metoda cylindryczna, rzutuje obraz z powierzchni cylindra
opisanego na obiekcie
Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually”
Automatyczne mapowanie
tekstury
Teksturę 2D można zmapować na obiekt 3D w sposób
„automatyczny”

metoda sferyczna, rzutuje obraz z powierzchni sfery
opisanej na obiekcie
Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually”
Automatyczne mapowanie
tekstury
Teksturę 2D można zmapować na obiekt 3D w sposób
„automatyczny”

metoda sześcienna (box), rzutuje obraz z powierzchni
sześcianu opisanego na obiekcie – wielokrotna metoda
planarna
Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually”
Mapowanie tekstury
Bardziej skomplikowane obiekty wymagają
stworzenia mapy UV
Źródło: Johan Steen Blog
Mapowanie tekstury
Mapowanie tekstury
Tekstura może zawierać kanał alpha –
umożliwiający stworzenie wrażenia
przezroczystości (przerwy, prześwitywania)
Mapowanie tekstury
We wczesnych wersjach silników 3D stosowano
przezroczyste
bitmapy
do
(kiepskiego)
symulowania
bardziej
skomplikowanych
obiektów 3D
Takie drzewko wyglądało znośnie
z daleka i w przeciwieństwie do
płaskiej bitmapy, zmieniało się
nieznacznie
w
miarę
jego
okrążania
(zmiana
kątów
patrzenia na tekstury)
Bump Mapping
Wiele tekstur przedstawia obraz
małych nierówności powierzchni
 Ich wymodelowanie w obiekcie
wymagałoby zbyt skomplikowanej
siatki trójkątów
 Symulacja tych nierówności za
pomocą tekstury daje wrażenie
płaskości przy oświetleniu pod kątem
do powierzchni

Bump Mapping
Bump Mapping
Nawet jeżeli obraz tekstury zawiera cienie to
nie będą one z reguły pasowały do bieżącego
ustawienia oteksturowanej powierzchni
Bump Mapping
Zadaniem Bump mappingu – mapowania
wybojów,
jest
stworzenie
wrażenia
chropowatości
powierzchni
bez
modelowania nierówności w siatce
Bump Mapping
Wykorzystuje mapę wysokości (bitmapa
jednokanałowa) do zmiany wartości
wektorów normalnych powierzchni
Bump Mapping
Bez BM
BM
Bump Mapping

Nowa normalna jest wyznaczana na
podstawie:
 N’(u,v) = Ou  Ov - Bu(N  Ov) + Bv(N  Ou)
+ Bu Bv(N  N)
 = N - Bu(N  Ov) + Bv(N  Ou)
=N+D
D
N’
N
Normal Mapping
Podobna zasada jak BM
 Wykorzystuje mapę normalnych
zamiast mapy wysokości
 Nie zmienia geometrii obiektów

Normal Mapping
Zamiast obliczania nowej normalnej na
podstawie wysokości, wartość normalnej w
danym punkcie powierzchni jest zakodowana
jako wartość RGB
Mapa wysokości
Mapa normalnych
Normal Mapping
Przykład
Normal Mapping
Może być użyte do znacznego zredukowania
stopnia skomplikowania siatki
Siatka 4 mln
trójkątów
Uproszczona siatka
500 trójkątów
8000 razy mniej trójkątów!
Uproszczona siatka i
normalka
Źródło: www.Wikipedia.org
Bump Mapping
Co tu nie pasuje?
Normal/Bump Mapping

Zalety:

◦ Nie zmienia się
geometria obiektu
◦ Mały koszt
obliczeniowy
Teoretycznie chropowata
powierzchnia jest gładka przy
brzegu
Chropowatości nie rzucają cienia
Poprawa tych błędów jest
kosztowna obliczeniowo
Wady:
◦ Nie zmienia się
geometria obiektu
Displacement Mapping
Przykład
Bump Mapping
Displacement Mapping
Displacement Mapping
Przykład
Height (Displacement) Map
Displacement Mapping
Displacement Mapping
Przykład
Displacement Mapping

Zalety:
◦ Zmienia geometrię
obiektu
◦ Dodaje wysoki
poziom detali
obiektu

Wady:
◦ Skomplikowany i
kosztowny algorytm
◦ Bardzo łatwo
doprowadzić do
zbytniego
skomplikowania
obiektów 3D
Displacement Mapping
Obrazek z:
Geometry Caching for
Ray-Tracing Displacement
Maps
Matt Pharr i Pat Hanrahan.
Skomplikowane cienie rzucane przez
kamienie
Environment Map
Mapowanie środowiskowe umożliwia tworzenie
symulacji efektów odbicia czy przenikania
 Powierzchnie odbijające są symulowane przez
położenie na obiekcie tekstury zawierającej
(statyczny) widok odbicia.
 Widok ten jest generowany na podstawie
obliczonej wcześniej mapy odbicia „środowiska”
 Najczęściej wykorzystywane są mapy sferyczne i
sześcienne

Environment Map
Mapa sferyczna zawiera bitmapę wygenerowaną
jako odbicie od kulistej powierzchni znajdującej się w
koło obiektu
Kolor piksela wyznaczany jest na podstawie
promienia padania i odbicia dla każdego piksela
obiektu, widocznego na ekranie
Taka mapa daje dobry wynik tylko dla obiektów
zbliżonych do kulistych
Environment Map
Environment Map
Mapa sześcienna daje nieco lepszy efekt – mniej
zniekształceń
Jako odniesienie wykorzystany jest lokalny skybox –
sześcian zawierający odbicia wygenerowane osobno
dla każdej z płaskich ścian
Environment Map
Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually”
Wady metody

Mapa jest zapisywana dla widoku
zogniskowanego na środku obiektu,
◦ w przypadku skierowania „wzroku” na element
obiektu odległy od środka widok powinien być
inny. Najczęściej różnica jest nieznaczna –
słabo zauważalna

Obiekt nie odbija sam siebie
◦ (Można to poprawić stosując odpowiedni model
oświetlenia)

Brak odbicia dla ruchomych obiektów – nie
można się przejrzeć w lustrze
Jak zapisać teksturę?
Environment Mapping Example
Terminator II
Environment Maps

The environment map may take one of several
forms:
◦ Cubic mapping
◦ Spherical mapping (two variants)
◦ Parabolic mapping



Describes the shape of the surface on which the
map “resides”
Determines how the map is generated and how
it is indexed
What are some of the issues in choosing the
map?
Refraction Maps
Za pomocą podobnej techniki można
zasymulować przenikanie światła
Opacity Maps
Za pomocą tekstur można definiować
widoczne obszary
Opacity Maps
Za pomocą tekstur można definiować
widoczne obszary
Znaczne uproszczenie modelu dla płaskich
elementów
Mapy oświetlenia
Quake
Mapy oświetlenia
Stosowane wtedy gdy chcemy zaoszczędzić na
czasie renderowania
Statyczne obiekty mogą mieć nałożone tekstury
określające padające na nie światło
Tekstura taka powstaje podczas
wcześniejszego obliczenia oświetlenia dla
danego obiektu – światło nie może być
zmienne
=
Illumination Maps
+
Mapy oświetlenia
Lightmapy są skalowane w lumelach (lumination
element), odpowiadających jednemu lub więcej
texelowi
Jakość Lightmapy jest kompromisem między
szybkością renderowania a jakością oświetlenia
Zastosowanie Lightmap pozwala na użycie
bardziej zaawansowanych modeli oświetlenia –
brak konieczności renderowania „w locie”
Illumination Maps
Quake light maps
Procedural Texture
Nie są gotowymi obrazami tylko
instrukcjami generującymi pewien
obraz 2D użyty następnie jako
tekstura
 Służą do tworzenia materiałów
mających określony wygląd (np.
przypominający marmur)
 Procedura może tworzyć
niepowtarzalne wzory tekstury

Procedural Texture
Szachownica
Scale: s= 10
If (u * s) % 2=0 && (v * s)%2=0
texture(u,v) = 0; // czarny
Else
texture(u,v) = 1; // biały
Turbulence
Wykorzystanie różnego rodzaju procedur
pseudolosowych daje możliwości generowania
tekstur o określonym „ogólnym” wyglądzie
k
turbulence ( x)  
i 0
1
2i
i
noise(2 x)
Turbulence
turbulence (x)
sin( x  turbulence ( x))

Podobne dokumenty