background image

Multimedia

Dr Ewa Świercz

background image

Wybrane aspekty renderingu



Obliczanie jasności (koloru) poszczególnych 
pikseli obrazu sceny (na rzutni) z 
uwzględnieniem (między innymi) wybranych 
efektów oświetlenia

.



Metoda raytracing



Metoda energetyczna

background image

Mechanizmy renderingu - raytracing



Raytracing (śledzenie promieni) jest jednym z 
najczęściej używanych algorytmów 
renderowania obrazów.



Pozwala na uzyskanie fotorealistycznych odbić, 
refleksów i efektów przezroczystości.



Opiera się na znajdowaniu parametrów 
ś

wietlnych piksela poprzez śledzenie promienia 

w odwrotnym kierunku – od obserwatora 
(kamery) poprzez płaszczyznę obrazową aż do 
pierwszego napotkanego obiektu w scenie. 

background image

Mechanizmy renderingu - raytracing

Analizowane są tylko te 
promienie, które docierają
do obserwatora przez 
piksele ekranu.

background image

Mechanizmy renderingu - raytracing



Raytracing – jak to działa?

1.

Dla każdego przetwarzanego piksela na płaszczyźnie obrazowej 
prowadzimy wirtualny promień, wybiegający od obserwatora i 

przechodzący przez ten piksel (zielony).

2.

Badamy, w jaki obiekt w scenie trafi nasz wirtualny promień. Obliczamy 
ś

wiatło ze wszystkich źródeł dla trafionego punktu, według ustalonego 

modelu oświetlenia. Badane jest, czy jakiś inny obiekt nie przysłania 
ź

ródła światła, i nie rzuca cienia. Obliczane są wszystkie efekty 

powierzchniowe i cieniowanie.

3.

Jeżeli powierzchnia jest zdefiniowana jako odbijająca i stosujemy 
odbicia raytracingowe – z miejsca uderzenia promienia wysyłany jest 

promień wtórny i cały algorytm uruchamiany jest rekurencyjnie dla tego 
promienia. Obliczony promień odbiciowy dodawany jest do 
obliczonego w pkt.2 oświetlenia.

4.

Jeżeli powierzchnia jest zdefiniowana jako przezroczysta. Z trafionego 
punktu wysyłany jest promień przezroczystości, pod kątem zależnym 

od geometrii obiektu i parametrów materiału. Zostaje przeanalizowany 
w podobny sposób jak wtórne promienie odbicia.

background image

Cienie – metoda śledzonych promieni 

(raytracing)

Przykład procedury dla 

sceny bardziej 
skomplikowanej

Obserwator (kamera) 

znajduje się w punkcie 
O, na scenie 
umieszczone zostały 
dwa światła L1 i L2 oraz 
3 obiekty:

(elipsa): nieprzezroczysty, 

nie odbija światła 

(koło): przezroczysty, 

odbija światło 

(prostokąt): tylko odbija 

ś

wiatło 

Kreskami przerywanymi zaznaczono 
dodatkowe promienie, służące 
określeniu widoczności świateł w 
punktach przecięcia 

background image

Mechanizmy renderingu - raytracing

O – obserwator

• b – obiekt odbijający, przezroczysty

• a – obiekt nieodbijający, nieprzezroczysty

• c – obiekt odbijający, nieprzezroczysty.

1.

W analizowany piksel na płaszczyźnie obrazowej wystrzeliwany jest z obserwatora promień (zielony, 
pierwotny).

2.

Promień pada na punkt na pierwszym napotkanym obiekcie. Badane jest, z jakich źródeł światło dociera 
do tego punktu (tutaj: tylko ze źródła 

L1

), Obliczane jest światło i cieniowanie tego punktu. 

3.

Ponieważ

b

to obiekt odbijający, wysyłany jest z trafionego punktu promień odbicia (czerwony, wtórny) . 

Promień pada na obiekt 

a

.

4.

Obiekt 

a

jest analizowany podobnie jak w punkcie 2 – badane jest, jakie źródła oświetlają trafiony punkt, 

obliczane jest światło i cieniowanie. Obiekt nie odbija promieni, więc tutaj analiza jest zakończona.

5.

Ponieważ

b

