
- Direction Dependent Transparency
Solange man sich nicht innerhalb oder dicht an diesem transparenten Objekt befindet, werden die Transparenzen aus allen Kamerarichtungen richtig gezeichnet, ohne, dass ich pro Frame 260.000 Indices sortieren muss.
Ich habe das einfach mal "Direction Dependent Transparency" getauft.
Anstatt in meinem Mesh einen Vertex Buffer und einen Index Buffer zu haben, habe ich einen Vertex Buffer und mehrere Index Buffer, wobei jeder Index Buffer einer Richtung entspricht. Man kann dann einfach eine beliebige Anzahl von Richtungen angeben und das Mesh errechnet für jede Richtung einen Index Buffer. Dies mache ich einfach, indem ich alle Mittelpunkte der Faces auf die Gerade
Objektmittelpunkt + lambda * Richtung projeziere und jeweils den gerichteten Abstand (sprich positiv für "in die Richtung" und negativ für "entgegen" der Richtung) zum Objektmittelpunkt ausrechne. Das ist mein Sortiertkriterium für die Indizes zu dieser Richtung. Im Bild habe ich das z. B. für 4 Richtungen (die 4 Diagonalen der xz-Ebene, y ist Oben) gemacht. Beim Rendern muss ich dann einfach nur noch die Richtung auswählen, die den kleinsten Winkel zur Kamerarichtung (Richtung vom Objekt zur Kamera) hat, den entsprechenden Index Buffer binden und rendern. Und 4 mal Punktprodukt ist einfach weniger Aufwand als 260k Indizes zu sortieren

Das Verfahren versagt halt, wenn man sich zu dicht am Objekt befindet, weil dann die Projection auf die Kamerarichtung eine sehr schlechte Approximation zum Kameraabstand ist. Ich denke auch für nicht-Heightmaps (im Bild ist das ja nur eine Heightmap) sollte man mit 8 Richtungen gute Ergebnisse erzielen.
Und nun darf jemand mir verraten, wie das Verfahren wirklich heißt, denn ich hab mir das zwar ausgedacht, aber dass muss es ja schon irgendwie geben

Ist auf alle Fälle eine sehr gute und kostengünstige Variante zum "Alle-Faces-Sortieren", solange man halt einige Rahmenbedingungen erfüllt hat. (Natürlich gibt es Fälle, wo Sortieren alleine nicht reicht, aber in allen anderen sollte meine Approximation aus sicherer Entfernung funktionieren, notfalls muss man mehr Richtungen testen) Achso, man bezahlt natürlich auch mit VRAM, aber ich hoffe, die Indexbuffer sind nicht allzu groß

Edit: man könnte in die Versuchung geraten und behaupten die Transparenzen im Bild seien falsch, weil ja ab und zu irgendwas "abgeschnitten" aussieht, aber das ist richtig so, weil dort die Krümmung für eine "Doppellage" sorgt. Es geht ein bisschen der 3D-Eindruck dadurch verloren, dass ich noch keine Beleuchtung für transparente Objekte habe.