wie sichtbarkeitstest in Octree realisieren?



  • hi folks.

    ich habe eine frage:

    wenn ich in einem octree von einer x-beliebigen node oder leaf einen sichtbarkeitstest zu einer anderen node oder leaf machen will, wie funktioniert sowas?

    also ich haette zumindest mal eine dirty-loesung: mit z.b. opengl die kamera einmal auf jeden eckpunkt des momentanen start-kaestchens setzen, und dann alle anderen kaestchen in schwarz rendern, nur das ziel-kaestchen in e.g. gruen. das ganze in ne textur rendern, und wenn die textur gruen enthaelt, dann ist das zielkaestchen sichtbar.

    aber das ganze ist wohl extrem unperformant. geht das auch irgendwie besser, ohne gleich mathe studieren zu muessen? irgendwelche (moeglichst simplen) ansaetze?

    mfg,

    ---loki



  • Es reicht nicht, die Kamera auf jeden Eckpunkt zu setzen. Du könntest dadurch kleinere Löcher verpassen, durch die man in andere Zellen hinein sehen kann.

    Wenn du es ganz genau haben willst, wird dir nichts anderes übrig bleiben als es so zu machen, nur eben mit wesentlich mehr verschiedenen Kamerapositionen. Aber auch dann könntest du noch etwas verpassen. Es ist halt die Frage, ob dir das egal ist oder nicht.

    Um die Auswertung zu beschleunigen, könntest du mit Queries arbeiten. Damit kannst du dir von der Grafikkarte sagen lassen, wie viele Pixel durchgekommen sind.
    Außerdem könntest du von jeder Zelle aus gleich in einem Durchgang die Sichtbarkeit aller anderen Zellen herauskriegen.
    Dazu könntest du zuerst die gesamte Szene in den Z-Buffer rendern (das Schreiben in die Farbkanäle solltest du eh abschalten, das bringt einen ordentlichen Performance-Schub). Dann renderst du die Szene zellenweise noch einmal, aber mit einem Query pro Zelle. Am Ende schaust du dir die Ergebnisse der Queries an. Alle Zellen, die mindestens N sichtbare Pixel hatten (z.B. N = 1), nimmst du dann in die "potenziell sichtbar"-Menge der Quellzelle auf.

    Such auch mal nach PVS für Potentially Visible Set.



  • danke, schau ich mir mal an.


  • Mod

    oder die box am ende rendern und ein occlusion-query nutzen um das resultat zu bekommen, kann fixer sein als texturen zu kopieren.



  • rapso schrieb:

    oder die box am ende rendern und ein occlusion-query nutzen um das resultat zu bekommen, kann fixer sein als texturen zu kopieren.

    Hab ich doch gesagt, oder? 😉


  • Mod

    TomasRiker schrieb:

    rapso schrieb:

    oder die box am ende rendern und ein occlusion-query nutzen um das resultat zu bekommen, kann fixer sein als texturen zu kopieren.

    Hab ich doch gesagt, oder? 😉

    nachdem ich den thread aufmacht, stand nur die frage da, dann war ich kurz im meeting und dann schnell die antwort getippt, da hatte ich dein zeug leider nicht gesehen gehabt, tsorry.


Anmelden zum Antworten