Tworzenie grafiki 3D

background image
background image

Karta graficzna, aby wyświetlić na

ekranie gotowy obraz, musi najpierw

wykonać szereg następujących po sobie

czynności na danych, które otrzymała

chwilę wcześniej od aplikacji 3D. Te

realizowane kolejno kroki obliczeniowe

nazywane są strumieniem graficznym

(ang. 3D Graphics Pipeline).

background image

Wyróżniamy w nim trzy główne fazy

obliczeń.:

Operacje geometryczne (skalowanie

obiektów) i kalkulacje (modelowanie)

oświetlenia);

Rendering (m.in. procesy nakładania

tekstur i cieniowania);

Rasteryzacja

(przygotowanie

gotowego obrazu do wyświetlenia).

background image

Aplikacja graficzna na początku musi

utworzyć kompletny plan generowanej

sceny.

Na

owej

„mapie”

zostają

wyznaczone

dokładne

położenia

wszystkich

występujących

na

niej

obiektów.

Do

opisu

położenia

przedmiotów

w

przestrzeni

wykorzystuje

się

zestaw

trzech

współrzędnych X, Y, Z.

background image

Co więcej, posługując

się współrzędnymi X,

Y, Z dla kilku lub

kilkunastu

punktów

charakterystycznych

(tzw.

węzłów)

wziętych

z

każdej

bryły tworzącej scenę

3D, można nie tylko

wyznaczyć, w którym

miejscu w przestrzeni

znajduje

się

dany

obiekt, ale również

bardzo

dokładnie

opisać jego kształt i

wielkość.

background image

Dla

bardziej

skomplikowanych

kształtów, takich jak np. kula lub

twarz, węzły wyznaczone zostają w

kilku, kilkudziesięciu lub kilkuset

punktach na powierzchni bryły. Tworzą

one wówczas wektorowy opis obiektu

na scenie 3D – wszystkie operacje

związane z umieszczeniem obiektów i

przypisaniem im współrzędnych na

scenie 3D wykonuje się raz w operacji

wstępnego

przetwarzania

obrazu

(ang. preprocessing).

background image

Aplikacja graficzna 3D przekazuje

do

sterowników

karty

ową

„kropkowaną” mapę sceny z

zaznaczonymi

węzłami,

należącymi do poszczególnych

obiektów.

W

tym

miejscu

akcelerator

3D

rozpoczyna

proces nazywany teselacją lub

triangularyzacją (ang. triangle

setup processing). Operacja ta

polega

na

grupowaniu

należących

do

każdej

bryły

węzłów (wierzchołków) w trójki.

W ten sposób cała generowana

scena,

w

tym

powierzchnie

sferyczne, podzielona zostaje na

mniejsze lub większe płaszczyzny

utworzone wyłącznie z trójkątów.

background image

Wybranie

trójkąta,

jako

elementarnego

wielokąta

budulcowego

trójwymiarowej

sceny

spowodowane

zostało

względami

praktycznymi, związanymi z przyspieszeniem

obliczeń. Kalkulacje przeprowadzane na

trójkątach są łatwiejsze w implementacji niż

rachunki prowadzone na innych wielokątach.

Ponadto usprawnione zostają dalsze etapy

generowania sceny 3D, takie jak obliczenia

natężenia światła, cieniowanie i wypełnianie

obszarów

teksturami.

Należy

jednak

pamiętać, że prędkość, z jaką są realizowane

dalsze przekształcenia, zależy od liczby

trójkątów tworzących scenę – im jest ich

mniej,

tym

szybciej

prowadzone

obliczenia, ale uzyskane efekty będą mniej

realistyczne.

background image

Wszystkie obecne na scenie

3D bryły należy zatem (w

wypadku

starszych

kart

odbywa się to po procesie

teselacji,

a

w

nowych

przed) poddać skalowaniu,

translacji i rotacji. Mają one

za zadanie ustawić obiekty

na swoim miejscu (stąd

nazwa:

ustawianie

geometrii)

oraz

odpowiednio

je

przeskalować.

background image

Na tym etapie odbywa się też

kadrowanie sceny, czyli usunięcie z

niej fragmentów niewidocznych dla

obserwatora. Dzięki temu zmniejsza

się liczba obiektów przetwarzanych w

kolejnych

fazach

w

strumieniu

graficznym.

background image