jest obiektem przezroczystym, z miejsca trafienia wysyłany jest także wtórny promień

przezroczystości (niebieski). Kąt promienia zależny jest od geometrii obiektu

b

i parametrów jego 

materiału.

6.

Promień przezroczystości trafia w obiekt 

c.

Wykonywana jest znowu procedura z pkt 2.

7.

Ponieważ obiekt 

c

jest odbijający – po obliczeniu światła i cieni w miejscu trafienia wysyłany jest znowu 

wtórny promień odbicia (czerwony z obiektu c) .

8.

Itd… Do mementu, aż wszystkie wtórne promienie nie zostaną obliczone.

background image

Mechanizmy renderingu - raytracing



Na scenie może być wiele źródeł

ś

wiatła i wiele obiektów.



Jeżeli jakiś obiekt blokuje linię

pomiędzy punktem trafienia a 
ź

ródłem światła, to źródło nie 

dodaje swojego udziału w 
oświetlenie trafionego punktu.



W skali całego obiektu jest to 

widziane jako precyzyjny cień. 

background image

Mechanizmy renderingu - raytracing

Metoda prowadzi w tym przypadku do błędnego wyznaczenia
oświetlenia. W metodzie śledzenia promieni punkt będzie 
oświetlony jedynie przez źródło światła S.
W rzeczywistości, punkt oświetlany jest przez źródło światła 
ś

wiatło odbite od lustra, którego promień odbity nie analizuje.

background image

Mechanizmy renderingu - raytracing



Render raytracingowy



Fotorealistyczny efekt, 
możliwość zobaczenia 
kształtów odbijających się
obiektów, ich cech 
powierzchniowych.



Dynamiczne cienie – przy 
dynamicznej zmianie 
oświetlenia cienie dopasują
się odpowiednio do tej 
zmiany.



Dobrze odwzorowane 
efekty półprzezroczystości, 
rozbłysków, itd.

background image

Mechanizmy renderingu - raytracing



Odbicia raytracingowe – pułapki.



Jeżeli kilka obiektów dających 
odbicia zwierciadlane znajdzie się
w odpowiedniej konfiguracji, 
mogą w nieskończoność odbijać
nawzajem swoje promienie 
wtórne, powodując nieskończoną
rekurencję i załamanie rendrera.



Aby tego uniknąć wprowadza się
maksymalną liczbę odbić. W 
większości przypadków 4-ty 
poziom odbicia jest w zupełności 
wystarczający do osiągnięcia 
fotorealistycznych efektów i nie 
ma potrzeby obliczania bardziej 
złożonych odbić.

background image

Mechanizmy renderingu - raytracing



Przezroczystość



Wtórny promień przezroczystości jest 
odpowiednio załamywany, w 
zależności od kształtu modelu i 
parametrów materiału, co pozwala 
uzyskać efekt soczewki, szkła, itd..



Załamanie



Możliwość zdefiniowania 
współczynnika załamania dla 
materiału pozwala na modyfikowanie 
kąta, pod jakim wypuszczane są
wtórne promienie przezroczystości.

background image

Scena wygenerowana metod

Scena wygenerowana metod

ą

ą

raytracingu

raytracingu

, w 

, w 

kt

kt

ó

ó

rej wszystkie obiekty odbijaj

rej wszystkie obiekty odbijaj

ą

ą

ś

ś

wiat

wiat

ł

ł

background image

Mechanizmy renderingu - raytracing



Demonstracja renderingu metodą śledzenia promieni. Proszę
zwrócić uwagę na cienie, odbicia i ich reakcję na zmianę warunków 
oświetlenia w połowie nagrania! 

background image

POV-Ray program służący do ray tracingu dla 
komputerów z systemami np. Windows



Cechą charakterystyczną programu jest wykorzystywanie 
zaawansowanego języka opisu sceny SDL (ang. Scene Description
Language
), który jest w zasadzie językiem programowania, 
zawierającym elementy takie jak m.in. zmienne, tablice, instrukcje 
warunkowe, pętle, funkcje.



W programie wygląd sceny opisuje się w skrypcie, w którym 
umieszcza się informacje dotyczące:



położenia kamery 



oświetlenia 



