Próbuję zrozumieć podstawowe pojęcia 3D, w tej chwili próbuję dowiedzieć się, jak faktycznie działają tekstury. Wiem, że mapowanie UV i UVW to techniki mapujące tekstury 2D na obiekty 3D - powiedziała mi również Wikipedia. Poszukałem wyjaśnień, ale znalazłem tylko tutoriale, które zakładały, że już wiem, co to jest.
Z mojego zrozumienia, każdy model 3D składa się z Punktów, a kilka punktów tworzy twarz? Czy każdy punkt lub powierzchnia ma wtórną współrzędną, która odwzorowuje pozycję osi / y w Teksturze 2D? Lub w jaki sposób rozpakowywanie manipuluje modelem?
Co tak naprawdę robi W w UVW, co oferuje w stosunku do UV? Jak rozumiem, W odwzorowuje na współrzędną Z, ale w jakiej sytuacji miałbym różne tekstury dla tego samego X / Y i innego Z, czy część Z nie byłaby niewidoczna? Czy też całkowicie to nie rozumiem?
źródło
Odpowiedzi:
Twoje zrozumienie jest bliskie. Każdy model 3D składa się z wierzchołków. Każdy wierzchołek zwykle określa położenie punktu w przestrzeni, normalną (stosowaną w obliczeniach oświetlenia) i 1 lub więcej współrzędnych tekstury. Są one ogólnie oznaczone jako u dla poziomej części tekstury i v dla pionu.
Kiedy obiekt jest teksturowany, współrzędne te są używane do sprawdzenia, który tekstel lub piksel ma zostać narysowany na podstawie tekstury. Najłatwiej jest je traktować jako procenty lub proporcje między lewą krawędzią tekstury ( u = 0) a prawą krawędzią tekstury ( u = 1,0) i od góry tekstury ( v = 0) i od dołu z tego ( v= 1,0). Są interpolowane między wierzchołkami i wyszukiwane dla każdego renderowanego piksela ekranowego. Mogą być większe lub mniejsze od tych zakresów, a stan renderowania ustawiony podczas renderowania obiektu określa, co się stanie. Dostępne opcje to CLAMP i REPEAT. Zaciskanie ogranicza współrzędną do 0 lub 1, powodując rozmazanie tekstury tam, gdzie jest poza zakresem. Powtórz powoduje, że tekstura powtarza się, gdy jest poza zakresem; jest to właściwie to samo, co chwytanie tylko części dziesiętnej współrzędnej i używanie jej w miejscu.
Przed zastosowaniem współrzędnych tekstury na obiekcie są one mnożone przez macierz tekstury, aby zastosować do nich pewne przekształcenia (takie jak skalowanie, translacja lub obrót). Ten efekt jest czasem animowany w grach, aby wyglądał, jakby coś poruszało się po obiekcie bez konieczności przesuwania samego obiektu ... tekstura po prostu przewija się przez niego. Kiedy macierz tekstury jest mnożona przez współrzędne tekstury, generuje 2 wartości, które są używane do wyszukiwania tekstu w celu wykreślenia (nazwijmy je s i t ). Są one generowane automatycznie na podstawie u i v, nawet jeśli matryca tekstur nie jest ustawiona; jest to odpowiednik pomnożenia u i v przez macierz tożsamości.
To gdzie w koordynować przychodzi, choć nie jest używany tak często. Jest to dodatkowy parametr służący do pomnożenia macierzy tekstur i jest zwykle używany, gdy chcesz wziąć pod uwagę perspektywę (na przykład w mapowaniu cieni ). Działa tak samo, jak podczas przekształcania położenia w przestrzeni obiektowej w przestrzeń ekranową za pomocą macierzy rzutowania na świat. Po pomnożeniu UVW przez transformację projekcji otrzymujemy 2 współrzędne, s i t, które są następnie odwzorowywane na teksturę 2D.
źródło
Rozważ trójkąt.
Każdy narożnik ma współrzędną UV. Interpolujesz między nimi, aby uzyskać zestaw współrzędnych UV dla każdego piksela. (W grze jest także perspektywa, ale na razie zignorujmy to).
Następnie pobierasz teksturę z tekstury ze współrzędnych U i V. To znaczy piksel ze współrzędnej tekstury x, y - to samo, nieco inna terminologia, ponieważ mówimy o teksturach.
Jeśli twoja tekstura jest naprawdę trójwymiarowa, potrzebujesz również trzeciej współrzędnej, W.
Jednym ze sposobów na zwizualizowanie tego jest wyobrażenie sobie bloku drewna. Jeśli jakoś go pokroisz, zobaczysz, że każda płaszczyzna wewnątrz bloku zawiera rodzaj tekstury 2d.
Tekstury 3D są tak rzadkie, że na razie możesz o nich zapomnieć.
źródło
Pomyśl o origami.
Mapa UV jest jak spłaszczona (nieopakowana) skóra 2D siatki 3D (skorupy).
Jeśli wytniesz mapę i złożysz ją wzdłuż linii siatki, wynikiem będzie Twój model 3D.
Wartości zmiennoprzecinkowe (U, V) wynoszą od (0,0) do (1,1) Lewy górny róg mapy UV to (0,0) Prawy dolny róg to (1,1)
Każdy wierzchołek w siatce wielokątów (tris / quady) ma wartość (U, V), która mówi mechanizmowi renderującemu, której części mapy użyć.
W potoku GPU moduły cieniujące wierzchołki obliczają rzuty 2D każdego piksela w tych wielokątach 3D, a następnie dzielą je na kolory za pomocą mapy UV.
Nie można tego w pełni docenić bez takiego zdjęcia, które pokazuje wszystko:
Jak wspomnieli inni komentatorzy, komponent W jest używany przez renderer do bardziej efektownych efektów, takich jak mapowanie cieni, ale mapa UV jest podstawą do zrozumienia.
Zauważ, że moduł cieniujący wierzchołki musi wywołać moduł cieniujący fragmenty co najmniej raz dla każdego piksela, który należy pokolorować. Dlatego GPU są równoległymi procesorami z dziesiątkami rdzeni - potok cieniowania jest bardzo wymagający.
Należy również pamiętać, że procesory graficzne zintegrowane z procesorem są przeznaczone dla urządzeń mobilnych i są ograniczone do mniej niż jednej dziesiątej liczby rdzeni niż w przypadku zewnętrznych układów GPU podobnej generacji. Jest to spowodowane ograniczeniami mocy i chłodzenia urządzeń mobilnych. Wydaje się, że prawo Moore'a zwolniło, ale wydajność wciąż się poprawia (z dziwnym stopniem tu i tam…)
Mapowanie UV miliardy pikseli przy 240+ klatkach na sekundę może spowodować prawdziwy gorący bałagan!
źródło
Mapa UV odwzorowuje punkt (x, y, z) w siatce na punkt (u, v) na obrazie tekstury. Ponieważ obraz mapuje (u, v) na kolor, dwie mapy można połączyć w łańcuch, uzyskując mapę z przestrzeni siatki do przestrzeni kolorów.
źródło