PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AlphaTesting <=> AlphaBlending


KiBa
2004-04-28, 18:52:44
Moin,
im Speku-Forum beim ATI Treiber-Thread wurde ja über die Problematik von AlphaTesting diskutiert und einige meinten, AlphaTesting sollte komplett durch AlphaBlending ersetzt werden. Allerdings denke ich, dass die ganzen Spielentwickler das aus verschiedenen Gründen eben nicht machen, wobei mir einigen Gründe einfallen:
1. Performance: eine Engine, welche die Objekte nach eingesetzen Texturen, Shadern usw. sortiert könnte nach der (notwendigen) Tiefensortierung massiv an Performance einbüßen. Der schlechteste Fall wären ein paar Renderaufrufe und State-changes bei AlphaTesting und ein Aufruf und State-change für jedes Objekt beim Alphablending. Dazu kommt noch der höhere Aufwand beim eigentlichen Blending.
2. Genauigkeit: wenn erst im Framebuffer die einzelnen transparenten Anteile verrechnet werden, kann es zu unschönen Artefakten kommen. Ein Zwischen-Rendertarget wie eine FP-Textur verschafft zwar Abhilfe, drückt aber wieder die Performance.
3. Korrektheit: es gibt keine absolute Ordnung im 3D-Raum für alles was kein Punkt ist. In der Perspektive zyklisch überlappende Polygone würden hier Bildfehler hervorrufen (zwischen 2 dieser Polygone). Kreuzende Polygone müssten vorher (eventuell aufwändig) geteilt werden, was auch schlecht für dynamische generierte Geometrie ist. Es gibt Methoden, Alphablending ohne Tiefensortierung durchzuführen, das ist allerdings viel zu langsam für viele transparente Objekte. Mathematisch korrekt kann hier aber nur AlphaTesting sein.
4. Aufwand: AlphaBlending Texturen sind aufwändiger zu erstellen, das könnte ein Thema bei der ohnehin schon teuren Spieleentwicklung sein.

Insgesamt gesehen ist für mich durchgängiges AlphaBlending z.B. bei FarCry ein Ding der Unmöglichkeit, sowohl was Performance als auch das Vermeiden von Bildfehlern angeht. Nur bei einigen Gräsern und Sträuchern, welche Billboards sind (zum Betrachter hingewendet) und sich relativ einfach tiefensortieren lassen, ist imo diese Technik sinnvoll.
Leider gibt es da die bekannten Probleme mit nicht funktionierendem MultiSampling-AA und stärkerem Flimmern bei AF. Da man schlecht alle AlphaTesting Texturen durch Polygone ersetzen kann, sind hier wohl die Grafikkartenhersteller gefragt. Ob das nun durch SuperSampling bei diesen Texturen geschieht oder sonstwie ist dann wohl nen anderes Thema...
Was sagt ihr dazu, ist AlphaBlending wirklich die Lösung, wie oft behauptet?

eXistence
2004-04-28, 19:03:50
kleine Zwischenfrage (wollte ich in dem ATI-thread auch schon stellen):

kann mir jemand kurz und knackig erklären was Alphablending bzw testing genau ist (unterschiede)?
In wiefern hat das etwas mit der Transparenz zu tun, die im Alpha-Kanal von Texturen hinterlegt ist!?

sorry @KiBa, will deinen Thread nicht mißbrauchen, aber die Frage liegt mir schon länger auf der Zunge und passt hier grad so schön rein :)

Gast
2004-04-28, 20:31:24
Beim Alphatesting muss der Alphawert nur min 1bit (transparent oder nicht - z.B. oft die Blätter von Pflanzen in Farcry) abdecken, während es beim Alphablending meistens 8bit (bis 256 Abstufungen - Gras bei FarCry) sind.

Mr, Lolman
2004-04-28, 20:43:23
Original geschrieben von KiBa
Moin,
im Speku-Forum beim ATI Treiber-Thread wurde ja über die Problematik von AlphaTesting diskutiert und einige meinten, AlphaTesting sollte komplett durch AlphaBlending ersetzt werden. Allerdings denke ich, dass die ganzen Spielentwickler das aus verschiedenen Gründen eben nicht machen, wobei mir einigen Gründe einfallen:
1. Performance: eine Engine, welche die Objekte nach eingesetzen Texturen, Shadern usw. sortiert könnte nach der (notwendigen) Tiefensortierung massiv an Performance einbüßen. Der schlechteste Fall wären ein paar Renderaufrufe und State-changes bei AlphaTesting und ein Aufruf und State-change für jedes Objekt beim Alphablending. Dazu kommt noch der höhere Aufwand beim eigentlichen Blending.