obiektów w postaci brył i powierzchni 



Program umożliwia wygenerowanie sekwencji obrazów do celów 
animacji. 

background image

POV-Ray program służący do ray tracingu dla 
komputerów z systemami np. Windows

Wygenerowana scena na podstawie zamieszczonego skryptu 

background image

Przykładowy skrypt



#include "colors.inc"




global_settings {



assumed_gamma 1.0

//ogólne parametry



max_trace_level 5



}




camera {



location <0.0, 0.5, -4.0>                  //punkt umieszczenia kamery



direction 1.5*z



right

x*image_width/image_height



look_at <0.0, 0.0,  0.0>                  //punkt na który patrzy (jest skierowana) kamera



}




sky_sphere {



pigment {



gradient y



color_map {



[0.0 rgb <0.6,0.7,1.0>]                 //określenie koloru (składowe r-czerwony,g-zielony,b-niebieski)



[0.7 rgb <0.0,0.1,0.8>]



}



}



}



background image

Przykładowy skrypt



light_source {              // wstawienie światła punktowego



<0, 0, 0>                 // pozycja początkowa światła



color rgb <1, 1, 1>       // kolor światła



translate <-30, 30, -30>  // przemieszczenie x,y,z



}




plane {                     // podłoga w "szachownicę"



y, -1



texture



{



pigment {



checker



color rgb 1



color blue 1



scale 0.5



}



finish{



diffuse 0.8



ambient 0.1



}



}



}



background image

Przykładowy skrypt



sphere {                    // błyszcząca kulka



0.0, 1



texture {



pigment {



color rgb <0.8,0.8,1.0>



}



finish{



diffuse 0.3



ambient 0.0



specular 0.6



reflection {



0.8



metallic



}



conserve_energy



}



}



}

background image

Tekstury

Tekstury

Tekstury mogą być użyte do kontrolowania różnych atrybutów 
powierzchni, do tworzenia różnych efektów renderingu.
Siedem najbardziej popularnych technik mapowania (przekształcenia)  
teksturowego to:



mapowanie koloru (color mapping)



mapowanie odblasku (specular mapping)



mapowanie samooświetlenia (incandescence mapping)



mapowanie przezroczystości (transparency mapping)



mapowanie przemieszczenia (displacement mapping)



mapowanie nierówności (bump mapping)



mapowanie normalnych (normal mapping)

background image

Tekstury



Mapowanie koloru – nałożona tekstura zmienia w danym punkcie 
kolor powierzchni obiektu na swój. Intuicyjnie daje to efekt 
„otapetowania” modelu.



Jest to jedna z najczęściej stosowanych technik teksturowych, 
nadająca modelowi charakter i mająca największy potencjał
artystyczny

background image

Tekstury



Specular maping – mapowanie odblaskowości – nałożona tekstura 
jest interpretowana jako mapa odblaskowości – jasne rejony tekstury 
oznaczają miejsca, gdzie występuje efekt rozbłysków i odbić
zwierciadlanych, ciemne oznaczają rejony matowe

background image

Tekstury



Mapowanie przezroczystosci:



Jasne kolory nałożonej tekstury są
interpretowane jako miejsca 
przezroczyste.



Jest to częsta metoda stosowana do 
tworzenia listowia drzew, obiektów 
przypominających sito, końców 
włosów, itd. Wszystkie te elementy 
można zasymulować odpowiednią
teksturą przezroczystości, bez 
potrzeby komplikowania siatki obiektu

background image

Tekstury



Mapowanie przemieszczeń:



Tekstura interpretowana jest jako mapa 
głębokości, gdzie jasne oznacza „wyżej” a 
ciemne „niżej”.



W zależności od koloru nałożonej tekstury 
w danym punkcie odpowiednio 
modyfikowana jest geometria modelu! 
Zmieniana jest rzeczywista siatka obiektu.



Ponieważ zmienia się geometria, staje się
to widoczne w cieniu rzucanym przez 
obiekt jak i w jego obrysie. 



Metoda kosztowna, ze względu na częstą
konieczność zwiększenia liczby wielokątów 
w modelu i przeliczenia większej ich liczby 
w transformacjach geometrycznych.

background image

Efekty teksturowe



