Hallo zusammen!

Viele kennen das Problem, dass in der A8 (bzw. unter DirectX 9) halbtransparente Polygone oft falsch sortiert gerendert werden. Oder dass die Sortierung, abhängig von der Kameraposition, einmal korrekt ist, und dann plötzlich fehlerhaft.

Das hängt damit zusammen, dass halbtransparente Polygone nicht in den Z-Buffer geschrieben werden können, und dadurch auch nicht anhand ihrer tatsächlichen Position im virtuellen Raum sortiert werden können.
Stattdessen werden sie nach folgender Reihenfolge sortiert/gerendert:
  • Innerhalb eines Models werden transparente Polygone in der Reihenfolge ihrer Erstellung gerendert. Polygone, die beim Modellieren zu einem späteren Zeitpunkt erstellt wurden, überlagern also beim Rendern jene Polygone, die zuvor erstellt wurden.
  • Die Entities selbst (also Sprites, Models) werden abhängig von ihrem Abstand zur Kamera gerendert (wobei der Mittelpunkt der Entity entscheidend ist).

Dieser Thread soll dazu dienen, über verschiedene Techniken zu diskutieren, mit denen man die Probleme mit der falschen Sortierung zumindest teilweise umgehen kann.

Für den Anfang könnten wir über folgende Punkte diskutieren:

1.) Order Independent Transparency unter DirectX 11
DirectX 11 unterstützt einen Shader, der es ermöglicht, halbtransparente Polygone in der korrekten Sortierreihenfolge zu rendern.
Beispiel-Video: http://www.youtube.com/watch?v=zANEUhyT2y8
Von Slin stammt dieser interessante Link mit einer detailierten Beschreibung:
https://graphics.stanford.edu/wikis/cs44...s-10-11-oit.pdf


2.) Eine Technik, bei der halbtransparente Objekte (Vegetation) in einem zweiten Schritt gerendert werden
Dieser Hinweis kam von Superku, und ist in folgendem Dokument genauer beschrieben:
http://www2.disney.co.uk/cms_res/blackrockstudio/pdf/Foliage_Rendering_in_Pure.pdf


3.) Tricks beim Modellieren zum Vermeiden der falschen Sortierung
Und dann gibt es noch jede Menge Tipps und Tricks, wie man schon beim Modellieren bzw. beim Designen der halbtransparenten Models die Sortierreihenfolge der Polygone beeinflussen kann. Oder indem man ein Model auf mehrere Models aufteilt, oder programmgesteuert den Mittelpunkt eines Models verlagert. Auch darüber können wir gerne diskutieren.


Ich habe diesen Thread auf deutsch eröffnet. Antworten können auch gerne in englisch gegeben werden.
Dank Google-Translator dürfte es ja kein Problem sein, beide Sprachen zumindest lesen zu können.