Google mnie zawiodło, nie mogłem znaleźć żadnych informacji. Więc może GameDev może :).
- Co to są tekstury 3D?
- Kiedy są używane?
- Koszty wydajności?
- Jak są one przechowywane?
Mam wiele niejasnych pomysłów, ale nie ma „ostatecznej” definicji.
Doceniane są wszelkie odniesienia do przykładów lub samouczków, szczególnie w renderowaniu układów cząstek za pomocą tekstur 3D.
Odpowiedzi:
Tekstura 3D działa jak zwykła tekstura. Ale to jest naprawdę 3D. Tekstury 2D mają współrzędne UV, 3D mają UVW (trzeba było je odpowiednio zastosować). Coord tekstur to kostka jednostkowa (0–1, 0–1, 0–1).
Możliwe użycie :
Wydajność :
Taki sam jak zwykła tekstura - super szybki (najszybszy dostęp do pamięci w GPU). Buforowane dla wątków i zoptymalizowane pod kątem sytuacji, gdy bliskie wątki (shadery pikseli) szukają bliskich wartości.
Może być odczytany jako punktowy lub użyty próbkowanie liniowe (natywna interpolacja trójliniowa. Równanie interpolacji dwuliniowej w teksturze 2D).
Są one przechowywane w pamięci jak tablica tekstur 2D.
Mapowanie tekstury 3D:
źródło
Tekstury 3D lub „tekstury objętości” to szereg normalnych tekstur ułożonych w plastry, jak talia kart. Są one używane w renderowaniu wolumetrycznym, które często pobiera dane ze świata rzeczywistego, takie jak skany CT, a następnie manipuluje nimi. W grach i grafice jest to czasem efekt wolumetryczny, taki jak dym, w którym zamieniasz elastyczność systemu cząstek na stały koszt i łatwe (i łatwe do zrównoleglenia) obliczenie tekstury objętości. Znalezienie najbliższych sąsiadów jest bardzo łatwe w fakturze objętości, ale może to być problem z bardziej tradycyjnym układem cząstek złożonym z luźnych punktów.
Ponadto niektóre złożone obiekty korzystają z tekstur objętości, takich jak trawa:
Dym Nvidii w pudełku jest doskonałym przykładem:
http://www.youtube.com/watch?v=9AS4xV-CK14
Ponadto renderowanie rozpraszania światła jest łatwiejsze, gdy masz wolumin do renderowania
źródło
Poza istniejącymi odpowiedziami podoba mi się również sposób tworzenia tekstur 3D również proceduralnie (w rzeczywistości ma to większy sens niż tekstury proceduralne 2D), takie jak szum i fraktale, które zapewnią dobre i nieodkształcone szczegóły tekstury na dowolnych powierzchniach kątowych bez konieczności aby wybrać model projekcji (UV, planarny, cylindryczny, sferyczny i tak dalej).
Zamiast próbkować warstwę bitmapy w przestrzeni 3D, otrzymujesz osobną wartość dla każdego punktu w przestrzeni 3D za pomocą podstawowego algorytmu - co w zasadzie zapewnia nieskończoną rozdzielczość tekstur i nie ma problemów z rozciągniętymi teksturami pod kątem wielokątów. Są to dla mnie „tekstury” 3D, a raczej cieniowanie powierzchni ^ ^
Jestem dość zmęczony całą tabaką tekstur bitmapowych podczas tworzenia gry, kiedy chcę wyczyścić statek kosmiczny, chcę zastosować kilka warstw wzorów hałasu i nie muszę malować bitmapy o ograniczonej rozdzielczości. Stary buff 3D może śnić, prawda?;)
W tej chwili wstępne upieczenie tych słodkich oldschoolowych powierzchni filmów 3D w kolorowe, normalne i błyszczące bitmapy UV są jedyną zabawą, jaką mam, i jest denerwująco ograniczone. Scena demonstracyjna (jak zawsze) zazwyczaj (wstępnie) generuje tekstury proceduralnie dla 3D w czasie rzeczywistym, ale trudno jest znaleźć dobre narzędzia do obsługi tego przepływu pracy od projektu do wykonania. Wydaje się, że większość podejść proceduralnych do tworzenia gier dotyczy generowania siatki. Zastanawiasz się, ile rurociągu cieniującego za pomocą mapy głębokości / odroczonego renderowania poradziłby sobie z oldschoolowymi algami szumów 3D?
źródło
Wzory tekstur 3D są stosowane do wokseli ciała objętościowego w bardzo podobny sposób, jak wzory tekstur 2D są stosowane do pikseli wielokąta 2D. Oto przykład tekstury objętościowej 3D w JavaScript (wymaga WebGL):
http://kirox.de/test/Surface.html
naciśnij [v], obróć korpus i zmień gradient wygenerowanej tekstury za pomocą kółka myszy
źródło