Mapowanie przemieszczeń – model oryginalny oraz 
przekształcony. Proszę zwrócić uwagę na obrys obiektu 
- geometria została faktycznie zmieniona.

background image

Efekty teksturowe



Mapowanie nierówności:



Pozwala na stworzenie wrażenia bardziej skomplikowanej geometrii 
modelu bez rzeczywistej zmiany tej geometrii, symuluje małe 
deformacje powierzchni.



Nałożona na model tekstura jest traktowana jako mapa wysokości –
jasny punkt oznacza „wyżej”, ciemny – „niżej”.



Sztuczka shader’a – nie modyfikuje modelu, tylko zmienia sposób, w 
jaki poszczególne punkty są cieniowane!



Służy również do wywoływania efektu małych nierówności powierzchni



Nie zmienia układu cieni – ponieważ rzeczywista geometria modelu 
pozostaje ta sama, cienie są gładkie i równe, nie reagują na pozorne 

nierówności, obrys obiektu jest zgodny z siatką – tu również
nierówności się nie ujawniają.

background image

Efekty teksturowe



Mapowanie nierówności – przykład 1

background image

Efekty teksturowe



Mapowanie nierówności – przykład 2

background image

Efekty teksturowe



Mapowanie przemieszczeń – przykład zastosowania 
techniki mapowania nierówności do zasymulowania 
pomarszczonej powierzchnia wody na płaskim 
modelu.

background image

Efekty teksturowe



Mapowanie normalnych:



Metoda pozornego zwiększania szczegółowości modelu, bez faktycznego 
zwiększenia liczby wielokątów nań się składających.



Obliczanie transformacji przestrzennych modelu o dużej liczbie wielokątów jest 
czasochłonne, więc lepiej jest obliczyć prostszy model i 



Dla każdego punktu tekstura definiuje pozorną zmianę położenia normalnej do 
powierzchni w tym punkcie. Normalna jest zawsze prostopadła do powierzchni i 
według tego obliczane jest oświetlenie, odbicia, itd..



Zatem modyfikując położenie normalnej możemy zmieniać sposób, w jaki 
cieniowany jest model i uzyskać pozorny wzrost szczegółowości. Uzyskamy 
wrażenie innego kształtu powierzchni, niż to ma miejsce w rzeczywistości.



Tekstura jest kolorowa – każdy kanał koloru niesie informację o jednej 
współrzędnej „pozornej” normalnej.



Nie zmienia się rzeczywista geometria modelu! Nie ma wpływu na rzucane 
cienie!

background image

Efekty teksturowe



Mapowanie normalnych – 1) model o wysokiej liczbie wielokątów, 
2) model o niskiej liczbie wielokątów, 3) model o niskiej liczbie 
wielokątów po zastosowaniu normal mappingu. Widoczny efekt 
pozornej poprawy szczegółowości

background image

Tekstury



Nakładanie tekstur na obiekty. Jak to zrobić?



Tekstura jest płaskim obrazem, a obiekt w scenie trójwymiarową
bryłą zbudowaną ze ścian-wielokątów, lub z powierzchni 
parametrycznych.



Należy rozwiązać problem – dla każdego punktu powierzchni bryły 
znaleźć odpowiadający mu punkt tekstury, we współrzędnych 2D 
związanych z teksturą. Jaką wybrać metodę?

background image

Tekstury



Stosowanych jest kilka rodzajów rzutowań, dających 
różne efekty i obarczonych różnymi wadami.



Rzutowanie płaskie



Rzutowanie cylindryczne



Rzutowanie sferyczne



Rzutowanie typu „box”



Każda z metod powoduje zniekształcenia pierwotnego 
obrazu 2D. Dlatego tekstury są często nakładane 
metodą malowania na rozciętej siatce, w celu uniknięcia 
problemów związanych z rzutowaniem.

background image

Tekstury



Rzutowanie płaskie:



Prosta metoda nakładania tekstur, często stosowana przy 
bezpośrednim teksturowaniu wielokątów modelu.



Dla współrzędnej (x, y, z) każdego punktu powierzchni modelu 
3D odrzucamy współrzędną z. Pozostają dwie współrzędne (x, y), 
które dają się bezpośrednio przełożyć na współrzędne 
odpowiedniego punktu tekstury.