ACK, wobei der zusätzliche Blendingaufwand zu vernachlässigen ist.


2. Genauigkeit: wenn erst im Framebuffer die einzelnen transparenten Anteile verrechnet werden, kann es zu unschönen Artefakten kommen. Ein Zwischen-Rendertarget wie eine FP-Textur verschafft zwar Abhilfe, drückt aber wieder die Performance.

Das ist imo das Hauptproblem


3. Korrektheit: es gibt keine absolute Ordnung im 3D-Raum für alles was kein Punkt ist. In der Perspektive zyklisch überlappende Polygone würden hier Bildfehler hervorrufen (zwischen 2 dieser Polygone). Kreuzende Polygone müssten vorher (eventuell aufwändig) geteilt werden, was auch schlecht für dynamische generierte Geometrie ist. Es gibt Methoden, Alphablending ohne Tiefensortierung durchzuführen, das ist allerdings viel zu langsam für viele transparente Objekte. Mathematisch korrekt kann hier aber nur AlphaTesting sein.

Oder man modelliert 'genauer'...


4. Aufwand: AlphaBlending Texturen sind aufwändiger zu erstellen, das könnte ein Thema bei der ohnehin schon teuren Spieleentwicklung sein.

IMO vernachlässigbar...

[QUOTE][SIZE=1]
Insgesamt gesehen ist für mich durchgängiges AlphaBlending z.B. bei FarCry ein Ding der Unmöglichkeit, sowohl was Performance als auch das Vermeiden von Bildfehlern angeht. Nur bei einigen Gräsern und Sträuchern, welche Billboards sind (zum Betrachter hingewendet) und sich relativ einfach tiefensortieren lassen, ist imo diese Technik sinnvoll.
Leider gibt es da die bekannten Probleme mit nicht funktionierendem MultiSampling-AA und stärkerem Flimmern bei AF. Da man schlecht alle AlphaTesting Texturen durch Polygone ersetzen kann, sind hier wohl die Grafikkartenhersteller gefragt. Ob das nun durch SuperSampling bei diesen Texturen geschieht oder sonstwie ist dann wohl nen anderes Thema...
Was sagt ihr dazu, ist AlphaBlending wirklich die Lösung, wie oft behauptet?

ACK, Es ist sicher nicht die Lösung schlechthin. Ich bin mir aber sicher, dass der Trend eher hin zum Ausmodellieren in Verbindung mit Alphablending, geht, als zur extensiven Nutzung von Alphatesting. Alphatesting ist, wie in deinem Post schon impliziert, einfach ein Kompromiss, den man beim Spieldesign momentan noch tw. eingehen muss. Mit steigender Rechenleistung wird die Problematik des Alphatestings jedoch hinfällig werden.

Mr. Lolman
2004-04-28, 20:43:33
edit: Argh, blödes Wand-Passwort :weg:

eXistence
2004-04-28, 20:45:22
@Gast
ah, in die Richtung ging meine Vermutung auch schon, danke :)

Die daraus reslutierenden Probleme verstehe ich zwar immernoch nicht 100%ig, aber ich warte mal ab, evtl. klärt sich das noch von selbst :)

Kant
2004-04-28, 20:48:14
Original geschrieben von eXistence

kann mir jemand kurz und knackig erklären was Alphablending bzw testing genau ist (unterschiede)?
In wiefern hat das etwas mit der Transparenz zu tun, die im Alpha-Kanal von Texturen hinterlegt ist!?


IMHO =>

Alpha-Testing : Ein Fragment(Pixel) wird daraufhin getestet, ob der Alpha-Wert in der Textur an dieser Stelle einen bestimmten Schwellen-Wert übersteigt/unterschreitet. Tut er dies wird der Pixel als "deckend" eingestuft, und gerendert(in der Frame-Buffer+Z-Buffer geschrieben). Tut er dies nicht, wird der Pixel verworfen(keine Schreibt-Aktion in FB+ZB).

Alpha-Blending : Ein Fragment(Pixel) wird entsprechend des Alpha-Wertes der Textur an dieser Stelle mit dem im Framebuffer gespeicherten Color-Wert verrechnet. Pixel werden generell nicht verworfen.

