In 3D-Echzeit-Anwendungen wie Unity wird aufgrund der Computer-Grafik und der Berechnung der digitalen Inhalte alles mit Hilfe von Dreiecken (Triangles) berechnet. In diesem Beitrag erhältst du alle Infos über Polygone, Triangles, Vertices und der optimalen Verwendung in Unity.
Polygons, Triangles und Pixel
Damit 3D-Objekte auf dem Bildschirm in Echtzeit dargestellt werden können, erscheinen auf dem Monitor der AnwenderIn Bilder in Form von einzelnen Pixeln. Die Anzahl der Pixel hängt von der Auflösung ab und die primäre Arbeit übernimmt die Grafikkarte des Endgeräts (PC, Smartphone, Tablet, usw.). Alternativ kann die auch ausgelagert werden wie bei Streaming (xcloud, shadow, …). Der Prozess der Berechnung dieser Pixel wird Rendering genannt.
Ein von dir erstelltes oder platziertes 3D-Objekt definierst du selbst aber nicht auf Basis von Pixeln, sondern von Formen (Polygonen). Siehst du dir diese Formen genauer an so können sie in kleine Dreiecke unterteilt werden. Diese Dreiecke werden auch Triangles genannt. Für die spätere Berechnung innerhalb einer 3D-Echtzeit-Engine werden für jedes Triangle drei Punkte verwendet und miteinander verbunden.
Vertices → Edges → Triangles → Quad → Polygons
Die Verbindung von drei Punkten bedeutet immer, dass die Oberfläche flach ist. Bei einer Verbindung von vier Punkten, kann das Objekt schon 3 dimensional sein wie z.B. bei einer Pyramide.
Grafikleistung zur Berechnung
Ausschlaggebend für die Darstellung der Objekte in der virtuellen Welt ist die Leistung der Grafikkarte. Denn durch mathematische Berechnungen wird Bild für Bild der Ausschnitt der Kamera berechnet.
Über die Jahre sind Grafikspeicher immer besser / schneller geworden und können daher auch viel mehr Berechnungen durchführen. Die Anzahl der Berechnungen pro Sekunde wird in FLOPS (Floating Point Operations Per Second) ausgedrückt. Eine Nvidia RTX 3070 Grafikkarte hat beispielsweise eine Rechenleistung von 20TFLOPS.
Beschränkungen bei Polygonen
Ein 3D-Modell sollte nicht komplett als ein Polygon exportiert werden. Das finale Objekt unterteilt sich in mehrere Teile (Parts). Stell dir vor du hast ein Fahrzeug, dann wird die logische Bauweise als Topologie verwendet.
Übersicht der Hierarchie bei einem Fahrzeug
Die Vordertür (Door_Front_LH) ist in verschiedene Teile aufgesplittet und die Scheibe ist ein Polygon-Modell bestehend aus vielen kleinen Triangles.
Fahrzeugansicht im Wireframe Modus
Beachte aber beim Import deiner eigenen Dateien, die Unity Engine ist mittels Mesh Index Buffer auf eine maximale Anzahl von Vertices wie folgt limitiert:
- 16 Bit | 65.535 Vertices pro Mesh
- 32 Bit | 4.000.000.000 Vertices pro Mesh
Standardmäßig legt Unity den Mesh Index Buffer auf 16 Bit um weniger Speicher und Bandbreite zu belasten. Du könntest aber manuell per Skript auch auf 32 Bit umstellen. Ich empfehle dir aber nur in äußersten Notfällen diese Änderung auf 32 Bit vorzunehmen, denn du kannst deine komplexen 3D-Objekte auch in kleinere Bereiche unterteilen und dich somit an das Limit von 65.535 Vertices pro Mesh halten.
Maximale Anzahl in der Anwendung
Neben der Beschränkung eines Polygon-Teils, kann es auch noch zu einer weiteren Beschränkung kommen. Der maximalen Anzahl an Vertices in deiner Anwendung.
Dabei ist immer der Bildbereich der Kamera essentiell. Bewegt sich die Anwenderin und schwenkt somit die virtuelle Kamera (Bildausschnitt), dann müssen neue Triangles geladen werden. Die Position (Koordinaten) dieser Triangles stehen aber schon vorher fest.
Liest du in den Empfehlungen für Endgeräte eine maximale Anzahl an Vertices, dann ist dies immer für jeweiligen Bildausschnitt gemeint und nicht für deine gesamte Anwendung. Es gilt als Richtwert zu sehen, denn für die Optimierung einer Anwendung spielen noch viele weitere Faktoren eine Rolle.
Wird als Spezifikation 100.000 Triangles angegeben, dann entspricht dies nicht automatisch einem Vertice Count von 300.000, denn die Dreiecke können sich die Positionsdaten einzelne Punkte auch Teilen.
Anzahl der Triangles in Unity
Wenn du die Vertice Anzahl eines Meshes genauer herausfinden möchtest, dann kannst du dies in Unity über das Project-Window tun. Navigiere zu deinem importierten 3D-Objekt und selektiere es. Klappe das Objekt über den Pfeil auf und selektiere ein Mesh in der Liste.
Fahrertür im Detail mit Vertices und Triangles
Sobald du das Mesh selektiert hast findest du auf der rechten Seite im Inspektor die Information dazu. Darunter auch die Anzahl der Triangles für dieses Objekt.
Damit du gesamte Menge der Triangles und Vertices eines Objekt herausfinden kannst, empfehle ich dir die Verwendung des kostenlosen Plugins „PolyCount“ aus dem Unity Asset Store.
PolyCount im Unity Asset Store
Dieses Plugin errechnet automatisch auf Basis aller Meshes in einem Objekt die Werte und zeigt sie dir auf einem Fenster in Unity an. Das funktioniert im Gesamten, aber auch für selektiere Objekte in deiner Scene-View.
Nach dem Import von PolyCount wählst du im Text-Menü: Tools > PolyCount aus. Selektiere in deiner Hierarchie ein beliebiges Objekt und sowohl in der Scene View als auch im PolyCount-Window werden dir jetzt die Vertices und Triangles angezeigt.
Verwendung von Polycount