Intuicyjnie można to rozumieć jako „spłaszczenie” modelu

background image

Tekstury



Rzutowanie płaskie  

background image

Tekstury



Nakładanie tekstur – rzutowanie płaskie 

background image

Tekstury



Nakładanie tekstur – rzutowanie 
cylindryczne



Podobna idea, jak w poprzedni 
przypadku – odrzucenie jednej 
współrzędnej i proste odwzorowanie 
punktu na powierzchni modelu (teraz już
opisanego dwoma współrzędnymi) na 
punkt tekstury



Zamieniamy współrzędne kartezjańskie 
na współrzędne cylindryczne (walcowe)



Odrzucana jest współrzędna ρ, 
współrzędna φ traktowana jest jako 
współrzędna x punktu tekstury a z- jako 
współrzędna y tekstury

background image

Tekstury



Rzutowanie cylindrczne

background image

Tekstury



Rzutowanie cylindrczne

background image

Tekstury



Nakładanie tekstur – rzutowanie sferyczne:

Stojąc w miejscu obiektu możemy rozglądać się dookoła - widzimy 
wszystko 3D, ale możemy zrobić zdjęcia. 
Aby sfotografować całą otaczającą nas rzeczywistość będziemy  musieli 
obrócić się we wszystkie możliwe strony. 
Jeśli teraz zbudujemy sobie dla przykładu kulę i jej wnętrze wyłożymy 
naszymi odbitkami (oczywiście każdą we właściwym miejscu) a 
następnie wejdziemy do niej, to będziemy mogli odnieść wrażenie, że 
mamy namiastkę naszej rzeczywistości. Tak mniej więcej działa 
sferyczne mapowanie środowiska. Na obiekt nałożymy teksturę w taki 
sposób, że tekstura zostanie niejako "zrzutowana"  z kuli otaczającej 
nasz obiekt na niego samego. 

background image

Tekstury



Nakładanie tekstur – rzutowanie sferyczne:



Podobna idea jak w przypadku rzutowania 
cylindrycznego.



Współrzędne kartezjańskie modelu (x, y, z) 
są przekształcane na współrzędne sferyczne 
(r, phi, theta) a następnie współrzędna r jest 
odrzucana i możliwe jest proste 
odwzorowanie pozostałych dwóch 
współrzędnych sferycznych na współrzędne 
(x,y) punktu tekstury

background image

Tekstury



Nakładanie tekstur – rzutowanie sferyczne:

background image

Tekstury



Nakładanie tekstur – rzutowanie sferyczne

background image

Tekstury



Nakładanie tekstur – model pudełkowy – jest to wariant 
odwzorowania płaskiego,  ale mamy kilka kierunków 
rzutowania, każda ściana pudełka rzutuje swoje punkty 
na leżącą pod sobą część obiektu

background image

Tekstury



Nakładanie tekstur – model pudełkowy - efekt

background image

Tekstury



Model pudełkowy – nakładanie rzeczywistej tekstury na 
obiekt

background image

Tekstury



Nakładanie tekstur poprzez bezpośrednie malowanie na rozciętej 
siatce modelu.



Siatka obiektu zostaje rozcięta wzdłuż odpowiednich krawędzi.



Rozcięta siatka jest „prostowana” do dwóch wymiarów.



Na rozprostowaną siatkę nanoszona jest bezpośrednio tekstura. Tutaj 
nie ma problemu rzutowania – mapowanie jednej powierzchni 2D na 
drugą.



Siatka z nałożoną teksturą jest ponownie sklejana w bryłę, wzdłuż tych 
samych rozcięć.



Metoda ta jest często stosowana do tworzenia tekstur na 
zaawansowanych modelach składających się z dużej liczby 
wielokątów i trudnych do prawidłowego odwzorowania 
parametrycznego– np. modeli w grach 3D

background image

Tekstury



Model głowy kobiety – nałożone tekstury oraz 
siatka modelu

background image

Tekstury



Rozcięta siatka, fragment nakładanej na nią
tekstury oraz pełna, gotowa tekstura

background image

Demonstracja przedstawionego mechanizmu 

nakładania tekstur