Transparente Würfel sortieren
-
Hallo,
ich habe ein Problem was man gekürzt so zusammenfassen kann:
Zwei semitransparente Würfel sollen gerendert werden. Bisher habe ich die Würfel anhand ihres Mittelpunktes von hinten nach vorne sortiert, damit sie in der richtigen Reihenfolge gerendert werden. Nun habe ich aber das Problem, dass diese Methode nicht mehr funktioniert, wenn sich die Würfel überlappen oder unterschiedlich groß sind. In beiden Fällen kann es passieren, dass die Würfel in der genau falschen Reihenfolge gerendert werden.
Nun habe ich versucht die Würfel anstatt anhand des Mittelpunkts anhand der nächsten Ecke zum Beobachter zu sortieren, nach kurzem überlegen kam ich aber auch hier zum Schluss, dass dies nicht des Rätsels Lösung ist.
Wie kann ich also sicherstellen, dass die Würfel immer in der richtigen Reihenfolge gerendert werden?
-
ich denke da hilft das Hyperplane separation theorem weiter.
sofern sich die wuerfel nicht schneiden (was dann sowieso keine 'richtige' reihenfolge uebrig liesse), kannst du eine plane finden die die beiden wuerfel unterteilt.
hast du die plane, befindet sich sowohl ein wuerfel wie auch der betrachtungspunkt auf der einen seite der plane, der andere wuerfel auf der anderen seite. der einsame wuerfel muss nun also zuerst gezeichnet werden und danach der, der auf der betrachtungsseite ist.ich habs nicht ausprobiert, ist nur soeine idee.
-
Rendering von transparenten Objekten war schon immer eine gewisse Herausforderung, besonders wenn die Objekte komplex sind und sich (auch selbst) überlappen
Sortieren der Objekte bzw. der Flächen ist eine praktikable Lösung für einfache Szenen, die aber schon sehr schnell versagt, wie du festgestellt hast.
Andere Techniken sind unter dem Begriff Order Independent Transparency zusammengefasst und beinhalten Multipass-Rendering unter Ausnutzung des Depth Buffers (Depth Peeling) oder aber Sortieren der transparenten Pixel in einem Pixel/Fragment-Shader.
Die soweit ich mich entsinne am einfachsten zu implementierende Technik ist das genannte Depth Peeling:
https://developer.nvidia.com/system/files/akamai/gamedev/docs/order_independent_transparency.pdf?download=1.
Dieses erfordert mehrere Render-Durchläufe von deren Anzahl abhängt wieviele hintereinander liegende Flächen korrekt gerendert werden können. Für mittelmäßig komplexe Objekte ist das denke ich das Mittel der Wahl - sobald die Objekte noch "verschnörkelter" werden gibt es auch andere Methoden, die sind aber meist deutlich aufwändiger und lohnen sich für die Würfel (noch) nicht.Gruss,
Finngean