Grafika 3D

advertisement
Grafika 3D (grafika trójwymiarowa) – nazwa jednej z dziedzin
grafiki komputerowej, zajmującej się głównie wizualizacją
obiektów trójwymiarowych. Nazwa pochodzi od angielskiego
sformułowania Three-Dimensional Graphics.
Geometria obiektów trójwymiarowych może być reprezentowana
na kilka sposobów:

Siatka wielokatów

Voxele

Opis matematyczny
Siatka to w grafice 3D i CAD dwa lub więcej wielokątów
połączonych ze sobą krawędziami. Zwykle siatki tworzone są z
trójkątów lub czworokątów wypukłych.
W ten sposób można opisywać proste bryły, albo – jeśli siatka jest
dostatecznie gęsta – dobrze przybliżać skomplikowane obiekty.
Obiekty trójwymiarowe reprezentowane w ten sposób można w
łatwy sposób poddawać różnym modyfikacjom i deformacjom.
Siatka może być reprezentowana na kilka sposobów:
 Tablica wielokątów
 Tablica wielokątów ze wskaźnikami na wierzchołki
 Tablica wielokątów ze wskaźnikami na krawędzie
Voxele (woksele) – obiekt jest budowany z elementarnych
sześcianów (trójwymiarowych pikseli). Tego rodzaju
reprezentacja jest rozpowszechniona szczególnie w diagnostyce
medycznej, gdzie uzyskuje się szereg przekrojów (obrazów
bitmapowych) ciała pacjenta i na ich podstawie tworzy
trójwymiarowe modele.
Opis matematyczny – obiekty są określone równaniami. Mogą
to być np. kule, płaszczyzny, oraz szczególnie użyteczne i
powszechnie stosowane powierzchnie parametryczne (płaty
powierzchni), np. powierzchnie Béziera, Hermite'a czy NURBS.
Istnieją programy, które swoje funkcjonowanie opierają
głównie o właśnie taki sposób modelowania, zaliczyć do nich
można np. POV-Ray.
Dane trójwymiarowe mogą zostać pobrane ze świata
rzeczywistego, np. za pomocą wspomnianych tomografów
komputerowych, skanerów trójwymiarowych, ze zdjęć
satelitarnych (topografia terenów) a także ze zdjęć
stereoskopowych. W animacji komputerowej wykorzystywana
jest również technika motion capture, która polega na
nagrywaniu ruchu człowieka – czujniki położenia umieszczane
są w kluczowych punktach ciała: na rękach, nogach, głowie,
karku itp. Przeniesienie nagranych w ten sposób ruchów na
sztuczne postacie nadaje ich ruchom naturalność, trudną do
uzyskania klasycznymi metodami animacji.
Obiekty trójwymiarowe mogą również zostać stworzone przez
człowieka w procesie modelowania.
Duże znaczenie mają też techniki komputerowe, które
automatycznie modelują skomplikowane efekty (takie jak dym,
ogień, śnieg, deszcz) i obiekty (chmury, góry, drzewa).
Modelowanie — w grafice 3D proces tworzenia i modyfikacji
obiektów trójwymiarowych za pomocą specjalizowanego programu
komputerowego, zwanego modelerem. Modeler dostarcza zestawu
niezbędnych narzędzi, a także często zbioru podstawowych figur (w
j. ang. primitives), np. prostopadłościanów, kul, torusów i innych,
które można wykorzystać od razu przy budowaniu obiektów.
Obiekty 3D są przeważnie budowane z siatek wielokątów lub
definiowane przy pomocy krzywych parametrycznych (np.
NURBS), modelery używają obu reprezentacji. Siatka wielokątów
ma tę przewagę, że łatwo można deformować obiekt (np.
skręcać, wyginać, stosować system kości), z kolei krzywe
parametryczne w naturalny sposób tworzą gładkie powierzchnie.
Modelowanie bardziej skomplikowanych obiektów jest możliwe
dzięki kilku technikom:
 nadawanie dwuwymiarowym przekrojom głębokości, poprzez
przesuwanie przekrojów wzdłuż ścieżki (tj. odcinka, bądź
krzywej); w niektórych programach możliwe są dodatkowe
działania na przekrojach, np. obroty, skalowanie, czy nawet
zmiana przekroju na poszczególnych odcinkach ścieżki
 tworzenie brył obrotowych, poprzez obrót
dwuwymiarowych przekrojów wokół osi
 CGS - definiowanie brył przez operacje boolowskie
(suma, różnica, iloczyn) na innych bryłach
 subdivision surfaces – nieskomplikowana bryła tworzy
„zarys” obiektu, natomiast algorytm nadaje jej bardziej
obły, organiczny kształt (poprzez rekursywny podział
powierzchni i interpolację za pomocą krzywych
parametrycznych)
 mapy wysokości (ang. height map) — technika
modelowania terenów, w której wysokość punktu jest
powiązana z kolorem (jasnością) pikseli na bitmapie
 metakule (ang. metaballs) — tworzona jest powierzchnia, dla
której wartości w polu skalarnym są jednakowe, projektant
rozmieszcza w przestrzeni trójwymiarowej źródła tego pola –
początkowo wykorzystywano centralnie promieniujące punkty
(których obraz jest podobny do zlewających się kul), obecnie
używa się także promieniujących odcinków i płaszczyzn
 drzewa i krzewy są modelowane albo za pomocą Lsystemów, albo w specjalizowanych programach
