Esistono diversi fattori che contribuiscono al modo in cui la geometria viene salvata ed elaborata in diversi supporti (programmi, formati di file, API). Ho implementato diversi programmi di analisi della geometria commerciale, quindi ho una certa esperienza con esso.
Innanzitutto sono sicuro che questo non ha nulla a che fare con Unity che semplifica qualcosa. Ma nel caso ci fossero diversi algoritmi di decimazione che possono essere implementati, ma sono sicuro che non è così, dal momento che un motore di gioco non dovrebbe cambiare la forma (proprietà geometriche di una mesh) ma di solito può modificare la sua connettività per abbinare la sua struttura ottimale.
Alcuni di questi fattori sono:
Cosa rende unico un vertice?
Questo può variare notevolmente a seconda del modo in cui il programma, l'API o il formato file gestiscono un vertice. Un vertice può essere unico se ha una posizione unica, ma in altri casi è unico se ha un attributo univoco. Ad esempio, se due vertici condividono la stessa posizione, ma hanno normali diverse, dovrebbero essere "duplicati" nel caso di OpenGL, questo è particolarmente evidente nel caso del cubo che hai citato.
Bordi duri vs lisci.
Le normali possono dettare se un bordo è considerato duro o liscio, se un vertice contribuisce al bordo duro, allora deve essere duplicato in modo che le API di rendering correnti possano capire come renderizzare (sfumare) correttamente questa faccia.
Indici
Molti formati di file consentono a un vertice facciale di avere diversi indici per la posizione del vertice / texCoords / normali, questo non è il caso delle API di rendering correnti. Un ottimo esempio di questo è il file Obj, questo costringerà Unity a ricostruire gli indici e spesso duplicherà molti attributi per abbinare gli indici dei vertici.
Connettività
Molti vertici che sono effettivamente connessi e unici sono salvati più volte, questo ha a che fare con il modo in cui il writer di file originale ha elaborato e salvato la mesh. Unity ridurrà il numero di vertici duplicati (ricorda se ha attributi diversi, quindi non è univoco) in modo da renderlo più efficiente per l'archiviazione e l'elaborazione senza sacrificare la qualità.
Questo ha anche a che fare con il numero di lati poligonali consentiti dal file originale, ad esempio Obj consente poligoni lato N, cosa che qualsiasi motore di gioco sano non vuole, quindi finisce per triangolare la mesh e ricalcolare molti dei suoi attributi che spesso cambia il numero di vertici.