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