symulujących cykl życia roślin
W grafice 3D modelowanie rzeczywistych obiektów i oddanie
za pomocą geometrii wszystkich szczegółów powierzchni jest
trudne i w większości przypadków niepraktyczne. Dlatego
stosuje się teksturowanie, czyli nakładanie na względnie
proste obiekty trójwymiarowe obrazów (tekstur), które
przedstawiają brakujące szczegóły.
Tekstury dzieli się na:
•Bitmapowe — są to na ogół zdjęcia powierzchni rzeczywistych
przedmiotów (ścian, tkanin, kory drzew, desek, itp.).
•Proceduralne — parametryzowane obrazy generowane
programowo, np.:
szachownica,
marmur,
drewno,
granit,
chmury.
Tekstury proceduralne mogą być również trójwymiarowe
(przestrzenne), wówczas kolor jest funkcją współrzędnych punktu
w przestrzeni trójwymiarowej.
Odwzorowanie współrzędnych dwuwymiarowej tekstury na
współrzędne obiektu trójwymiarowego nazywane jest
mapowaniem (mapowaniem tekstury):
1. Odwzorowanie może zostać utworzone w procesie
generacji obiektu.
2. Jeśli obiekt jest reprezentowany przez siatkę wielokątów
projektant może określić współrzędne tekstury dla każdego
wierzchołka.
3. Tekstura mapowana jest najpierw na jakąś prostą figurę
przestrzenną, a następnie konkretne punkty są rzutowane
na tę figurę.
Odwzorowanie jest wykonywane w lokalnym układzie współrzędnych
obiektu, co sprawia, że tekstura jest „przyklejona” na stałe do obiektu,
nadając jego powierzchni pożądany charakter. Rzadziej tekstura jest
ruchoma względem obiektu; w grafice czasu rzeczywistego (np. grach
komputerowych) w ten sposób symuluje się metaliczne obiekty, które
odbijają otoczenie (jest to tzw. mapowanie środowiska).
Mapowanie płaskie (lewa),
mapowanie sferyczne (prawa)
Shader - krótki program komputerowy, często napisany w
specjalnym języku (shader language), który w grafice
trójwymiarowej odpowiada za cieniowanie obiektów.
Technologia ta zastąpiła stosowaną wcześniej jednostkę T&L.
Shadery pozwalają na dużo bardziej skomplikowane
modelowanie oświetlenia i materiału na obiekcie niż
standardowe modele oświetlenia i teksturowanie. Są jednak dużo
bardziej wymagające obliczeniowo i dlatego dopiero od kilku lat
sprzętowa obsługa szaderów jest obecna w kartach graficznych
dla komputerów domowych. Wcześniej szadery stosowane były w
niektórych fotorealistycznych rendererach (np. Renderman),
gdzie grafika nie jest generowana w czasie rzeczywistym.
Obecnie z uwagi na wymagania bibliotek DirectX w wersji 10
zniknął podział panujący dotychczas na Pixel i Vertex Shader.
Obliczenia, jakimi te odrębne jednostki się zajmowały, są teraz
wykonywane przez jednolite jednostki obliczeniowe, które są
dynamicznie przydzielane do takiego typu obliczeń, jaki jest
aktualnie potrzebny. Rozwiązanie takie zostało nazwane przez ATI
Unified Shaders a przez nVidię Stream Processors.
Biblioteki graficzne Direct3D i OpenGL używają trzy typy
szaderów:
Szader wierzchołkowy - uruchamiany jest raz dla
poszczególnych przetwarzanych wierzchołków. Jego zadaniem
jest transformacja położenia wierzchołka w wirtualnej
przestrzeni 3D na współrzędne 2D na ekranie. Szadery
wierzchołkowe mogą operować na takich własnościach
wierzchołków jak położenie, kolor i współrzędne tekstur, ale nie
mogą tworzyć nowych wierzchołków. Wyjście szadera
wierzchołkowego jest wejściem dla następnego etapu w potoku,
jakim jest albo szader geometryczny (jeśli jest obecny) albo
rasteryzator.
Szader geometryczny - pozwala na dodawanie lub usuwanie
wierzchołków z siatki wierzchołków (ang. mesh). Szadery
geometryczne mogą być używane do proceduralnego tworzenia
obiektów geometrycznych albo do dodawania objętościowych detali
istniejących siatek wierzchołków. Te operacje mogłyby być zbyt
kosztowne obliczeniowo dla CPU. Direct3D 10 ma już zawarte
wsparcie dla tych szaderów. Natomiast OpenGL ma takie wsparcie,
ale w postaci rozszerzeń, aczkolwiek jest bardzo prawdopodobne, że
następna jego wersja (3.0 lub 3.1) będzie miała natywne wsparcie.
Jeśli szadery geometryczne są używane, to wtedy wyjście z nich jest
przekazywane do rasteryzatora.
Szader pikselowy - jest programowalną jednostką
odpowiadającą za wyliczanie koloru pikseli. Direct3D używa
terminu "pixel shader", a OpenGL - "fragment shader".
Piksele na wejście szadera pikselowego są pobierane z
rasteryzatora, który wypełnia wielokąty przesyłane z potoku
graficznego. Szadery pikselowe są przeważnie używane do
oświetlenia sceny i innych powiązanych efektów, np. bumpmappingu lub kolorowania.
Wersje jednostek shaderowych odpowiadajace wersjom DirectX
Wersja DirectX
Pixel Shader
Vertex Shader
8.0
1.0, 1.1
1.0
8.1
1.2, 1.3, 1.4
1.1
9.0
2.0
2.0
9.0a
2_A, 2_B
2.x
9.0c
3.0
3.0
10.0
4.0
4.0
10.1
4.1
4.1
Moscow
Racer
Crysis: Warhead
Far Cry 2
Empire :
Total War
Download