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.
Antworten:
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 :
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:
quelle
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
quelle
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.
quelle
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
quelle