Co to są tekstury 3D?


31

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.


Nie jestem pewien, o co pytasz. Czy masz na myśli mapowanie normalne i wypukłe w celu symulacji zmian powierzchni na „płaskich” obszarach?
coderanger

2
Myślę, że to, co miał na myśli, bardziej przypomina GL_TEXTURE_3D itd.
Luker

1
Zobacz także to pytanie: Jak działa mapowanie tekstur UVW? (i jego odpowiedzi).
George Duckett,

Odpowiedzi:


34

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 :

  • efekty wolumetryczne w grach (ogień, dym, promienie świetlne, realistyczna mgła)
  • buforowanie światła dla globalnego oświetlenia w czasie rzeczywistym ( na przykład CryEngine )
  • naukowe (skany MRI, CT są zapisywane w tomach)

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:
wprowadź opis zdjęcia tutaj


14

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


7

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?

... zamiast próbować dowiedzieć się, jak parametrycznie mapować obraz tekstury na powierzchnię kształtu, wolumetryczny charakter tekstur opartych na szumach pozwala po prostu ocenić je w miejscach (x, y, z) w pikselu moduł cieniujący. W ten sposób skutecznie rzeźbisz teksturę z litego materiału, co często jest znacznie prostsze niż próba wypracowania rozsądnego niezakłóconego mapowania parametrycznego.

Tego rodzaju tekstury proceduralne oparte na hałasie były od dawna podstawą filmów fabularnych, w których shadery nie wymagają działania w czasie rzeczywistym ... wszystkie filmy z efektami specjalnymi intensywnie korzystają z proceduralnych shaderów opartych na hałasie ... jest wysoce zależny na temat szerokiego użycia funkcji szumu w modułach cieniujących pikseli napisanych w językach takich jak RenderMan firmy Pixar. Dzięki dobrej implementacji funkcji hałasu dostępnej w czasie rzeczywistym w procesorach graficznych czekam na niektóre z ekscytujących pomysłów wizualnych z filmów fabularnych włączonych do nowej generacji interaktywnej rozrywki na pulpicie i konsoli. http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html


Bardzo ciekawa lektura! Mam problem z wyobrażeniem sobie, co masz na myśli w drugim akapicie.
spowolniłaviar

Może mógłbym zrobić schemat. Chodzi mi o to, że zamiast próbkowania bitmapy o kolorze (lub czymkolwiek chcesz) decyduje algorytm szumu. W ten sposób nie jest wymagana interpolacja między pikselami bitmapowymi (ponieważ próbowanie nie będzie miało idealnej pozycji piksela 1x1), a rozdzielczość staje się teoretycznie nieskończona. To trochę tak, jak obliczanie odsetek dla określonej stopy procentowej zamiast korzystania ze wstępnie obliczonej tabeli odnośników, w której są pewne kroki / przedziały (= rozdzielczość bitmapy).
Oskar Duveborn,

Po przeczytaniu całości cytowanego artykułu. Lepiej rozumiem, ale myślę, że ref. obrazy przyniosłyby korzyści obu stronom: niepewnym i tl; dr. :)
spowolniłaviar

0

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.