Po ustawieniu geometrii i skadrowaniu

sceny przychodzi czas na jej oświetlenie.

Kalkulacje te polegają na wprowadzeniu

do obliczeń współrzędnych położenia

oraz typów źródeł światła: punktowe,

rozproszone czy ruchome i jego barwy –

monochromatyczne lub kolorowe. W

rachunkach uwzględniane zostają też

znajdujące się poza kadrem źródła

światła. Każdemu węzłowi przypisane

zostają wektor opisujący natężenie

światła w danym miejscu oraz informacja

o wypadkowym kolorze światła. W

obliczeniach tych pod uwagę brane są

też odbicia od powierzchni metalicznych,

luster i tym podobnych obiektów,

również tych, których bezpośrednio nie

widać.

background image

Możliwość wykorzystania dynamicznego

bądź statycznego sposobu generowania

trójwymiarowej sceny związana jest z

mocą

obliczeniową

procesora

graficznego. Operacje statyczne nie

potrzebują

bardzo

wydajnych

akceleratorów.

Tutaj

wszystkie

elementy znajdujące się na scenie

opisane są wyłącznie za pomocą trzech

współrzędnych (X, Y, Z) we względnym

dla

danego

„obrazka”

układzie

odniesienia. W obliczeniach statycznych

każda klatka animacji jest przeliczana

oddzielnie,

a

obsługa

interakcji

pomiędzy przesuwającym się obiektem

a otoczeniem spoczywa na jednostce

centralnej komputera.

background image

Bardziej zaawansowany obliczeniowo

model

dynamiczny

wykorzystuje

jedną

przygotowaną

w

procesie

preprocessingu scenę 3D oraz krótkie

programy zawierające ciąg instrukcji

modelujących zachowanie się obiektu

na kilku lub kilkunastu kolejno

generowanych klatkach. Sam proces

przetwarzania

programów

opisujących zachowanie się obiektów

realizowany jest w karcie graficznej,

dzięki czemu CPU komputera może w

danej

chwili

zająć

się

innymi

zadaniami.

background image

Rendering podzielić można na cztery

główne fazy:

Teksturowanie;

Modyfikacje nałożonych tekstur;

Cieniowanie;

Dodawanie

efektów

„atmosferycznych”

(dym,

mgła,

różnego rodzaju rozlane plamy oleju).

background image

Faza ta zazwyczaj pochłania ponad 60%

czasu

potrzebnego

na

przygotowanie

każdej sceny 3D. Sama tekstura to płaska

bitmapa o z góry zadanej przez programistę

wielkości. Najczęściej wykorzystuje się

tekstury o rozmiarze 256×256, 512×512

oraz 1024×1024 pikseli. Można rzec, że ta

mapa bitowa po nałożeniu na elementy

szkieletu

sceny

3D

jest

cyfrowym

odpowiednikiem spotykanych w realnym

świecie powierzchni – np. udaje drewno lub

skórę. Proces nakładania tekstur, który

nazywany jest mapowaniem, sprowadza się

do „obwijania” brył teksturami.

background image

Aby nie wpędzić się w niepotrzebne

obliczenia, już w latach pięćdziesiątych

ubiegłego

wieku

wymyślono

technologię MIP mappingu (Multum in

Parvo – wiele w niewielu). Polega ona

na utworzeniu z podstawowej tekstury

kilku (zazwyczaj ośmiu) wzorców,

które są następnie wykorzystywane do

pokrywania elementów sceny. Wzorce

te, nazywane poziomami mapy MIP, to

nic innego jak przeskalowane bitmapy,

z których każda jest czterokrotnie

mniejsza od poprzedniej.

background image

Sama metoda MIP mappingu nie rozwiązuje jednak
problemu dopasowania tekstur do trókątów –
tekstury są kwadratowe. Aby sobie z tym poradzić,
najlepiej „wyciąć” odpowiedniej wielkości trójkąt.
Operacja

wyodrębnienia

trójkąta

o

żądanej

wielkości z kwadratowej tekstury nazywa się
clippingiem. Z punktu widzenia akceleratora polega
ona na określeniu współrzędnych trzech punktów
na teksturze, a następnie przyporządkowaniu ich
(rozpięciu)

trzem

stosownym

wierzchołkom

teksturowanego

trójkąta.

Jest

to

czynność

stosunkowo prosta i nie angażuje ona dużej mocy
obliczeniowej układu.