@KiBa
Du hast noch den Nachteil beim Early-Z vergessen. (funkt AFAIK nicht bei Alpha-Testing.)
Ich denke aber auch nicht, das Alpha-Blending den Alpha-Test vollständig ersetzen kann. Eine Lösung für das MS-AA Problem wäre allerdings in der Tat wünschenswert.
Super-Sampling wäre toll (auch in Anbetracht dessen das es bei Pixel-Shadern stark BQ-verbessernd wirkt), aber der Performance Einbruch dabei.... :(

Börk
2004-04-29, 08:59:33
Hauptproblem ist imo, dass Back to Front gerendert werden muss, was bei vielen Engines zu Problemen führt und generell Performance kostet...

Gruß,
Börk

Matti
2004-04-29, 10:59:29
würde man SS-AA verwenden, hätte Alpha-Testing doch keine Nachteile, oder?

DrumDub
2004-04-29, 11:47:17
Original geschrieben von Matti
würde man SS-AA verwenden, hätte Alpha-Testing doch keine Nachteile, oder?

richtig.

Exxtreme
2004-04-29, 12:10:10
Original geschrieben von Börk
Hauptproblem ist imo, dass Back to Front gerendert werden muss, was bei vielen Engines zu Problemen führt und generell Performance kostet...

Gruß,
Börk
Eben. Die HSR-Mechanismen eines IMR funktionieren nicht mehr richtig beim BtoF-Rendering.

Matti
2004-04-29, 12:21:01
SS-AA ist auf jeden Fall schneller, als Polygonsorting+Back2Frontrendering, also ist SS-AA + Alpha-Testing der optimale Weg.

Demirug
2004-04-29, 13:30:55
Original geschrieben von Matti
SS-AA ist auf jeden Fall schneller, als Polygonsorting+Back2Frontrendering, also ist SS-AA + Alpha-Testing der optimale Weg.

Oder mehrfach mit maskiertem MS Buffer rendern. Die Ergebnisse sind ganz brauchbar.

Börk
2004-04-29, 13:41:33
Original geschrieben von Matti
würde man SS-AA verwenden, hätte Alpha-Testing doch keine Nachteile, oder?
Doch, die Glättung ist immer noch nicht so gut wie bei Alpha Blending, aber auf jeden Fall schonmal besser.
Allerdings kann man bei aktuell üblichem SSAA auch einfach die Auflösunge erhöhen, das bringt den gleichen Effekt...

Gruß,
Börk

DrumDub
2004-04-29, 13:58:49
Original geschrieben von Börk
Doch, die Glättung ist immer noch nicht so gut wie bei Alpha Blending, aber auf jeden Fall schonmal besser.
Allerdings kann man bei aktuell üblichem SSAA auch einfach die Auflösunge erhöhen, das bringt den gleichen Effekt...

Gruß,
Börk

hmm... texturflimmern hab ich bei 4xrgssaa noch nie gesehen.

Mr. Lolman
2004-04-29, 14:14:50
Original geschrieben von Matti
SS-AA ist auf jeden Fall schneller, als Polygonsorting+Back2Frontrendering, also ist SS-AA + Alpha-Testing der optimale Weg.

Glaub ich nicht. Denn die UT2003 Engine büsst nur sehr wenig Performance ein, wenn man auf Back2Front Rendering wechselt. Vernünftiges SSAA braucht jedoch 75% der Fillrate der GraKa...

KiBa
2004-04-29, 17:16:26
Original geschrieben von Demirug
Oder mehrfach mit maskiertem MS Buffer rendern. Die Ergebnisse sind ganz brauchbar. Wie funktioniert das genau? Rendert man die entsprechenden Teile dabei jeweils leicht versetzt oder wie?

aths
2004-04-29, 17:41:40
Original geschrieben von Matti
würde man SS-AA verwenden, hätte Alpha-Testing doch keine Nachteile, oder? Doch. SSAA vermindert die Artefakte, ohne sie zu beseitigen. Was ist nun besser? SSAA oder Alphablending?

Was ist besser? Die Skybox am Anfang zu rendern und dabei Z abzuschalten, oder die Skybox am Ende zu rendern, dann natürlich mit Z? "Das hängt davon ab" :) Da man Alphatesting ohnehin nicht übertrieben einsetzen sollte, halte ich Alphablending-Kanten für insgesamt brauchbarer. Obwohl auch dieses nicht völlig Artefakt-frei wird.

