Es gibt mehrere Faktoren, die dazu beitragen, wie die Geometrie in verschiedenen Medien (Programme, Dateiformate, APIs) gespeichert und verarbeitet wird. Ich habe mehrere kommerzielle Geometrieanalyseprogramme implementiert, daher habe ich einige Erfahrungen damit.
Zunächst bin ich sicher, dass dies nichts damit zu tun hat, dass Unity irgendetwas vereinfacht. Falls dies der Fall sein sollte, können mehrere Dezimierungsalgorithmen implementiert werden, aber ich bin sicher, dass dies nicht der Fall ist, da eine Spiel-Engine die Form (geometrische Eigenschaften eines Netzes) nicht ändern soll, sondern normalerweise seine Konnektivität ändern kann zu seiner optimalen Struktur passen.
Einige dieser Faktoren sind:
Was macht einen Scheitelpunkt einzigartig?
Dies kann sehr unterschiedlich sein, je nachdem, wie das Programm, die API oder das Dateiformat mit einem Scheitelpunkt umgehen. Ein Scheitelpunkt kann eindeutig sein, wenn er eine eindeutige Position hat, in anderen Fällen ist er eindeutig, wenn er ein eindeutiges Attribut hat. Wenn beispielsweise zwei Scheitelpunkte dieselbe Position haben, aber unterschiedliche Normalen haben, sollten sie im Fall von OpenGL "dupliziert" werden. Dies ist besonders im Fall des von Ihnen erwähnten Würfels offensichtlich.
Harte vs glatte Kanten.
Normalen können bestimmen, ob eine Kante als hart oder glatt angesehen wird. Wenn ein Scheitelpunkt zur harten Kante beiträgt, muss er dupliziert werden, damit die aktuellen Rendering-APIs verstehen, wie diese Fläche korrekt gerendert (schattiert) wird.
Indizes
In vielen Dateiformaten kann ein Gesichtsscheitelpunkt mehrere Indizes für die Scheitelpunktposition / texCoords / normals haben. Dies ist bei aktuellen Rendering-APIs nicht der Fall. Ein gutes Beispiel hierfür ist die Obj-Datei. Dadurch wird Unity gezwungen, die Indizes neu zu erstellen und häufig viele Attribute zu duplizieren, um sie an die Scheitelpunktindizes anzupassen.
Konnektivität
Viele der tatsächlich verbundenen und eindeutigen Scheitelpunkte werden mehrmals gespeichert. Dies hängt davon ab, wie der ursprüngliche Dateischreiber das Netz verarbeitet und gespeichert hat. Unity reduziert die Anzahl doppelter Scheitelpunkte (denken Sie daran, wenn es ein anderes Attribut hat als nicht eindeutig), um es für die Speicherung und Verarbeitung effizienter zu gestalten, ohne die Qualität zu beeinträchtigen.
Dies hängt auch damit zusammen, wie viele Polygonseiten die Originaldatei zulässt. Obj beispielsweise erlaubt N-seitige Polygone, was jede vernünftige Spiel-Engine nicht möchte. Daher wird das Netz trianguliert und viele seiner Attribute werden häufig neu berechnet Ändern Sie die Anzahl der Scheitelpunkte.