DGL
https://delphigl.com/forum/

2 Fragen zu Z-Correct Bump Mapping
https://delphigl.com/forum/viewtopic.php?f=20&t=4040
Seite 1 von 1

Autor:  La Boda [ Sa Apr 16, 2005 17:46 ]
Betreff des Beitrags:  2 Fragen zu Z-Correct Bump Mapping

Ich habe mal zwei Fragen zu Z-Correct Bumpmapping.
1.:
Zitat:
Zitat aus Tom Nuydens Bumpmapping - Overview:
Z-correct bump mapping has one major drawback, though. Modifying Z in a pixel shader typically disables the hardware's early depth test optimizations. Early depth testing allows the card to kill fragments based on their depths before the pixel shader is executed. This can improve performance considerably, but if the shader is going to modify the depth value, this early-out opportunity is lost.

Wird jetzt automatisch beim verändern der FragCoords der Depth-Test deaktiviert, oder wird er durch die Veränderungen praktisch sinnlos, es kommt halt dann zu Pixelfehlern? Wenn zweiteres der Fall wäre, dann könnte ich das in meinem Projekt getrost ignorieren.
2.: In gl_FragCoord.z wird ja praktisch die Entfernung des Fragments zum Betrachter angegeben, oder? Gibts es einen anderen Wert, der die Position des Fragments genau "weis", und den man auch schreiben kann?

Autor:  LarsMiddendorf [ Sa Apr 16, 2005 18:23 ]
Betreff des Beitrags: 

Normalerweise wird der ZBuffer komprimiert und für beispielsweise 8x8 Pixel nur die Ebenengleichung abgespeichert. Je nach Grafikkarte geht das ganze auch noch hierachisch. Wenn man den Z Wert jetzt natürlich pro Pixel schreibt, funktioniert diese Optimierung nicht mehr und das kostet richtig viel Geschwindigkeit. Eigene Occlusion Queries für jede Fläche sind da auf jeden Fall notwendig, aber die Geschwindigkeit geht trotzdem schon ziemlich stark runter.
Alpha Blending oder KIL bzw. Discard haben eine ähnliche Wirkung. Das ist nicht ganz so teuer, weil ja der alte Z Wert bekannt ist, aber dieser Bereich den ZBuffers muß dann auch dekomprimiert werden.

Man muß schon gl_FragCoord.z schreiben, aber man kann die Koordinate auch selber berechnen.

Vertex Shader:

Code:
  1. varying vec4 coord;
  2.  
  3. coord=gl_ModelViewProjectionMatrix * gl_Vertex;


Fragment Shader:

Code:
  1. vec3 FragCoord=coord.xyz /coord.w;

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/