Was sind 3D-Texturen?

31

Google hat mich gescheitert, ich konnte nichts aussagekräftiges finden. Also vielleicht kann GameDev :).

  • Was sind 3D-Texturen?
  • Wann werden sie verwendet?
  • Leistungskosten?
  • Wie werden sie gelagert?

Ich habe viele vage Ideen, aber keine "endgültige" Definition.

Verweise auf Beispiele oder Tutorials sind erwünscht, insbesondere beim Rendern von Partikelsystemen über 3D-Texturen.

gebremster Kaviar
quelle
Ich bin nicht sicher, was Sie fragen, ist eine Sache. Meinen Sie Normal- und Bump-Mapping, um Oberflächenvariationen auf "flachen" Flächen zu simulieren?
Coderanger
2
Ich denke, was er meint, ist eher wie GL_TEXTURE_3D, etc.
Luker
1
Siehe auch diese Frage: Wie funktioniert das UVW-Textur-Mapping? (und seine Antworten).
George Duckett

Antworten:

34

3D-Textur funktioniert wie normale Textur. Aber es ist wirklich 3D. 2D-Texturen haben UV-Koordinaten, 3D-Texturen haben UVW (man musste sie wahrscheinlich verwenden). Texturkoordinaten sind Einheitswürfel (0 - 1, 0 - 1, 0 - 1).

Mögliche Verwendung :

  • Volumeneffekte in Spielen (Feuer, Rauch, Lichtstrahlen, realistischer Nebel)
  • Caching-Licht für globale Echtzeitbeleuchtung ( z. B. CryEngine )
  • wissenschaftlich (MRT, CT werden in Volumina gespeichert)

Leistung :
Wie normale Textur - superschnell (schnellster Speicherzugriff in GPU). Für Threads zwischengespeichert und für die Situation optimiert, in der Near-Threads (Pixel-Shader) nach Near-Werten suchen.

Kann als Punktabtastung gelesen oder als lineare Abtastung verwendet werden (native trilineare Interpolation. Gl. Bi-lineare Interpolation in 2D-Textur).

Sie werden wie ein Array von 2D-Texturen im Speicher abgelegt.

Mipmapping auf 3D Textur:
Bildbeschreibung hier eingeben

Notabene
quelle
14

3D-Texturen oder 'Volumen-Texturen' sind eine Reihe von normalen Texturen, die wie ein Kartenspiel in Scheiben angeordnet sind. Diese werden beim volumetrischen Rendern verwendet, bei dem häufig reale Daten wie CT-Scans erfasst und anschließend bearbeitet werden. In Spielen und Grafiken sind es manchmal volumetrische Effekte wie Rauch, bei denen Sie die Flexibilität eines Partikelsystems gegen die Fixkosten und die einfache (und leicht parallelisierbare) Berechnung einer Volumentextur eintauschen. In einer Volumentextur ist es sehr einfach, die nächsten Nachbarn zu finden, aber dies kann ein Problem sein, da ein herkömmlicheres Partikelsystem aus losen Punkten besteht.

Einige komplexe Objekte profitieren auch von der Verwendung von Volumentexturen, z. B. Gras:

Nvidias Rauch in einer Kiste ist ein gutes Beispiel:

http://www.youtube.com/watch?v=9AS4xV-CK14

Außerdem ist das Rendern der Lichtstreuung einfacher, wenn Sie ein Volumen zum Rendern haben

Luther
quelle
7

Abgesehen von den vorhandenen Antworten gefällt mir, wie 3D-Texturen auch prozedural erstellt werden können (eigentlich ist dies sinnvoller als eine 2D-prozedurale Textur), wie Rauschen und Fraktale, die gute und nicht verformte Texturdetails für beliebige Winkeloberflächen liefern, ohne dass dies erforderlich ist um ein Projektionsmodell auszuwählen (UV, planar, zylindrisch, sphärisch usw.).

Anstatt eine Bitmap-Ebene im 3D-Raum abzutasten, erhalten Sie mit einem einfachen Algorithmus einen eindeutigen Wert für jeden Punkt im 3D-Raum. Dadurch erhalten Sie im Grunde eine unendliche Texturauflösung und keine Probleme mit gestreckten Texturen auf winkligen Polygonen. Das sind für mich 3D "Texturen" bzw. Surface Shading ^^