background image

Przy clippingu i określaniu punktów
zaczepienia należy także pamiętać o
odpowiedniej orientacji trójkątnych
fragmentów tekstur, by znajdujące
się

obok

powycinane

trójkątne

kawałki idealnie do siebie pasowały,
tworząc jedną całość. Gdy jednak
kwadratowa tekstura okazuje się ciut
za mała, by wyciąć odpowiedni
trójkąt, a innej mapy MIP nie można
użyć, stosuje się dwa rozwiązania.

background image

Pierwsze polega na włożeniu tekstury
w

trójkąt

i

„dosztukowaniu”

brakujących fragmentów, w podobny
sposób jak robi to krawiec. Operacja
ta realizowana jest zazwyczaj przez
procesor komputera.

background image

Drugą,

prostą

techniką

„sztukowania” dziur jest próbkowanie
punktowe

(ang.

point

sampling

texturing).

Związane

jest

ono

bezpośrednio

ze

sposobem

nanoszenia tekstur, polegającym na
kopiowaniu punkt po punkcie tekseli
z bitmapy na mapowany tójkąt. Jeśli
powierzchnia trójkąta jest większa od
tekstury, to powiela się wówczas
niektóre

teksele

na

kilka

sąsiadujących ze sobą punktów.

background image

Niestety,

wadą

próbkowania

punktowego jest to, że powielanie
tekseli objawia się efektem pixelizacji.
Jest on szczególnie wyraźny wtedy, gdy
tekstura musi pokryć obszar znacznie
większy niż ona sama Teksele widać
wyraźnie, gdy bohater gry podejdzie do
ściany. Wówczas dobrze wyglądające z
daleka elementy zamienią się w duże,
rozmazane kwadraty.

background image

Podczas generowania sceny 3D

przetwarzane obiekty opisane są w

trójwymiarowej przestrzeni. Później

jednak będą one wyświetlone na

płaskim ekranie monitora. Podczas

odwzorowania

dużych,

płaskich

powierzchni, które składają się ze

sporej

wielkości

trójkątów

ustawionych niemal prostopadle do

płaszczyzny ekranu, pojawiają się

problemy

z

zachowaniem

odpowiedniej

perspektywy.

Elementy

sceny

„rozłażą

się”,

tworząc

dziwnie

powykrzywiane

wzory.

Efekt

ten

wynika

z

przesunięcia

się

współrzędnych

trójkątów

względem

punktów

zaczepienia wyciętych w trójkąty

tekstur.

background image

Każdy nowoczesny akcelerator w celu
wyeliminowania

tych

niepożądanych

efektów stosuje tzw. algorytmy korekcji
perspektywy (ang. perspective correction).
Metoda ta polega na stworzeniu na
horyzoncie wirtualnego punktu. Każda linia
poprowadzona z dowolnego miejsca sceny
3D musi zbiec się w wyznaczonym punkcie
odniesienia. Następnie karta graficzna
nakłada

odpowiednio

dopasowane,

zorientowane i przycięte tekstury, ale już
bez przestrzennych deformacji.

background image

Mimo nałożenia na szkielet sceny 3D nawet
najlepszych tekstur, nasz wirtualny świat
ciągle będzie wyglądał dość sztucznie. Za
to niekorzystne wrażenie odpowiadają
gładkie, płaskie bitmapy. Dlatego też musi
zostać użyta technika bump mappingu,
tworząca

złudzenie

rzeczywistej,

chropowatej

struktury

przedmiotów.

Stosuje ona dodatkową bitmapę (ang.
bump maps – mapa wybojów). Jest to
płaska bitmapa w odcieniach szarości,
gdzie jasność każdego punktu oznacza
stopień jego wypukłości.

background image

Po złożeniu mapy wybojów z teksturą
podstawową

otrzymujemy

dodatkową

informację o wzajemnym usytuowaniu
każdego

punktu

w

odniesieniu

do

płaszczyzny tekstury. Przy obliczaniu
oświetlenia teksele znajdujące się wyżej
są jaśniejsze od tych położonych niżej.
Dzięki temu cała oświetlona tekstura
bardzo dobrze imituje chropowatości i
wgłębienia

powierzchni.

Metoda

ta

sprawdza

się

jednak

tylko

przy

nieruchomych i prostopadłych względem
obserwatora powierzchni.

background image

