Baumstrukturen mit verschiedenen Traversierung
Verfasst: 28.02.2010, 17:17
Hi,
ich überlege gerade wie die optimalen Datenstrukturen für den "Weltenmotor" aussehen. Der Unterschied zu normalen Scenegraphen ist hauptsächlich, dass ich eine sehr große Anzahl hierarchischer Objekte mit jeweils eher kleiner Datenmenge (keine gespeicherte Geometrie) habe.
Da jedes Objekt das gerendert wird nur sehr wenig Geometrie liefert, muss ich dramatisch zusammenfassen. Das widerspricht aber dem rekursiven Traversieren, dass durch den Stack enorm viel Spiecher spart (z.b. Transformationsstack).
Zwei nötige Traversierungen:
* Rekursiv durch den Baum, nützlich für
** um die sichtbaren Objekte zu ermitteln
** die Objekte zu erzeugen
** die Transformationen zu berechnen
*Seitlich durch eine oder wenige Baumebenen
** um alle Grashalme eines Rasens zusammenzufassen
** um nachbarschaftliche Berechnungen zu machen, z.b. weiche Normalen fürs Shading
ich weiss nicht, wie ich das unter einen Hut kriege.
Wenn ich die Rekursion abschaffe und den Baum schichtenweise aufbaue, müssen alle berechneten Objekteingenschaften, und auch die Transformationsmatrizen gespeichert werden, da komme ich auf ein 1GB Daten bei moderatem Deteilgrad, ein Großteil davon wird pro Frame aktualisiert. Das klappt so nicht.
Ich kann aber auch nicht einfach rekursiv rendern, weil es dafür zu viele kleine Objekte sind, die den CPU-GPU Engpass verstopfen.
freue mich über Ideen..
ich überlege gerade wie die optimalen Datenstrukturen für den "Weltenmotor" aussehen. Der Unterschied zu normalen Scenegraphen ist hauptsächlich, dass ich eine sehr große Anzahl hierarchischer Objekte mit jeweils eher kleiner Datenmenge (keine gespeicherte Geometrie) habe.
Da jedes Objekt das gerendert wird nur sehr wenig Geometrie liefert, muss ich dramatisch zusammenfassen. Das widerspricht aber dem rekursiven Traversieren, dass durch den Stack enorm viel Spiecher spart (z.b. Transformationsstack).
Zwei nötige Traversierungen:
* Rekursiv durch den Baum, nützlich für
** um die sichtbaren Objekte zu ermitteln
** die Objekte zu erzeugen
** die Transformationen zu berechnen
*Seitlich durch eine oder wenige Baumebenen
** um alle Grashalme eines Rasens zusammenzufassen
** um nachbarschaftliche Berechnungen zu machen, z.b. weiche Normalen fürs Shading
ich weiss nicht, wie ich das unter einen Hut kriege.
Wenn ich die Rekursion abschaffe und den Baum schichtenweise aufbaue, müssen alle berechneten Objekteingenschaften, und auch die Transformationsmatrizen gespeichert werden, da komme ich auf ein 1GB Daten bei moderatem Deteilgrad, ein Großteil davon wird pro Frame aktualisiert. Das klappt so nicht.
Ich kann aber auch nicht einfach rekursiv rendern, weil es dafür zu viele kleine Objekte sind, die den CPU-GPU Engpass verstopfen.
freue mich über Ideen..