PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Massive Shadows - Ultra Shadow vs. HyperZ III+


Gaestle
2003-12-18, 10:31:34
Hallo,

nachdem nun DeusEx2 rausgekommen ist, haben liegt nun ein "Schattenspiel" auf dem Ladentisch (auch wenn der Laden nicht direkt vor der eigenen Haustür ist). Dabei sorgt das Aktivieren der Schatten offensichtlich für einen ordentlichen Performance-Einbruch.

Nun hatte ich kraft meines Unwissens mehrfach die Vermutung geäußert, dass die NV35-basierten Chips dank ihrer Ultra-Shadow-Technik mit solchen Schattenspielen besser zurechtkommen, als die R3XX-Serie.
Nun tauchte aber mehrmals die Behauptung auf, "Ultra-Shadow" könnte durch "HyperZ III+" kompensiert werden, es wären sogar einander ähnliche Funktionen.

Nun habe ich dann doch ein paar Fragen:

1.) Was ist "Ultra-Shadow" bzw. HyperZ III+ (bloß in knappen Worten die das große Ganze treffend umschreiben, ich bin nicht so der große Technik-im-Detail-Versteher)
2.) Was ist davon Marketing und was bewirkt es wirklich?
3.) Ist davon auszugehen, dass sowas wie DeusEx2 bei beiden gleich gut/schlecht läuft? Wenn nein bzw. ja, warum, wieso, weshalb?

Vielen Dank im Voraus!

Grüße

Gast
2003-12-18, 10:36:52
kann man nicht so sagen wie DXII au fden unterschiedlichen GRaKas läuft.


Laut eines Forenmebers, sinds mit dem neuen Catalyst >60fps statt ~35 (falls ich mich recht erinnere)

aths
2003-12-18, 12:30:01
HyperZ enthält HierZ, um der Grafikkarte einige Z-Tests von vornherein ersparen zu können. Das ist eine Art mehrstufige Early-Z-Occlusion. Ultra Shadow kann in einem Takt Vorder- und Rückseite einer Fläche testen, und spart beim Stencil Shading Füllrate.

Demirug
2003-12-18, 12:51:58
Original geschrieben von aths
Ultra Shadow kann in einem Takt Vorder- und Rückseite einer Fläche testen, und spart beim Stencil Shading Füllrate.

Das was du hier meinst ist Two Side Stencil Test. Das kann der R3XX auch. Und man spart keine Füllrate sondern Vertexshaderleistung und etwas Bandbreite wie auch CPU Zeit.

Ultra Shadow soll aber wirklich Füllrate sparen indem es Pixel die ausserhalb eines definibaren Z-Bereichs liegen erst gar nicht bearbeitet und gleich aussortiert. Dieser Bereich kann zum Beispiel über die grösse des Lichtkegels einer Lampe bestimmt werden. Oder bei einem Raum (ohne fenster) bei dem alle Türen geschlossen sind könnten man über die Wände den Z-Bereich errechnen.

Das Schattenspiele auf den Radeons immer wieder probleme machen liegt an der nicht ganz so effektiven implementation der Stencilbuffer Funktionen.

aths
2003-12-18, 13:05:39
Original geschrieben von Demirug
Das was du hier meinst ist Two Side Stencil Test. Das kann der R3XX auch. Und man spart keine Füllrate sondern Vertexshaderleistung und etwas Bandbreite wie auch CPU Zeit.Da habe ich Ultra Shadow wohl gründlich missverstanden :kratz: Wieso spart man keine Füllrate beim Zweiseitigen Stenciltest?

Demirug
2003-12-18, 13:13:34
Original geschrieben von aths
Da habe ich Ultra Shadow wohl gründlich missverstanden :kratz: Wieso spart man keine Füllrate beim Zweiseitigen Stenciltest?

Weil die Menge der zu bearbeitetn Pixel gleich bleibt. Ohne Two Side Stencil jagt man das gesamte Schattenvolumen zweimal durch den Chip. Einmal werden die Flächen von denen man die Rückseite sieht im TriSetup verworfen und einmal die Vorderseite. Nimmt man aber beide Durchläufe zusammen kommen alle Flächen bei den Stencileinheiten an. Ergo: Es wird kein einziges Pixel weniger bearbeitet.