Jeśli przedmioty widać pod niewielkim kątem lub
tekstury

nakłada

się

na

poruszające

się

przedmioty, wówczas stosuje się drugą z metod
bump mappingu – tzw. tłoczenie wybojów (ang.
emboss bump mapping). Odbywa się ona w trzech
etapach. W pierwszej fazie z mapy opisującej
wygląd wypukłości (mapy wybojów) akcelerator
tworzy dwa monochromatyczne obrazy. Jeden
wykorzystywany

jest

do

przedstawienia

jaśniejszych obszarów, a drugi odpowiada za
fragmenty zacienione. W drugim kroku obie
bitmapy przesuwane są o kilka pikseli względem
siebie (jedna do tyłu, druga do przodu) wzdłuż
kierunku padającego światła. Ostatnią fazą
tłoczenia jest złączenie rozsuniętych bitmap i
połączenie ich z podstawową teksturą obiektu. Do
„klejenia” obu map wypukłości używa się
technologii alpha-blendingu.

background image

Trzecią, jeszcze bardziej zaawansowaną
metodą bump mappingu jest mapowanie
wypukłości połączone z mapowaniem
środowiskowym

(ang.

environment

mapping). Mapa środowiskowa (ang.
environment

map)

to

tekstura,

zawierająca w sobie informacje m.in. o
refleksach na powierzchni przedmiotu. W
tym przypadku uzyskanie odpowiednich
efektów możliwe jest dzięki nałożeniu na
jeden teksel trzech bitmap: podstawowej
tekstury, mapy wypukłości oraz mapy
środowiska.

background image

Czwartą metodą odwzorowania wypukłości
jest Dot3. Łączy ona szybkość obliczeniową
tłoczenia wybojów z dokładnością techniki
EMBM. Dla każdego wielokąta sceny 3D
obliczany jest kąt odbicia padającego na
niego światła lub wypadkowy wektor
zawierający

zbiorcze

informacje

o

refleksach z wielu źródeł. Następnie
otrzymaną wartość wektora modyfikuje się
zgodnie z danymi zapisanymi w tzw. mapie
odbić, w której umieszczono informacje o
połyskujących fragmentach powierzchni. Na
końcu otrzymaną bitmapę Dot3 łączy się z
właściwą teksturą obiektu.

background image

Ostatnią używaną metodą bump mappingu
jest

opracowane

przez

firmę

Matrox

mapowanie

przemieszczeń

(displacement

mapping). Technika ta polega na nadaniu
płaskim obiektom prawdziwych, a nie – jak do
tej

pory

symulowanych

wypukłości.

Fragment bryły, który chcemy zmodyfikować,
dzielony jest na mniejsze trójkąty. Następnie
jednostka Vertex Shader modyfikuje (wygina)
powierzchnie

bryły

zgodnie

z

mapą

przemieszczeń (odpowiednik mapy wybojów).
Na końcu na taki „zwichrowany” fragment
bryły nakłada się podstawową teksturę, którą
wygina się zgodnie z zadanymi uprzednio
„zagnieceniami”.

background image

W większości wypadków na jeden obiekt
nakładanych jest co najmniej kilka różnych
bitmap. Oczywiście są one mapowane
równolegle

w

wielu

jednostkach

wykonawczych karty. Akcelerator nie czeka
też, aż będzie miał do dyspozycji wszystkie
gotowe tekstury, proces teksturowania
rozpoczyna od razu od takich elementów
sceny, które są już zgromadzone w pamięci,
stopniowo dodając później przygotowywane
bitmapy, np. mapy wypukłości.

background image

Z procesem wypełniania sceny teksturami
związany jest też alpha-blending. Służy on do
zarządzania przezroczystościami i dzięki
temu ułatwia nakładanie jednej tekstury na
drugą.

Technika

alpha-blendingu

wykorzystuje tzw. kanał alpha, określający
stopień przezroczystości nakładanej tekstury.
Przyjmuje on wartości od zera (obiekt
zupełnie

transparentny)

do

255

(powierzchnia

nieprzezroczysta).

Wartość

kanału

alfa

ukryta

jest

w

czterech

parametrach opisujących punkt bitmapy. W
wypadku korzystania z 32-bitowego koloru 24
bity opisują barwy RGB, a brakujące osiem
bitów to właśnie kanał alfa.

background image