Xmas
2004-04-29, 17:54:14
Original geschrieben von KiBa
Wie funktioniert das genau? Rendert man die entsprechenden Teile dabei jeweils leicht versetzt oder wie?
Ja. Alle Polygone mit Alpha-Test werden mehrmals leicht versetzt gerendert, und dabei alle bis auf ein Sample ausmaskiert. Man kann das Verhältnis natürlich auch variieren, z.B. bei 6xMSAA jeweils 2 Samples aktivieren, so dass man effektiv 3xSSAA für Alpha Test bekommt.

Das schöne daran ist dass man das Samplemuster prinzipiell selbst bestimmen kann. Das unschöne daran ist erst mal natürlich die Performance, schließlich geht mehr Füllrate und Vertexleistung dabei drauf, nebst schlechterer Framebuffer-Kompression. Unschön sind aber auch die Wechselwirkungen zwischen Multisampling-Muster (also dem "Hardware-Muster") und dem Supersampling-Muster (also dem Geometrie-Jitter). Wenn man alle bis auf ein Sample ausmaskiert, möchte man üblicherweise, dass Textur- und Geometrie-Samplepunkt übereinstimmen. Ansonsten muss man das MS-Muster der Hardware kennen und sozusagen gegenkorrigieren, damit auch das MS-Muster brauchbar bleibt.

Xmas
2004-04-29, 17:56:29
Original geschrieben von aths
Was ist besser? Die Skybox am Anfang zu rendern und dabei Z abzuschalten, oder die Skybox am Ende zu rendern, dann natürlich mit Z? "Das hängt davon ab" :)
Die meisten Devrel-Menschen würden dich dafür lynchen, überhaupt in Erwägung zu ziehen die Skybox zuerst zu rendern.

aths
2004-04-29, 18:05:13
Original geschrieben von Xmas
Die meisten Devrel-Menschen würden dich dafür lynchen, überhaupt in Erwägung zu ziehen die Skybox zuerst zu rendern. Mit deaktiviertem Z hat man pro Pixel einen Color-Write. Die Skybox zuletzt zu rendern lohnt wenn man von ihr wenig sieht, bzw. man Early-Z hat.

Demirug
2004-04-29, 18:13:44
Original geschrieben von aths
Man spart den Color-Clear. Mit deaktiviertem Z hat man pro Pixel einen Color-Write. Die Skybox zuletzt zu rendern lohnt wenn man von ihr wenig sieht, bzw. man Early-Z hat.

Den Color-Clear spart man auf jeden Fall wenn man eine Skybox hat. Den Z-Buffer muss man auf jeden Fall löschen also kann man da nichts sparen.

Wenn man sie zuletzt rendert spart man nicht nur die Bandbreite fürs schreiben der Farbwerte sondern auch die für das einlesen der Texturen.

Man rendert nach Möglichkeit immer von vorne nach hinten.

aths
2004-04-29, 18:19:41
Original geschrieben von Demirug
Den Color-Clear spart man auf jeden Fall wenn man eine Skybox hat. Ja, da hatte ich nicht genau drüber nachgedacht, aber du bist natürlich so fix mit dem quoten ;(

Original geschrieben von Demirug
Wenn man sie zuletzt rendert spart man nicht nur die Bandbreite fürs schreiben der Farbwerte sondern auch die für das einlesen der Texturen.Hrnnn ...

Nasenbaer
2004-05-01, 17:32:44
Original geschrieben von Demirug
Man rendert nach Möglichkeit immer von vorne nach hinten.
Das klingt in meinen Augen logisch, weil so die Pixel, die eh nicht gebraucht werden gleich beim Tiefentest verworfen werden. Aber wieso gibt es dann BackToFront Rendering überhaupt? *nicht kapier*

Exxtreme
2004-05-01, 18:07:59
Original geschrieben von Nasenbaer
Das klingt in meinen Augen logisch, weil so die Pixel, die eh nicht gebraucht werden gleich beim Tiefentest verworfen werden. Aber wieso gibt es dann BackToFront Rendering überhaupt? *nicht kapier*
AFAIK kann BtoF-Rendering die Hitrate der Texturcaches verbessern. Und wie gesagt, Alphablending braucht das auch.

Nasenbaer
2004-05-02, 22:53:14
Original geschrieben von Exxtreme
Und wie gesagt, Alphablending braucht das auch.
Das bedeutet also, dass jedes Spiel in dem transparente Texturen vorkommen BtoF-Rendering nutzt oder hab ich da jetzt was falsch verstanden?

ow
2004-05-03, 09:07:39
.