Gaestle
2003-12-19, 12:32:10
Danke für die Antworten!

Also hab' ich das richtig verstanden:
HyperZ testet die Z-Werte gegeneinander und wirft entsprechende Pixel aus der Pipeline raus, so dass die nicht weiter bearbeitet werden.
Ultra-Shadow schmeisst pauschal alle Pixel aus der Weiterbearbeitung, deren Z-Wert größer als ein definierbares X ist.

Ist das eine oder das andere effektiver? Mit der Darstellung von Schatten hat wohl beides nichts zu tun, oder?

Was ist, wenn man z.B. einem Dreick global einen Z-Wert zuordnet und dann alle Pixel, die zu diesem Dreieck gehören gleich behandelt? Spart man da nicht ein Haufen Einzel-Z-Tests? Allerdings müssten Dreiecke, die nur zum Teil verdeckt sind, komplett gerendert werden...


Grüße

del_4901
2003-12-19, 13:17:30
Original geschrieben von Gaestle
Danke für die Antworten!

Also hab' ich das richtig verstanden:
HyperZ testet die Z-Werte gegeneinander und wirft entsprechende Pixel aus der Pipeline raus, so dass die nicht weiter bearbeitet werden.
Ultra-Shadow schmeisst pauschal alle Pixel aus der Weiterbearbeitung, deren Z-Wert größer als ein definierbares X ist.

Ist das eine oder das andere effektiver? Mit der Darstellung von Schatten hat wohl beides nichts zu tun, oder?

Was ist, wenn man z.B. einem Dreick global einen Z-Wert zuordnet und dann alle Pixel, die zu diesem Dreieck gehören gleich behandelt? Spart man da nicht ein Haufen Einzel-Z-Tests? Allerdings müssten Dreiecke, die nur zum Teil verdeckt sind, komplett gerendert werden...


Grüße

Polys sollten sich sowieso nicht überschneiden, das führt zu hässlichen Artefakten. Dreiecke die nur zum Teil verdeckt werden müssen auch so komplett gerendert werden. Es sei denn man hat einen TBR bzw. deferred Renderer. Die Pixel werden sowieso nicht Z-getestet sondern nur die Vertices, oder wie sieht das aus, wenn ich im Fragmentshader die Pixel umherschiebe, dann müsste doch für die Pixel neu Z-getestet werden?
Und ob man jedem Face (Dreiecksfläche) nur einen Z-Wert zuordnen kann halte ich für sehr gefährlich, da man ja nicht weiß auf welchem Normalenvektor die Fläche steht, bzw. man weiß es schon, aber das würde auch wieder Berrechnungen nach sich ziehen. Welche höchstwarscheinlich nicht linear (n) Zeit benötigen sondern ich schätze mal das der Aufwand (n²) Zeit benötigt. Da ich nicht nur den Z_test mache sondern gleichzeitig Die Z-Werte interpolieren muss, wenn der Winkel ungünstig ist. (n ist die Anzahl der Eingabedaten, Pixel/Vertices sucht euch was aus ;) )

Demirug
2003-12-19, 13:32:20
Z-Werte musst du schon Pixelweise (bzw Subpixel beim AA) prüfen sonst bekommst du heftigen Ärger wenn sich Teile gegenseitig verdecken oder noch schlimmer überschneiden.

Der vollständigkeit halber nochmal etwas ausfürlicher.

HyperZ (ATI):

HyperZ nutzt einen mehrstufigen Test bei dem bei jeder Stufe ein kleineres Quadrat geprüft. Für jedes Quadrat wird dabei immer ein Z-Wert gespeichert und für das zu prüfende Dreieck ebenfalls ein Wert für diese Quadrat berechnet. Dabei handelt es sich entweder um den grössten oder kleinsten Wert. Abhängig ist das davon welcher Z-Vergleich genutzt wird.

