Grafika 3D Opracowanie: J. Kęsik kesik@cs.pollub.pl
Podstawowe pojęcia Modelowanie i wyświetlenie struktury trójwymiarowej wymaga zajęcia się wieloma aspektami oprócz samego dodania trzeciej współrzędnej Krawędzie obiektów można tworzyć na różne sposoby (figury płaskie, powierzchnie zakrzywione ), czasem potrzeba również dodać informacje o wnętrzu obiektu Przekształcenia geometryczne w 3D są bardziej skomplikowane od ich odpowiedników w 2D (np. obrót obiektu wokół osi dowolnie umiejscowionej w 3D)
Podstawowe pojęcia Prezentacja obrazu 3D na płaszczyźnie 2D jest również bardzo skomplikowana. Konieczne jest ustalenie wielu parametrów, mówiących jak scena 3D ma być rzutowana na powierzchnię wyświetlania - widok. Konieczne jest zbudowanie transformacji układu współrzędnych 3D sceny na układ 2D widoku - rendering. Należy również określić część sceny widoczną w danym widoku, a odpowiednie algorytmy renderowania powierzchni muszą być użyte aby uzyskać realistyczny widok
Modelowanie obiektów Podstawowy podział w sposobie modelowania obiektów to Modelowanie pełne (solid) takie modele określają objętość reprezentowanych obiektów. Są bardziej realistyczne ale trudniejsze do zbudowania. Są najczęściej wykorzystywane przy symulacjach niewizualnych (medycyna, inżynieria, CAD)
Modelowanie obiektów Podstawowy podział w sposobie modelowania obiektów to Modelowanie krawędziowe / Reprezentacja brzegowa (shell, b-rep boundary representation) takie modele opisują tylko powierzchnię obiektów, pozostawiając pusty środek. Są prostsze do utworzenia i przetwarzania Praktycznie wszystkie modele obiektów w grach i animacjach komputerowych są modelami krawędziowymi
Voxele Jedną z metod tworzenia modeli pełnych jest wykorzystanie voxeli Voxel (volumetric pixel / volumetric picture element) jest pojedynczym elementem trójwymiarowej, równomiernej matrycy. Element ten ma pewne, określone rozmiary
Voxele Metoda voxelowa ma bardzo duże wymagania co do ilości pamięci potrzebnej do zapamiętania kształtu obiektu Np. 500x500x500 voxeli ~ 125 M Zaletą jest możliwość przypisania każdemu voxelowi dodatkowej informacji np. rodzaj materiału
Model krawędziowy nie posiada środka. Składa się wyłącznie z nieskończenie cienkiej skorupki. Skorupka ta jest tworzona na podstawie opisu modelowanych obiektów Automatycznie przez konwersję opisu matematycznego Ręcznie przez edycję skorupki przez projektanta Istnieją różne metody opisu takich modeli (skorupek)
Podstawowe pojęcia Pojęcie bryły i jej właściwości (wymagania) Jest podzbiorem przestrzeni R 3 Jest jednorodna topologicznie nie składa się z elementów z różnego wymiaru Skończona Domknięta Efektywna
Istnieją różne metody opisu takich modeli (skorupek) Metoda modelowania z wielokątów (polygonal modelling) Polega na przybliżaniu kształtu obiektu za pomocą zbioru wielokątów połączonych krawędziami Model ten jest opisany za pomocą Punktów w przestrzeni 3D vertexy Odcinków łączących te punkty ze sobą
Istnieją różne metody opisu takich modeli (skorupek) Metoda modelowania z wielokątów (polygonal modelling) Stworzone zbiory połączeń są nazywane siatkami. W celu usprawnienia automatycznego przetwarzania takiej siatki, wykorzystuje się tylko jeden rodzaj wielokąta w danej siatce. Najczęściej czworokąty lub trójkąty.
Istnieją różne metody opisu takich modeli (skorupek) Metoda modelowania z wielokątów (polygonal modelling) Główną zaletą stosowania takich modeli jest łatwość ich maszynowego przetwarzania i renderowania. Podstawową wadą jest stosowanie wyłącznie krawędzi prostych, zmuszające do modelowania krzywizn za pomocą dużej ilości wielokątów.
Podstawową wadą jest stosowanie wyłącznie krawędzi prostych, zmuszające do modelowania krzywizn za pomocą dużej ilości wielokątów.
Najczęściej spotykane siatki to siatki trójkątów. Wynika to z faktu, że wszystkie wierzchołki trójkąta znajdują się na jednej płaszczyźnie. Ułatwia to renderowanie obiektu. Siatki zawierają znaczne ilości trójkątów (setki tysięcy dla przeciętnego obiektu). Uzyskany model jest zawsze kompromisem między realizmem obrazu a szybkością renderowania W przypadku gier jest to szczególnie ważne gdyż rendering musi odbywać się w czasie rzeczywistym
Siatka wielokątowa jest zbiorem krawędzi, wierzchołków i wielokątów spełniających warunki: każda krawędź jest wspólna dla dwóch wielokątów*. Krawędź łączy dwa wierzchołki wielokąt jest zamkniętą sekwencja krawędzi Krawędź może być wspólna dla dwóch sąsiednich wielokątów, wierzchołek jest wspólny dla przynajmniej dwóch krawędzi i każda krawędź jest częścią jakiegoś wielokąta. Żadna z krawędzi nie może przechodzić przez werteks (jest nimi zakończona nigdy w środku krawędzi) * W przypadku siatek opisujących bryły
Reprezentacje scen 3D Obiekty na scenie 3D Bryły są najczęściej wizualizowane za pomocą ich powierzchni brzegowej B-rep (boundary representation). W przypadku bryły nie można zobaczyć drugiej strony tej powierzchni podczas gdy obiekty otwarte uwidoczniają obie strony
Reprezentacje scen 3D Obiekty na scenie 3D Częstym zabiegiem w grafice 3D jest definiowanie lewej i prawej strony powierzchni granicznych. Powierzchnie brył skierowane do obserwatora stroną lewą nie są renderowane optymalizacja wyświetlania
Reprezentacje scen 3D Obiekty na scenie 3D Innym podziałem obiektów jest klasyfikacja jako Prymityw obiekt określony samodzielnie Obiekt złożony określony za pomocą innych obiektów/prymitywów Podział miedzy prymitywami a obiektami złożonymi jest dość umowny i zależy od zastosowania czy programu edycyjnego.
Reprezentacje scen 3D Obiekty na scenie 3D Reprezentacja obiektu przeznaczona do wyświetlenia jest inna niż reprezentacja przeznaczona np. do analizy komputerowej. Zakrzywiony dach może być reprezentowany siatką trójkątów albo powierzchnią parametryzowaną krzywymi NURBS
Reprezentacje scen 3D Reprezentowanie brył wielościennych W opisie krawędziowym są zdefiniowane Powierzchnia bryły zbiór płaskich ścian (wielokątów) stykających się odpowiednimi krawędziami Krawędzie ściany zbiór odcinków ograniczających ścianę, stykających się w odpowiednich wierzchołkach Wierzchołki krawędzi pary punktów definiujących daną krawędź
Reprezentacje scen 3D Reprezentowanie brył wielościennych Taki układ definiuje pewną hierarchię opisu bryły Reprezentacja bryły może więc składać się z tablic wierzchołków, krawędzi i ścian powiązanych ze sobą odpowiednimi odnośnikami
Reprezentacje scen 3D Opis wierzchołka/vertexa w 3D Zawiera 3 współrzędne w układzie kartezjańskim (lub 4 wsp. jednorodne) Może zawierać zestaw odnośników do tablicy krawędzi, które z niego wychodzą. Może zawierać zestaw odnośników do ścian, w których jest wierzchołkiem Bardzo często zawiera wektor normalny niezbędny przy obliczaniu oświetlenia itp
Reprezentacje scen 3D Opis krawędzi w 3D Zawiera wskaźniki wierzchołków końcowych Zawiera wskaźniki ścian, których brzegiem jest krawędź Wartość przełącznika wygładzania krawędzi np. powierzchnie krzywoliniowe
Reprezentacje scen 3D Opis półkrawędzi w 3D (alternatywnie) Zawiera wskaźniki wierzchołków końcowych Zawiera wskaźniki ściany, której brzegiem jest półkrawędź Wartość przełącznika wygładzania krawędzi np. powierzchnie krzywoliniowe Zawiera wskaźnik do bliźniaczej półkrawędzi Łatwiejsze wykonywanie niektórych algorytmów
Reprezentacje scen 3D Opis ściany w 3D Zawiera listę krawędzi ją tworzących Może zawierać listę wierzchołków (zamiennie lub równolegle z listą krawędzi) Może zawierać listę trójkątów składowych Zawiera wektor normalny Id powierzchni Właściwości optyczne powierzchni
Reprezentacje scen 3D Opis ściany w 3D Może zawierać listę trójkątów składowych Przyspieszenie renderingu niektórymi metodami Np. Algorytm śledzenia promieni oblicza przecięcia promieni ze ścianą prostsze szukanie przecięcia z trójkątem niż ze skomplikowanym wielokątem (do kilku % zysku)
Reprezentacje scen 3D Opis bryły w 3D Redundancja danych w takim opisie jest stosowana w celu Szybkiego dostępu do danych z każdego poziomu Ułatwienia testowania poprawności bryły (jej homeomorficzności z kulą)
Reprezentacje scen 3D Testowanie poprawności bryły (jej homeomorficzności z kulą*) polega na sprawdzeniu wzoru Eulera: V E + F = 2, gdzie V - liczba wierzchołków E liczba krawędzi F liczba ścian
Reprezentacje scen 3D Testowanie poprawności bryły (jej homeomorficzności z kulą*) Bryła jest homeomorficzna z drugą bryłą, gdy można ją przekształcić w drugą bez rozrywania i sklejania Źródło: http://pl.wikipedia.org/w/index.php?title=plik:mug_and_torus_morph.gif&filetimestamp=20070302005604
Istnieje kilka reprezentacji siatek wielokątów Reprezentacja bezpośrednia Każdy wielokąt jest opisany przez zbiór współrzędnych jego kolejnych wierzchołków-vertexów Np. W 1 =[(x 1, y 1, z 1 ), (x 2, y 2, z 2 ), (x 3, y 3, z 3 ), ] Między każdą parą wierzchołków jest krawędź + krawędź miedzy pierwszym i ostatnim Taki zapis jest mało optymalny przy zapisywaniu całej siatki wielokątów ze względu na powtarzanie zapisu wierzchołków
Istnieje kilka reprezentacji siatek wielokątów Reprezentacja bezpośrednia Dodatkowym problemem jest konieczność eliminacji nadmiarowych krawędzi podczas renderingu Brak tej eliminacji może spowodować zapalanie dodatkowych pikseli przy rysowaniu tej samej krawędzi w przeciwnych kierunkach
Istnieje kilka reprezentacji siatek wielokątów Reprezentacja przez listę wskaźników Do opisu wielokątów wykorzystywane są wskaźniki na wierzchołki Np. W 1 =[w 1, w 2, w 3, ] Eliminuje to problem nadmiernej alokacji pamięci ale pozostawia problem podwójnego rysowania krawędzi
Istnieje kilka reprezentacji siatek wielokątów Reprezentacja przez listę wskaźników na krawędzie Do opisu wielokątów wykorzystywane są wskaźniki na krawędzie Np. W 1 =[k 1, k 2, k 3, ] gdzie każda krawędź jest opisana za pomocą pary wierzchołków (wskaźniki) oraz pary wielokątów, do których należy. Gdy należy tylko do jednego, drugi jest oznaczany jako 0 k 1 =[w 1, w 2, W 3, W 5 ]
Istnieje kilka reprezentacji siatek wielokątów Reprezentacja przez listę wskaźników na krawędzie Eliminuje to zarówno problem nadmiernej alokacji pamięci wskaźniki na krawędzie. jak i problem podwójnego rysowania krawędzi rysowane są wszystkie krawędzie, nie wszystkie wielokąty
Reprezentacje scen 3D Opis bryły w 3D Alternatywą do redundantnego zapisu jest zapis minimalistyczny np. taśma trójkątów gdzie kolejne ściany są określane trójkami wierzchołków przesyłanych jednym ciągiem.
Reprezentacje scen 3D Opis bryły w 3D Zapis minimalistyczny siatki trójkątów może być optymalizowany wg. zasady dodawania 1 wierzchołka przy tworzeniu następnego trójkąta. Oraz wykorzystaniu wierzchołków poprzedniego Możliwe są dwa układy: Pas trójkątów Wachlarz trójkątów
Reprezentacje scen 3D Opis bryły w 3D Zapis minimalistyczny siatki trójkątów Pas trójkątów Nowy trójkąt powstaje z 2 ostatnich wierzchołków poprzedniego + 1 nowy wierzchołek
Reprezentacje scen 3D Opis bryły w 3D Zapis minimalistyczny siatki trójkątów Pas trójkątów
Reprezentacje scen 3D Opis bryły w 3D Zapis minimalistyczny siatki trójkątów Wachlarz trójkątów Nowy trójkąt powstaje z ostatniego i pierwszego (zawsze ten sam) wierzchołka poprzedniego trójkąta + 1 nowy wierzchołek
Reprezentacje scen 3D Opis bryły w 3D Zapis minimalistyczny siatki trójkątów Wachlarz trójkątów
Przecięcie wielościanów Mając dwa wielościany reprezentowane według powyższych zasad, można wyznaczyć (regularyzowaną) powierzchnię przecięcia między nimi. Algorytm wyznaczania takiego przecięcia zakłada, że wektory normalne ścian bryły są zorientowane na zewnątrz można łatwo określić strony ściany (zawieranie się w bryle)
Przecięcie wielościanów Mogąc wyznaczyć przecięcie i dopełnienie, można określić sumę i różnicę dwóch brył Zbiór punktów wspólnych ścian dwóch wielościanów nazywany jest linią przenikania. Jest to z reguły wielokąt przestrzenny. Jego wierzchołkami są punkty przebicia krawędzi jednego wielościanu ze ścianami drugiego z nich. Jego bokami są odcinki krawędzi ścian obu przenikających się wielościanów
Przecięcie wielościanów Linia przenikania
Przecięcie wielościanów Linia przenikania
Przecięcie wielościanów Algorytm znajdowania przecięcia wielościanów regularnych (znając ich brzegi) składa się z kilku podstawowych etapów: Etap 1 Analizowana jest każda para ścian pochodzących po jednej z obu brył. Wyznaczane jest przecięcie tych ścian Możliwe wyniki: (brak przecięcia, punkt, odcinek, wielokąt*) *gdy obie ściany znajdują się na tej samej płaszczyźnie
Przecięcie wielościanów Algorytm znajdowania przecięcia wielościanów: Etap 1 W przypadku wielokąta wyznaczamy odcinki przecięcia jednej ściany z drugą.
Przecięcie wielościanów Algorytm znajdowania przecięcia wielościanów: Etap 2 Odcinki wyznaczone w etapie 1 służą do podzielenia ścian na zamknięte fragmenty Każdy taki fragment ściany jednej z brył leży: Wewnątrz drugiej Na zewnątrz drugiej Na brzegu drugiej
Przecięcie wielościanów Algorytm znajdowania przecięcia wielościanów: Etap 2 Budowany jest graf sąsiedztwa fragmentów ścian. Jego wierzchołkami są fragmenty, a krawędziami krawędzie wielościanów lub odcinki wyznaczone w 1 etapie
Przecięcie wielościanów Algorytm znajdowania przecięcia wielościanów: Etap 3 a) Wybieramy nieodwiedzony fragment ściany -wierzchołek grafu sąsiedztwa ścian i sprawdzamy, czy należy on do powierzchni przecięcia brył. Następnie przeszukujemy graf sąsiedztwa ścian zatrzymując się na krawędziach odcinkach przecięcia wielościanów
Przecięcie wielościanów Algorytm znajdowania przecięcia wielościanów: Etap 3 b) Jeżeli początkowy fragment należy do powierzchni przecięcia to wszystkie odwiedzone fragmenty również dodaje się je do tej powierzchni. Zbadane fragmenty zostają oznaczone jako odwiedzone Kroki a i b są powtarzane do odwiedzenia wszystkich fragmentów
Przecięcie wielościanów Algorytm znajdowania przecięcia wielościanów: Etap 4 Do zbioru (grafu) fragmentów powierzchni przecięcia dołącza się krawędzie wyznaczone w etapie 1. Istnieją szczególne przypadki, np. stykanie się brył krawędziami, dla których powyższa metoda nie działa poprawnie.
Modelowanie prymitywowe Konstruktywna geometria brył (Constructive Solid Geometry) Opiera się na wcześniejszym zdefiniowaniu niewielkiego zbioru brył podstawowych - prymitywów. Np. sfera, równoległobok, stożek Obiekt docelowy powstaje w skutek wykonywania operacji logicznych między prymitywami składającymi się na ten obiekt Wykorzystywane do budowania modeli pełnych i siatkowych
Modelowanie prymitywowe Podstawowymi zaletami są: Szybkie tworzenie obiektów (budowa z klocków ) Absolutna dokładność opisu obiektów podstawowych Prostota opisującego je języka Modelowanie to nadaje się bardziej do obiektów technicznych niż np. organicznych (gładkie krzywizny)
Modelowanie prymitywowe Renderowanie modelu prymitywowego może przebiegać bezpośrednio (np. PovRay) albo po przekształceniu w siatkę trójkątów
Modelowanie prymitywowe Podstawowymi operacjami na obiektach są: suma
Modelowanie prymitywowe Podstawowymi operacjami na obiektach są: suma
Modelowanie prymitywowe Podstawowymi operacjami na obiektach są: różnica
Modelowanie prymitywowe Podstawowymi operacjami na obiektach są: różnica
Modelowanie prymitywowe Podstawowymi operacjami na obiektach są: Część wspólna
Modelowanie prymitywowe Podstawowymi operacjami na obiektach są: Część wspólna
Modelowanie prymitywowe Zbiór prymitywów klocków może być określany na wiele sposobów. Dobierany do zadania modelowania Prymitywem może być np. dowolna półprzestrzeń W takim przypadku nie ma zastosowania ograniczenie mówiące, że wynikowym obiektem ma być bryła
Modelowanie prymitywowe Z operacjami boolowskimi na bryłach związany jest problem brzegu. Niektóre operacje wykonywane na odpowiednio ustawionych bryłach mogą w efekcie dać obiekt nie będący bryłą Np. Część wspólna brył stykających się jedną krawędzią da w rezultacie odcinek
Modelowanie prymitywowe Z operacjami boolowskimi na bryłach związany jest problem brzegu. Wykorzystuje się więc regularyzowane operacje boolowskie oznaczane *. Zapobiegają one powstawaniu innych obiektów niż bryły, dając zbiór pusty albo domykając otwarte powierzchnie
Modelowanie prymitywowe Operacje można łączyć w drzewa binarne uzyskując skomplikowane kształty w niewielu krokach Źródło: http://en.wikipedia.org/wiki/file:csg_tree.png
Modelowanie prymitywowe Do zalet modelowania prymitywowego należą: Łatwe zapewnienie że obiekt jest zamknięty ( wodoodporny ) jeżeli wszystkie prymitywy składowe są zamknięte. Łatwe testowanie kolizji. Sprawdzanie kolizji punktu z prymitywami składowymi (proste) Wyniki kolizji poddawane tym samym operacjom logicznym co prymitywy
Modelowanie obiektem 2D Przesuwanie - sweeping Jedną z metod konstrukcji modeli 3d jest przesuwanie obiektu 2D wzdłuż ścieżki (najczęściej odcinka) tworząc obiekt 3D
Modelowanie obiektem 2D Sweeping może przebiegać również wzdłuż ścieżki
Modelowanie obiektem 2D Rozszerzeniem sweepigu może być skalowanie obiektu 2D i/lub jego obrót w czasie przesuwania wzdłuż ścieżki
Modelowanie obiektem 2D Analogicznie do sweepingu można modelować przez obracanie obiektu 2D
Modelowanie przez podział (subdivision) Zasada tego modelowania polega na stworzeniu prostego, zgrubnego modelu a następnie rekurencyjnym wykonywaniu podziału jego wielokątów
Modelowanie przez podział (subdivision) Podział jest wykonywany dla każdego bieżącego vertexa, według określonego schematu (refinement scheme) Schematy te generalnie dzielą się na interpolujące i aproksymujące
Modelowanie przez podział (subdivision) Takie modelowanie jest wykorzystywane przy tworzeniu obiektów o gładkich, płynnie przechodzących powierzchniach Na każdym poziomie podziału możliwe jest edytowanie uzyskanych vertexów Wykorzystuje się również podejście odwrotne: Wskanowany obiekt jest poddawany kolejnym operacjom zmniejszania szczegółowości tworząc poziomy sybdivision
Modelowanie przez mozaikowanie (teselation) Mozaikowanie polega na wypełnieniu bez dziur pewnego obszaru za pomocą wieloboków- kafelków. Mozaikowanie wykorzystujące jednakowe wielokąty nazywane jest regularnym i tworzy obszar z trójkątów, kwadratów lub sześciokątów. Mozaikowanie półregularne wykorzystuje układy zbioru ośmiu rodzajów wielokątów, ułożonych tak, że ich rozkład w każdym z werteksów jest jednakowy
Modelowanie przez mozaikowanie (teselation) W grafice komputerowej mozaikowanie jest wykonywane maszynowo. Najbardziej powszechną wersją mozaikowania jest triangularyzacja. Jest ona wykorzystywana przy zamianie siatki drutowej-edycyjnej na siatkę trójkątów wykorzystywana w renderingu. Algorytmy mozaikowania są wbudowane w środowiska DirectX i opengl
Modelowanie przez tworzenie powierzchni poziomicowych (implicit surfaces/level set) Bazuje na zasadzie przecinania obiektu powierzchnią przesuwaną w kierunku prostopadłym do niej. Powstałe figury 2D są określane mianem powierzchni poziomicowych/izopowierzchni
Modelowanie przez tworzenie powierzchni poziomicowych (implicit surfaces/level set) Model opisany izopowierzchniami ma je ułożone od najbliższej do najdalszej w stosunku do pewnego punktu obserwacji
Modelowanie przez tworzenie powierzchni poziomicowych (implicit surfaces/level set) Takie modelowanie jest stosowane dla obiektów zmieniających swój kształt w czasie, ze względu na stosunkowo łatwe podążanie za tymi zmianami Np. odkształcenie obiektu miękkiego w skutek uderzenia
Modelowanie przez kopiowanie prymitywów Zdefiniowany jest pewien zbiór prymitywów posiadających parametry. Np. ilość ścian bocznych graniastosłupa. Kopiowanie prymitywów stosuje się przy opisie modeli złożonych, trudnych do opisania za pomocą podstawowego modelowania prymitywowego. (Np. koła zębate, śruby ) a łatwych do opisania za pomocą parametrów wysokopoziomowych (Np. średnica i ilość zębów koła zębatego)
Modelowanie przez wykorzystanie mapy wysokości Wykorzystywane jest do tworzenia pofałdowanych powierzchni W tym modelowaniu wykorzystuje się rastrowy obraz monochromatyczny. Stopnie szarości pikseli odpowiadają wysokościom odległościom od pozycji bazowej powierzchni. Zakres między odległością minimalną 0 a minimalną może być określany w trakcie tworzenia powierzchni, dając możliwość manewrowania wysokościom odkształceń
Modelowanie przez wykorzystanie mapy wysokości Mapy wysokości są często wykorzystywane do tworzenia realistycznych terenów w grach. Bitmapa tworząca dany teren jest znacznie mniej skomplikowana od siatki opisującej go wymaga mniej pamięci do przechowywania