Ist es besser, alle Scheitelpunktdaten in einer Struktur wie dieser zu haben:
class MyVertex
{
int x,y,z;
int u,v;
int normalx, normaly, normalz;
}
Oder um jede Komponente (Position, Normal, Texturkoordinaten) in separaten Arrays / Puffern zu haben? Für mich schien es immer logisch, die Daten in einer Struktur zusammenzufassen, da sie für jede Instanz eines gemeinsamen Scheitelpunkts immer gleich sind, und dies scheint für Dinge wie Zeichenmodelle zu gelten (z. B. sollte der Normalwert ein Durchschnitt sein benachbarter Normalen für eine gleichmäßige Beleuchtung). Ein Fall, in dem dies nicht zu funktionieren scheint, sind andere Arten von Netzen, z. B. ein Würfel, bei dem die Texturkoordinaten für jeden gleich sind, dies jedoch dazu führt, dass sie unterschiedlich sind, wenn die Scheitelpunkte gemeinsam genutzt werden.
Werden sie normalerweise getrennt gehalten? Werden sie dadurch nicht weniger platzsparend, wenn für jeden Scheitelpunkt eine Instanz von Texturkoordinaten und Normalen vorhanden sein muss (sie werden nicht indiziert)? Kann OpenGL diese Mischung aus indizierten (für den Standort) und nicht indizierten Puffern in demselben VBO überhaupt verarbeiten?
quelle
Angesichts der Bedeutung der Referenzlokalität für den GPU-Cache besteht allgemeiner Konsens darüber, dass Sie immer standardmäßig Vertex-Attribute verschachteln sollten, es sei denn, die Umstände hindern Sie daran ... wie die von Ihnen erwähnten (halb-) gemeinsamen Umstände. Es gibt viele Quellen, die dies auf SO zitieren.
Nicht verschachtelt wird wichtig, wenn Ihr Datensatz sehr groß ist und Sie wirklich keinen Speicherplatz / Systembusbandbreite verschwenden möchten, indem Sie verschachtelte Attribute angeben, die optional sind oder auf andere Weise aus einem kleineren Datensatz abgeleitet werden könnten. Wenn Sie beispielsweise in einem 10M-Vertex-Dataset für jede Gruppe von 4 Vertices darin denselben Wert verwenden könnten, möchten Sie dies wahrscheinlich tun. Bei kleineren Datensätzen würde die einfache Verschachtelung und Wiederholung Ihrer Daten die Notwendigkeit einer Reduzierung außer Kraft setzen.
Ein weiterer Grund, nicht zu verschachteln, besteht darin, dass Sie Ihre Daten modular gestalten möchten, z. B. wenn die Geometrie (dh die Positionen) gleich bleiben, sich jedoch Farbe, normale Karten usw. ändern (denken Sie an die Geometrie menschlicher Charaktere, aber strukturiert wie beispielsweise ein kürzlich gedrehter Borg, in den Implantate eingesetzt werden) unter der Haut gewachsen sind).
quelle