Auf der höchsten Ebene wird eine 8*8 Pixel Tile geprüft. Kann der Chip nicht sicher sagen das alle 64 Pixel beim abschliessenden Z-Test verworfen würden geht es in die nächste Stufe. Hier wird das gleiche mit 4*4 Tiles wiederholt und abschliessen kommt noch eine Prüfung mit 2*2 Tiles zu Einsatz. Das Verfahren erreicht mit 64 Pixel/Takt eine hohe HSR Leistung die allerdings schnell sinkt wenn der Test auf den höheren Ebenen fehlschlägt. Ein weiteres Problem ist das man aufgrund der Tatsache das nur ein Z-Wert pro Tile gespeichert wird während eines Frames die Art der Z-Prüfung nicht ändern darf. Tut man diese doch wird das Hir-Z solange deaktiviert bis man wieder zur ursprünglichen Prüfung zurückwechsel. Die Verwendung von genauen Z-Prüfungen (gleich, ungleich) führt ebenfalls zum Abschalten von Hir-Z. Das veränder der Z-Prüfung ist übrigenes bei der Art wie DOOM III Schatten rendert notwendig.

EarlyZ (nVidia).

nVidia nutz kein gestuftes Verfahren sondern prüft 4 2*2 Tiles gleichzeitig. Dadurch erreichen sie nur maximale eine HSR Leistung von 16 Pixel/Takt. Das System ist aber weniger empfindlich. Zudem funktioniert es bei jeder Art von Z-Prüfung und man darf auch beliebig dazwischen wechseln.

Ultra-Shadow (nVidia).

Ultra Shadow führt nun eine andere Art von Z-Prüfung durch. Dort wird nicht der Z-Wert im Framebuffer mit dem Z-Wert des zu rendernden Objekts verglichen. Sondern der Z-Wert im Framebuffer gegen einen einstellbare Bereich. Damit erreicht man das Pixel die sowieso ausserhalb des Einflussbereichs einer Lichtquelle liegen sofort verworfen werden. Das Funktioniert daher weil aufgrund des notwendigen Z-Passes für jeden Pixel auf dem Bild die entgültige Z-Position schon früh feststeht. Desweiteren weiss man bei einer Lichtquelle aufgrund der Position, Art (Punktfömig, Spot, ...) sowie der Reichweite sehr schnell welchen Z-Bereich diese maximal abdecken kann. Alles was ausserhalb liegt braucht man beim Render nicht zu beachten und genau das macht Ultra-Shadow.

Gast
2003-12-19, 14:34:47
Original geschrieben von Demirug
HyperZ (ATI):
...
[Hirachical Z]
Auf der höchsten Ebene wird eine 8*8 Pixel Tile geprüft. Kann der Chip nicht sicher sagen das alle 64 Pixel beim abschliessenden Z-Test verworfen würden geht es in die nächste Stufe. Hier wird das gleiche mit 4*4 Tiles wiederholt und abschliessen kommt noch eine Prüfung mit 2*2 Tiles zu Einsatz.
...
EarlyZ (nVidia).
nVidia nutz kein gestuftes Verfahren sondern prüft 4 2*2 Tiles gleichzeitig.
...
Bist du dir absolut sicher, dass ATI es so macht? Aus HW-Gesichtspunkten macht es kaum Sinn. Bist du dir ebenfalls absolut sicher, dass NV es so macht? Das Verfahren erscheint mir nämlich deutlich sinnvoller.

Ich dachte eigentlich immer, dass ATI eine Variante des NV-Verfahrens benutzt und NV nimmt einfach den Z-Buffer.


Ultra-Shadow (nVidia).

Ultra Shadow führt nun eine andere Art von Z-Prüfung durch. Dort wird nicht der Z-Wert im Framebuffer mit dem Z-Wert des zu rendernden Objekts verglichen. Sondern der Z-Wert im Framebuffer gegen einen einstellbare Bereich.
Meinst du mit dem Fettgedruckten nicht den Z-Wert des zu rendernden Objektes?

aths
2003-12-19, 14:44:11
Original geschrieben von Gast
Bist du dir absolut sicher, dass ATI es so macht? Aus HW-Gesichtspunkten macht es kaum Sinn. Bist du dir ebenfalls absolut sicher, dass NV es so macht? Das Verfahren erscheint mir nämlich deutlich sinnvoller.

