dynamische Objektverwaltung
-
Hi,
also ich hab mir folgendes überlegt, um die Performance eines Spiels
etwas zu verbessern aber weiß nicht, inwiefern es realisierbar bzw.
vorteilshaft ist:
Man hat ein level, das aus einer liste verschiedenster Meshes besteht.
Diese Liste wird von DirectX gerendert und auf den Bildschirm gebracht.
Da die Kamera eh in der meisten Zeit nur einen Bruchteil der vorhandenen
Meshes im Blickfeld hat bzw. von denen auch noch einige von davor
platzierten Objekten verdeckt sind, ist es nicht nötig, DirectX diese
Objekte berechnen zu lassen. Ich vermute mal dass DX einen Teil davon
bereits selbstständig erledigt, aber soweit ich es herausgefunden habe,
trifft das nur auf Objekte zu, die nicht im Blickfeld liegen. Aber was
ist mit verdeckten Objekten? Meiner Ansicht nach werden die immer berechnet.
Dafür könnte man eine Klasse entwickeln, die anhand des Tiefenbuffers oder
sonst wie errechnet, welche Objekte zur Zeit sichtbar sind (Überprüfung
auf BoundingBoxes anstatt der kompletten Objekte um Leistung zu sparen)
und alle nicht sichtbaren Objekte aus der Meshliste solange entfernt, bis
die Kamera sie anzeigen soll.
Damit werden sie nur gerendert, wenn sie sichtbar sind.
Wie kann man das realisieren? Vlt schickt man einen Strahl von der Kamera
aus, der den gesamten Blickwinkel (FOV) abtastet und nur die Objekte, auf die
er trifft, DirectX zur Berechnung vorschlägt.
Inwiefern gewinnt man damit Performance? Es wäre nicht ratsam wenn die
Berechnung der sichtbaren Objekte mehr Leistung zieht als es braucht um
diese Objekte zu rendern.
Wäre dankbar für eure Vorschläge!
Norman.
-
Hmm,
wovon werden sie denn verdeckt? Von anderen Objekten oder von statischen Wänden. Bei letzteren schau dir doch mal BSP Trees an. Vielleicht bringt dich das auf Ideen.
Die Sache mit der Strahlenverfolgung hört sich so an, als würde sie bei benötigter Genauigkeit schnell die Vorteile zunichte machen.
Im Depthbuffer selber rummalen bringt wohl auch nix, da er ja normalerweise jedes Frame gelöscht wird.
Such doch mal Möglichkeiten, deine Objekte mit größerere Entfernung mit kontinuierlich weniger Geometry darzustellen. Die Entfernung lässt sich ja simpelst ermitteln und ein Objekt, das in großer Entfernung nur noch aus 4 Dreiecken besteht, umsonst gezeichnet zu haben, tut nicht weh.
-
Na ja das mit der reduzieren Genauigkeit auf Entfernung hab ich
auch vor umzusetzen aber nur bei wirklich sichtbaren Objekten.
Ich versuche halt alles zu gut wie möglich zu optimieren. ich dachte
nur vlt. mit dem tiefenbuffer herauszufinden, welche Objekte verdeckt
sind.
PS: Die Objekte werden einfach von anderen Objekten verdeckt, das können
statische Wände sein oder irgendwelche anderen Meshes.
Vielleicht teste ich das einfach mal mit dem Strahl aber ich weiß
auch nicht so genau wo ich da anfangen könnte. Vielleicht kennt einer
von euch ein Tutorial oder Vergleichbares dass dieses Thema bereits
aufgegriffen hat..
Norman.
-
Ok, wie du meinst.
Aber du solltest dich wirklich fragen, ob du mit deiner Strahlenverfolgung schneller bist, als wenn du die Karte eine handvoll Dreicke umsonsst rendern lässt.
-
Schau mal nach PVS und occlusion culling.
Bye, TGGC (Wähle deine Helden)
-
Ich glaube mit dem Z-Buffer bist du auf dem Holzweg, DX überprüft mit dem ja sowieso, ob ein Pixel schon hinter einem anderen liegt.
Das mit der Strahlenverfolgung hört sich irgendwie nach Raytracing an.