Angenommen, ich habe einen Octree und auf einer bestimmten Ebene speichere ich VBOs in diesem Octree. Ich kenne die Abmessungen der Knoten, denen das vbo gehört, damit ich grundlegende Kegelstumpf-Keulungen durchführen kann. Das funktioniert gut, weil alles außerhalb des Bildschirms nie gerendert wird.
Meine Welt ist jedoch ziemlich groß und ich zeichne derzeit auch Dinge hinter bereits gezeichneten Oktrees. Was würde ich verwenden, um keine Knoten zu zeichnen, die von anderen Knoten verdeckt werden, und wie würde ich das tun?
Ich habe einige Erwähnungen von Okklusions-Keulung in der OpenGL-Superbible gesehen, aber ich sehe nicht, wie ich das nutzen kann, wenn ich keine klare Unterscheidung zwischen Okkludern und Okkludenten habe.
Antworten:
Eines der Merkmale des Octree ist, dass Sie Ihre Octree-Knoten in der Reihenfolge von vorne nach hinten rendern können. Wenn Sie dies tun, wird die Leistung erheblich verbessert, da die EarlyZ-Implementierung der Grafikhardware effektiver ist (Sie führen weniger Shader aus, erledigen weniger Rasterarbeiten usw.).
Der Vorteil der Verwendung von Okklusionsabfragen zum Abfragen der Sichtbarkeit von Octree-Knoten besteht darin, dass Sie nicht gerenderte hochkomplexe geometrische Objekte rendern können. Die (undurchsichtigen) Objekte in Ihrer Szene sind Ihre Okkluder, und Ihre Octree-Knoten (und implizit deren Inhalt) sind Okkludees. Wie Samaursa sagte, ist es wirklich schwierig, dies richtig zu machen. Lesen Sie daher bitte dieses Papier, bevor Sie es versuchen (Stände beeinträchtigen die Leistung, wenn sie nicht sorgfältig behandelt werden). Stellen Sie außerdem sicher, dass die geometrische Komplexität tatsächlich Ihr Leistungsbegrenzer ist, da Sie sonst wahrscheinlich Ihre Zeit verschwenden werden.
quelle
OpenGL unterstützt nativ keine Okklusionsabfragen, Sie können jedoch Erweiterungen wie ARB_occlusion_query verwenden . Der Link hat ein Projekt und ein schönes
PDF
, das erklärt, wie man es benutzt. Seien Sie jedoch vorsichtig, manchmal sind die Okklusionsabfragen teurer als das einfache Zeichnen der Geometrie. Dies gilt insbesondere dann, wenn Ihre Geometrie nicht sehr komplex ist.Wenn Sie mehr Informationen zu Ihrer Szene bereitstellen (Screenshot), könnte eine bessere Lösung bereitgestellt werden.
quelle
Ich habe gerade meine VBOS nach Entfernung zur Kamera bestellt. Dies scheint am meisten zu helfen. Wenn ich Okklusionsabfragen nicht verstehe, verlangsamt dies meinen Code und liefert seltsame Ergebnisse, anstatt tatsächlich zu helfen. Wenn ich also unterwegs keine weiteren Leistungsprobleme sehe, bleibe ich bei dem, was ich habe.
quelle