Ich dachte eigentlich immer, dass ATI eine Variante des NV-Verfahrens benutzt und NV nimmt einfach den Z-Buffer. Es macht doch keinen Sinn, "den Z-Buffer" zu nutzen, also die volle Z-Bandbreite zu verballern. Zumal man für Fast Z Clear ohnehin Z-Tiles verwalten muss.

ATIs Verfahren ist effizienter, wenn man "normal" rendert: Man braucht weniger Z-Bandbreite fürs Early Z, und kann außerdem mehr Pixel pro Takt verwerfen.

Original geschrieben von Gast
Meinst du mit dem Fettgedruckten nicht den Z-Wert des zu rendernden Objektes? "Das Objekt" hat keinen Z-Wert. Z ist an Pixel (bzw. Subpixel) gebunden.

Demirug
2003-12-19, 14:59:53
Original geschrieben von Gast
Bist du dir absolut sicher, dass ATI es so macht? Aus HW-Gesichtspunkten macht es kaum Sinn. Bist du dir ebenfalls absolut sicher, dass NV es so macht? Das Verfahren erscheint mir nämlich deutlich sinnvoller.

Ich dachte eigentlich immer, dass ATI eine Variante des NV-Verfahrens benutzt und NV nimmt einfach den Z-Buffer.

Beide Verfahren haben Vor und Nachteile und ja ich bin mir relative sicher.

Meinst du mit dem Fettgedruckten nicht den Z-Wert des zu rendernden Objektes?

Nein Framebuffer ist schon richtig das ist ja die Besonderheit bei Ultra-Shadow. Beim Z-Wert vom Objekt kann man das gleiche ja mit Clipplanes erreichen.

Gast
2003-12-19, 15:21:06
Original geschrieben von Demirug
Beide Verfahren haben Vor und Nachteile und ja ich bin mir relative sicher.
Gut, dann behalte ich mal meinen Glauben. Es ist schon seltsam: NV hat sich HW-Varianten des Hir-Z patentieren lassen, weil der Erfinder (Greene, 1993 oder so) zu NV ging. NV benutzt es aber nicht, sondern angeblich ATI. Im Gegensatz dazu habe ich kein ATI Patent auf die Schnelle gefunden, dass die Hir-Z Idee variiert.


Nein Framebuffer ist schon richtig das ist ja die Besonderheit bei Ultra-Shadow. Beim Z-Wert vom Objekt kann man das gleiche ja mit Clipplanes erreichen.
Ok, habe mich noch nicht wirklich damit auseinander gesetzt. Kleine Nachfrage: Mit Clip-planes kann man nicht clampen, aber NV clamped doch irgendwo die Z-Werte, oder
verwechsel ich da wieder mal was (Volumenschatten)?

Gast
2003-12-19, 15:40:25
Original geschrieben von aths
Es macht doch keinen Sinn, "den Z-Buffer" zu nutzen, also die volle Z-Bandbreite zu verballern. Zumal man für Fast Z Clear ohnehin Z-Tiles verwalten muss.

ATIs Verfahren ist effizienter, wenn man "normal" rendert: Man braucht weniger Z-Bandbreite fürs Early Z, und kann außerdem mehr Pixel pro Takt verwerfen.
Mit Z-Buffer Kompression kein sonderlich grosses Problem. Gilt für Bandbreite und Fast Z-Clear.

Bestenfalls kann ich noch den Z-Wert pro 8x8 Tile gelten lassen, aber alles weitere ist wirklich Kleinkram und (wie gesagt) ziemlich sinnlos.[/SIZE][/QUOTE]


"Das Objekt" hat keinen Z-Wert. Z ist an Pixel (bzw. Subpixel) gebunden.
Gemeint: Interpolation der Z-Werte des Dreiecks.

Demirug
2003-12-19, 19:56:59
Original geschrieben von Gast
Ok, habe mich noch nicht wirklich damit auseinander gesetzt. Kleine Nachfrage: Mit Clip-planes kann man nicht clampen, aber NV clamped doch irgendwo die Z-Werte, oder
verwechsel ich da wieder mal was (Volumenschatten)?

Das was du hier meinst ist Z-Clamp. Das benutzt man bei den Schattenvolumen um sich die Sache mit den Kappen der Volumen zu vereinfachen.