Multimedia
Dr Ewa Świercz
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
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.
Mechanizmy renderingu - raytracing
Analizowane są tylko te
promienie, które docierają
do obserwatora przez
piksele ekranu.
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.
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:
a (elipsa): nieprzezroczysty,
nie odbija światła
b (koło): przezroczysty,
odbija światło
c (prostokąt): tylko odbija
ś
wiatło
Kreskami przerywanymi zaznaczono
dodatkowe promienie, służące
określeniu widoczności świateł w
punktach przecięcia
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.
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ń.
Mechanizmy renderingu - raytracing
Metoda prowadzi w tym przypadku do błędnego wyznaczenia
oświetlenia. W metodzie śledzenia promieni punkt P będzie
oświetlony jedynie przez źródło światła S.
W rzeczywistości, punkt P oświetlany jest przez źródło światła S i
ś
wiatło odbite od lustra, którego promień odbity nie analizuje.
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.
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ć.
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.
Scena wygenerowana metod
Scena wygenerowana metod
ą
ą
raytracingu
raytracingu
, w
, w
kt
kt
ó
ó
rej wszystkie obiekty odbijaj
rej wszystkie obiekty odbijaj
ą
ą
ś
ś
wiat
wiat
ł
ł
o
o
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!
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.
POV-Ray program służący do ray tracingu dla
komputerów z systemami np. Windows
Wygenerowana scena na podstawie zamieszczonego skryptu
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>]
}
}
}
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
}
}
}
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
}
}
}
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)
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
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
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
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.
Efekty teksturowe
Mapowanie przemieszczeń – model oryginalny oraz
przekształcony. Proszę zwrócić uwagę na obrys obiektu
- geometria została faktycznie zmieniona.
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ą.
Efekty teksturowe
Mapowanie nierówności – przykład 1
Efekty teksturowe
Mapowanie nierówności – przykład 2
Efekty teksturowe
Mapowanie przemieszczeń – przykład zastosowania
techniki mapowania nierówności do zasymulowania
pomarszczonej powierzchnia wody na płaskim
modelu.
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!
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
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ę?
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.
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
Tekstury
Rzutowanie płaskie
Tekstury
Nakładanie tekstur – rzutowanie płaskie
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
Tekstury
Rzutowanie cylindrczne
Tekstury
Rzutowanie cylindrczne
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.
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
Tekstury
Nakładanie tekstur – rzutowanie sferyczne:
Tekstury
Nakładanie tekstur – rzutowanie sferyczne
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
Tekstury
Nakładanie tekstur – model pudełkowy - efekt
Tekstury
Model pudełkowy – nakładanie rzeczywistej tekstury na
obiekt
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
Tekstury
Model głowy kobiety – nałożone tekstury oraz
siatka modelu
Tekstury
Rozcięta siatka, fragment nakładanej na nią
tekstury oraz pełna, gotowa tekstura
Demonstracja przedstawionego mechanizmu
nakładania tekstur