Eigentlich bin ich der Bitmap-Textur-Schnupftabak in der Spieleentwicklung ziemlich müde. Wenn ich ein Raumschiff verschmutzen möchte, möchte ich ein paar Ebenen von Rauschformeln anwenden und muss keine Bitmap mit begrenzter Auflösung malen. Ein alter 3D-Fan kann träumen, oder?

Momentan macht es mir nur Spaß, diese süßen 3D-Filmoberflächenlösungen von oldschool in Farbe, normale und spiegelnde UV-Bitmaps vorzubacken. Die Demoszene tendiert (wie immer) dazu, Texturen prozedural für Echtzeit-3D (vor) zu generieren, aber es ist schwierig, gute Werkzeuge zu finden, um diesen Workflow vom Entwurf bis zur Laufzeit zu unterstützen. Die meisten verfahrenstechnischen Ansätze von Spielentwicklern scheinen sich mit der Netzgenerierung zu befassen. Ich frage mich, wie viel die Shader-Pipeline mit Hilfe einer Tiefenkarte / eines verzögerten Renderings mit Oldschool-3D-Rauschalgen umgehen kann.

... anstatt herauszufinden, wie Sie ein Texturbild parametrisch auf die Oberfläche Ihrer Form abbilden können, können Sie die volumetrischen Eigenschaften von rauschbasierten Texturen einfach an den (x, y, z) Stellen in Ihrem Pixel auswerten Shader. Auf diese Weise schnitzen Sie Ihre Textur effektiv aus einem festen Material, was häufig viel einfacher ist, als eine vernünftige unverzerrte parametrische Zuordnung zu versuchen.

Diese Art von volumetrischen, auf Rauschen basierenden prozeduralen Texturen war lange Zeit die Hauptstütze von Spielfilmen, bei denen Shader keine Echtzeitperformance erfordern. Alle Spezialeffektfilme verwenden heutzutage in hohem Maße rauschbasierte prozedurale Shader über die umfassende Verwendung der Rauschfunktion in Pixel-Shadern, die in Sprachen wie Pixars RenderMan geschrieben wurden. Ich freue mich auf einige der aufregenden visuellen Ideen von Spielfilmen, die in die nächste Generation interaktiver Unterhaltung auf dem Desktop und auf der Konsole integriert sind, da die Rauschfunktion, die für die Echtzeitnutzung in GPUs verfügbar ist, gut implementiert ist. http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html

Oskar Duveborn
quelle
Sehr interessant zu lesen! Ich habe Probleme zu visualisieren, was Sie in Ihrem zweiten Absatz bedeuten.
verzögerte
Vielleicht könnte ich ein Diagramm machen. Was ich meine ist, dass anstatt einer Bitmap die Farbe (oder was auch immer Sie suchen) einfach durch einen Rauschalgorithmus bestimmt wird. Auf diese Weise wird keine Interpolation zwischen Bitmap-Pixeln benötigt (da Sie nicht an einer perfekten Position von 1x1 Pixel abtasten müssen) und die Auflösung wird theoretisch unendlich. Es ist ein bisschen so, als würde man die Zinsen für einen bestimmten Zinssatz berechnen, anstatt eine vorberechnete Nachschlagetabelle zu verwenden, in der bestimmte Schritte / Intervalle (= Bitmapauflösung) vorhanden sind.
Oskar Duveborn
Nach dem Lesen der gesamten Artikel verwiesen. Ich habe ein viel besseres Verständnis, aber ich denke ref. bilder würden beiden parteien zugute kommen: den unsicheren und den tl; dr. :)
deceleratedcaviar
0

3D-Texturmuster werden ähnlich wie 2D-Texturmuster auf die Pixel eines 2D-Polygons auf Voxel eines Volumenkörpers angewendet. Hier ist ein Beispiel für eine volumetrische 3D-Textur in JavaScript (erfordert WebGL):

http://kirox.de/test/Surface.html

drücke [v], drehe den Körper und ändere den Farbverlauf der erzeugten Textur mit dem Mausrad

Oyophant
quelle