W trakcie teksturowania akcelerator
wykonuje także filtrowanie tekstur. Ma
ono zapobiec efektowi pikselizacji
i rozmyć niekiedy zbyt wyraźne granice
pomiędzy

trójkątami,

na

których

nałożono dwa kolejne poziomy map
MIP. Filtrowanie przeciwdziała też
gubieniu

detali

związanemu

ze

skalowaniem map MIP – szczegóły,
takie jak np. spojenia cegieł, mogą stać
się niewidoczne, gdyż karta nie wie,
jakie punkty na teksturze są istotne.

background image

Najprostsza i najstarsza technika filtrowania

tekstur to tzw. filtrowanie dwuliniowe (ang.

bilinear filtering). Metoda ta polega na

przyporządkowaniu każdemu filtrowanemu

tekselowi koloru otrzymanego w wyniku

interpolacji czterech sąsiednich punktów

tekstury. Jej wadą jest to, że na przejściach

pomiędzy poszczególnymi mapami MIP wciąż

widoczne

krawędzie.Bardziej

zaawansowanym sposobem jest filtrowanie

trójliniowe (ang. trilinear filtering). Tutaj do

ujednolicenia barwy oddalonych obiektów

używa się dwóch kolejnych map MIP. Najpierw

metodą dwuliniową interpoluje się barwy

wynikające z pierwszej mapy MIP, później zaś

z drugiej. Uśredniony wynik uzyskuje się

zatem na podstawie wartości ośmiu tekseli.

background image

Kolejną, bardziej skomplikowaną metodą

filtrowania

tekstur

jest

filtrowanie

anizotropowe (ang. anisotropic filtering).

Tutaj przy uśrednianiu koloru bierze się

pod

uwagę

orientację

przestrzenną

tekseli względem obserwatora. Dzięki

temu obszary, z których interpolowane są

brakujące wartości, układają się w kształt

elipsy, prostokąta lub rombu (są to tzw.

figury anizotropowe), gdzie długa oś

figury

wyznacza

kierunek

procesu

filtrowania.

Do

metody

filtrowania

anizotropowego wykorzystuje się obecnie

zazwyczaj od ośmiu (poziom filtra 1x) do

128 tekseli (16x).

background image

Po przeprowadzeniu filtrowania tekstur, stosuje

się moduły Pixel Shader, które są w stanie

zmodyfikować nałożone już na obiekty bitmapy.

Co ciekawe, programy obsługujące shadery mogą

w niemal dowolny sposób łączyć ze sobą tekstury

składowe. Dzięki temu sposób mapowania zależeć

może wyłącznie od wyobraźni i umiejętności

programisty. Można więc pominąć wszystkie

wymienione wcześniej metody teksturowania i

zaimplementować

swoją

własną,

która

da

niespotykane dotąd realistyczne efekty. Niestety,

programiści piszący gry nie wykorzystują w pełni

potencjału,

jaki

niosą

ze

sobą

programy

shaderowe, gdyż takie programowanie nie jest

proste. Niemniej teksturowanie shaderowe i

ewentualne

modyfikowane

nałożonych

już

obiektów daje niesamowite efekty.

background image
background image

Nawet najlepsza tekstura nie jest w stanie

odtworzyć

gry

świateł

i

cieni,

jaką

obserwujemy w codziennym życiu. To właśnie

odpowiednie „oświetlenie” sceny sprawia, że

przedmioty nabierają głębi i stają się

„przestrzenne”.

Wówczas,

tak

jak

w

rzeczywistości, blisko położone obiekty będą

jaśniejsze, a te oddalone ciemniejsze.

Oczywiście nie wolno też zapomnieć o

refleksach światła pochodzących od gładkich,

wypolerowanych powierzchni oraz wielu

różnorodnych jego źródłach (np. punktowych,

rozproszonych czy wielokolorowych), które

znajdują się na całej scenie – nie tylko na

widocznym dla obserwatora kadrze.

background image

Tu właśnie potrzebne jest cieniowanie.
Polega ono na zamianie wektorów
natężenia

światła,

obliczonych

dla

każdego trójkąta już na etapie kalkulacji
oświetlenia na teksele o odpowiedniej
jasności i kolorze, które należą do
tekstury wypełniającej dany trójkąt. Jak
można się domyślić, od dokładności
obliczeń, sposobu wyboru rozjaśnianych
bądź przyciemnianych punktów oraz
metody zmieniającej pierwotną barwę
tekstury (modyfikacja składowych RGB) w
zależności od natężenia światła zależy
efekt, jaki zobaczymy na ekranie.

