Optimieren von Outdoor-scenen - Lieber Octree, VBO oder [?] ?
-
Hallo Profis,
Wie stellt man am Besten ein großes Terrain dar, wenn die Kamera sich bewegt?
Meine Denkwege:1) VBO:
wird schneller, da Engpass zur GPU wegfällt,
trotzdem immernoch viele Polygone...2) Octree:
Ist das nicht ein riesiger Speicheraufwand?
Ich meine, diese ganze Baumstruktur ist doch
schon Speicher und CPU fressend, oder?
Gibt es vllt. eine bessere Möglichkeit, oder kann
man das vernachlässigen?3) Frustrum Culling:
Hier habe ich doch auch wieder eine Große Datenmenge...
Checkt man besser etwas Größere Boxen, quasi wie Octrees?4) Distanz:
Klar, ab einer bestimmten Entfernung sollte man die
Details reduzieren, aber sollte man dafür z.B. 3 Detailstufen
haben? Oder muss es "echtes" LOD sein?
Wie sollte man das ganze mit großen Spitzen in Verbindung
bringen? Der große Berg am Horizont ist ja auch von weit weg
noch sichtbar... (Oder einfach Nebel immer nehmen?Zu den Fragen:
a) Welchen Algo. sollte man nehmen?
(Meine Map ist ca. 512x512 bis 2048x2048 groß)b) Wie stelle ich "Löcher" (so eine Art Höhle) dar?
_________ __________ Oberfläche xxxxxxxx/ /xxxxxxxxxx xxxxxxx/ /xxxxxxxxxxx xxxx-- /xxxxxxxxxxxx xx/ Loch /xxxxxxxxxxxxx xx\__________/xxxxxxxxxxxxxx
So einen Einschnitt kann man mit einer Heightmap
schlecht darstellen, Tunnel auch nicht, wie kann
man das angehen? (Oder wird das arg komplex?)c) Wie kann man eine solche Map mit Löchern) dann
speichern? bitmap ist dann ein wenig schlecht!?Ich hoffe dann mal, dass sich einer von euch ein bissl Zeit nimmt, und sich diesen Haufen Fragen durchliest, vllt. hat auch einer ne gute Idee :xmas2:
Grüße, die langeweile in Person
-
Du wirfst da irgendwie viele Begriffe durcheinander.
langeweile schrieb:
1) VBO:
wird schneller, da Engpass zur GPU wegfällt,
trotzdem immernoch viele Polygone...Ich benutze kein OpenGL und weiß deshalb nicht wirklich was das ist. Aber ich vermute mal einfach ein Speicherbereich für Vertices im VRAM (quasi das OGL Pendant zu DX Vertexbuffern). Da die ja vermutlich was bringen würd ich sie nutzen;)
langeweile schrieb:
2)Octree:
Ist das nicht ein riesiger Speicheraufwand?
Ich meine, diese ganze Baumstruktur ist doch
schon Speicher und CPU fressend, oder?
Gibt es vllt. eine bessere Möglichkeit, oder kann
man das vernachlässigen?Nö, der Speicherbedarf ist lächerlich. Im Grunde brauchst du für einen OT Node nur sizeof(Node*) + 6*sizeof(float) Bytes. Und CPU fressend sind sie auch nicht (das müsstest du dann schon sehr sehr blöd implementieren).
Die Frage ist eher ob es überhaupt Sinn macht und ich sehe bei einem Heightmap basierten Terrain keinen Sinn in einem Octtree, da die Komplexität in der Höhe ja gering ist.langeweile schrieb:
3) Frustrum Culling:
Hier habe ich doch auch wieder eine Große Datenmenge...
Checkt man besser etwas Größere Boxen, quasi wie Octrees?Wieso hast du da eine große Datenmenge? Frustum Culling ist nur ein allg. Begriff der für Techniken steht, bei denen man Polygone/Fragmente verwirft, die nicht im Viewfrustum liegen.
langeweile schrieb:
4) Distanz:
Klar, ab einer bestimmten Entfernung sollte man die
Details reduzieren, aber sollte man dafür z.B. 3 Detailstufen
haben? Oder muss es "echtes" LOD sein?
Wie sollte man das ganze mit großen Spitzen in Verbindung
bringen? Der große Berg am Horizont ist ja auch von weit weg
noch sichtbar... (Oder einfach Nebel immer nehmen?Da kann man keine allgemeine Antwort geben, das hängt stark von der Anwendung ab. Verschaff dir am besten einen Überblick über gängige LOD Techniken (z.B. vterrain.org)
langeweile schrieb:
a) Welchen Algo. sollte man nehmen?
(Meine Map ist ca. 512x512 bis 2048x2048 groß)Siehe vterrain.org. Bei Größen von 512^2 ist übrigens auch ohne Probleme Bruteforce möglich.
langeweile schrieb:
b) Wie stelle ich "Löcher" (so eine Art Höhle) dar?
_________ __________ Oberfläche xxxxxxxx/ /xxxxxxxxxx xxxxxxx/ /xxxxxxxxxxx xxxx-- /xxxxxxxxxxxx xx/ Loch /xxxxxxxxxxxxx xx\__________/xxxxxxxxxxxxxx
Da gibt es ein paar Möglichkeiten, z.B. mit mehreren Heightmaps oder mit Voxeln.
-
Okay...
Also VBO sind "Vertex Buffer Objects", afaik sind das halt Datenpäckchen für die Graka...
Nur wenn die jetzt einer Veränderung unterliegen (etwa LOD?) dann bringt mir das ja nicht viel, oder?Voxels muss ich mir mal ansehen... (edith: "ne, das ist nix...
Bleib ich leiber bei normalen HMs")Und wg. Frustrum Culling:
Ich kenne das jetzt eher so, dass man einen Baum aufbaut, in dem alle Subnodes drin sind, ala Octree, die dann testen sollte und nur die sichtbaren an die GPU sendet...Damit fallen VBOs i-wie unter den Tisch, oder?
-
VBO [...] wenn die jetzt einer Veränderung unterliegen (etwa LOD?) dann bringt mir das ja nicht viel, oder?
Bzgl LOD koennen im VBO zb fuer jeden Vertex zwei moegliche Positionen abgelegt werden, naemlich die der tatsaechlichen Detailstufe und die der naechst niedrigeren. Je nach Distanz zur Kamera interpoliert dann ein Vertexshader die entsprechende Zwischenstufe sodass Terrain-Teile unterschiedlichen Detailgrades nahtlos aneinander passen.
dass man einen Baum aufbaut, in dem alle Subnodes drin sind und nur die sichtbaren an die GPU sendet...
Wenn diese Subnodes (die eine geeignete Mindestgroesse haben sollten) bereits in Form von VBOs auf der Grafikkarte vorliegen, musst Du nur noch sagen *dass* sie gezeichnet werden sollen.