background image

Jest najstarszą i najprostszą metodą cieniowania.
Polega ono na przyporządkowywaniu kolejnym
powierzchniom jednego poziomu jasności oraz
jednej barwy. Są one określone przez wektor
przypisany

do

jednego

z

wierzchołków

przetwarzanego trójkąta. Zazwyczaj do operacji
cieniowania płaskiego wybiera się te wierzchołki,
które znajdują się najbliżej obserwatora. Innymi
słowy,

każdemu

trójkątowi

przypisuje

się,

niezależnie od otaczających go wielokątów, jeden
ściśle określony odcień. Niestety, cieniowanie
płaskie daje dość nieciekawy efekt „kanciastości”
obiektów,

wynikający

z

gwałtownych

zmian

jasności przylegających do siebie trójkątów. Widać
to

szczególnie

wyraźnie

na

okrągłych

przedmiotach, takich jak np. kula czy torus.

background image

Daje ona znacznie lepsze rezultaty, bez efektu

„kanciastości”. Tutaj korzysta się z wersora

oświetlenia przypisanego do środka trójkąta. Powstaje

on z uśrednienia trzech wektorów oświetlenia

pochodzących z trzech wierzchołków trójkąta. Dzięki

temu

uwzględniona

zostaje

również

jasność

sąsiednich wielokątów. W efekcie w jednym trójkącie

mamy kilka obszarów o różnym natężeniu światła i w

ten sposób zachowane zostają płynne przejścia

poziomów

jasności

pomiędzy

poszczególnymi

wielokątami. Co ciekawe, cieniowanie Gourauda daje

też złudzenie gładkości sferycznych obiektów

złożonych nawet z niewielkiej liczby wielokątów. Gdy

jednak na przedmiot pada prostopale światło –

zachowuje się ono nienaturalnie (na skutek liniowej

interpolacji światła

background image

Jedną z najczęściej stosowanych metod cieniowania,

pozbawioną opisanych wad, jest cieniowanie Phonga (ang.

Phong shading), często nazywane też techniką per-pixel

lighting. W metodzie tej natężenie światła i odpowiadającą

mu modyfikację koloru przypisuje się oddzielnie każdemu

punktowi sceny 3D. Operacje tę przeprowadza się na

pikselach, a nie na tekselach. Obliczenia przypominają te z

poprzedniej metody, ale zamiast interpolacji wyłącznie

wersorów opisujących natężenie światła w danym punkcie,

wyznacza się wektory normalne. Zawierają one oprócz

informacji o natężeniu również dane o kolorach oraz

orientacji padającego i odbitego światła. Innymi słowy, w

metodzie Phonga oblicza się nie tylko wypadkowe

oświetlenie punktu, ale też orientację odbitego od

powierzchni promienia światła.

background image

Jest znacznie bardziej zaawansowaną

metodą obsługi oświetlenia. Polega ona

na śledzeniu promienia światła. Jest ona

bardzo czasochłonna, ale daje najlepsze

efekty wizualne. W ten sposób we

współczesnych grach odwzorowuje się

m.in. lustra, odbicia przedmiotów od

powierzchni błyszczącego lakieru, a

przede wszystkim powierzchnię wody.

Minimalna

liczba

promieni,

które

powinny zostać zbadane w metodzie

ray-tracingu, równa się liczbie pikseli, w

jakiej generowana jest scena 3D.

background image

Najpopularniejszą metodą tworzenia cieni

na trójwymiarowej scenie jest technika

korzystająca z map cieni (ang. shadow

maps). Są to przygotowane wcześniej w

odcieniach

szarości

bitmapy,

odpowiadające

konturom

wszystkich

znajdujących się na scenie przedmiotów.

Wystarczy teraz odpowiednio je zaczepić

na scenie i ewentualnie zdeformować, tak

aby cień układał się pod odpowiednim

kątem wzdłuż linii prowadzącej do źródła

światła. Często używa się też kilku map, w

wypadku gdy na generowanej scenie

znajduje się więcej głównych źródeł

światła.

background image

Inną

metodą

jest

algorytm

cieni

szablonowych (ang. stencil shadow). Do
ich

nanoszenia

wykorzystuje

się

ośmiobitowy bufor szablonów. Metoda ta
polega na „przykryciu” przygotowanymi
uprzednio cieniami sceny 3D jeszcze
przed przystąpieniem do teksturowania.
Te obszary, które zasłania cień, są
wyłączone z obliczeń, co znacznie
przyspiesza

proces

renderowania.

Później w to miejsce przenosi się z
bufora gotowy obraz cienia.

background image

Ostatni etap renderingu to dodawanie tzw.
efektów

atmosferycznych

(ang.

atmospheric effects). Nazwa ta nie najlepiej
oddaje sens tej operacji, gdyż oprócz
typowych

zjawisk

atmosferycznych,

obejmuje też dym, ogień, refleksy świetlne,
ogniskowanie kadru, efekty cząsteczkowe,
zmętnienie lustra wody czy rozmycie ruchu.
Realizacja wszystkich tych funkcji odbywa
się wfazie postprocessingu, wykonywanej
już po zakończeniu procesu tworzenia
sceny 3D.

background image

Najczęściej

stosowanymi

efektami

atmosferycznymi są mgła i dym, które rysuje się
za pomocą czterech odmiennych technik:

Mgła liniowa: liniowo, wraz ze wzrostem
odległości obiektów od obserwatora nakłada się
coraz gęstszą mgłę.

Tablica

mgieł

-

stopień

zamglenia

dla

poszczególnych obiektów i odległości zapisany
zostaje w przygotowanej wcześniej tablicy.

Mgła wykładnicza - bardzo przypomina efekty
uzyskiwane za pomocą tablicy mgieł, lecz nie
wymaga on predefiniowania stopni zamglenia.
Oblicza się je na bieżąco, korzystając z
zaprogramowanej funkcji wykładniczej.

Mgła

wolumetryczna

-

do

jej

tworzenia

wykorzystywane są półprzezroczyste tekstury
trójwymiarowe

background image

Efektem bazującym na algorytmie mgły

wykładniczej jest głębia ostrości (depth

of field). W realnym świecie, nawet

przy

najlepszej

pogodzie,

odległe

obiekty, jak np. góry na horyzoncie,

zawsze są dosyć niewyraźne. Aby

odtworzyć to zjawisko, karta graficzna

zmienia wykładniczo kolory i odcienie

przedmiotów w zależności od dystansu

dzielącego przedmiot od obserwatora –

im większa odległość, tym mniej

wyraźnie widać nawet duże obiekty.

background image

Eekty cząsteczkowe (ang. particle
effects) otrzymuje się nakładając na
gotową scenę 3D lub jej fragment
bitmapy

zawierające

animację

deszczu, padającego śniegu czy np.
płomieni. Taką animację odwraca się
zawsze przodem do obserwatora. Co
ważne, efekty cząsteczkowe nie
wymagają

praktycznie

żadnego

nakładu obliczeniowego, a uzyskane
rezultaty są wyjątkowo realistyczne.

background image

Ostatnim

efektem

postprocessingowym

jest

motion

blur,

czyli

kierunkowe

rozmycie

szybko poruszających się obiektów,
np. lecącej w naszym kierunku piłki,
bądź rozpędzonego samochodu.


Document Outline


Wyszukiwarka

Podobne podstrony:
08 GIMP tworzenie grafiki na potrzeby WWW (cz1)
12 GIMP tworzenie grafiki na potrzeby WWW (cz5)
Laboratorium 4 Grafika 3D
11 GIMP tworzenie grafiki na potrzeby WWW (cz4)
2006 03 Blender–program do grafiki 3D [Grafika]
Przedm.-dobr, Studia, Grafika 3D w systemach CAD
09 GIMP tworzenie grafiki na potrzeby WWW (cz2)
13 GIMP tworzenie grafiki na potrzeby WWW (cz6)
I.Przedm. tIII-dob, Studia, Grafika 3D w systemach CAD
10 GIMP tworzenie grafiki na potrzeby WWW (cz3)
grafika 3D lab9 id 194729 Nieznany
3 Grafika 3D
08 GIMP tworzenie grafiki na potrzeby WWW (cz1)
12 GIMP tworzenie grafiki na potrzeby WWW (cz5)
Laboratorium 4 Grafika 3D
OpenGL Podstawy programowania grafiki 3D opglwp

więcej podobnych podstron