Technik mit Z-Buffer gesucht..



  • Hallo,
    ich möchte folgendes Renderverhalten erreichen, habe aber nach längerem Überlegen immer noch keine gute Lösung dafür:

    1a) In einem ersten Renderpass sollten alle Objekte in der Szene normal gezeichnet werden. Es entsteht ein Bild im Color- und Tiefenpuffer(A).
    1b) Der Tiefenpuffer(A) soll in irgendeiner Form zwischengespeichert werden.
    1c) Color- und Tiefenpuffer werden gelöscht.

    2a) Im nächsten Renderpass soll die selbe Szene aus der selben Perspektive erneut gezeichnet werden, jedoch solleb nur die Fragmente auf dem Bildschirm landen, deren z-Wert kleiner dem z-Wert aus dem Tiefenpuffer(A) ist. Es entsteht erneut ein Bild im Color- und Tiefenpuffer(B).
    2b) Der Tiefenpuffer(B) soll in irgendeiner Form zwischengespeichert werden.
    2c) Color- und Tiefenpuffer werden gelöscht.

    3a) Im nächsten Renderpass ...blabla... nur, wenn z-Wert kleiner als z-Wert aus B ist.
    usw.

    ---

    Beispiel 1:
    Angenommen ich habe eine Szene mit 3 parallel und mittig hintereinanderiegenden, gleich großen Quadraten, die ich von vorne betrachte, so dass das vorderste Quadrat die anderen 3 vollständig verdeckt.

    1a) Die Szene wird normal gezeichnet
    2a) Das erste Quadrat wird nicht nicht mehr gezeichnet, da dessen Rasterisierung an dem zusätzlichen Tiefenpuffer-Test scheitert. Das 2. Quadrat in der Anordnung wird sichtbar, es verdeckt das Dritte.
    3a) Erstes und zweites Quadrat werden nicht mehr gezeichnet. Sichtbar verbleibt das hinterste der 3 Quadrate.
    4a) Es wird nichts mehr gezeichnet, der Frame ist beendet.

    ---

    Beispiel 2:
    In einer Szene existieren 2 Quadrate, die sich aus einer best. Perspektive teilweise überlappen.

    1a)...
    2a) Es wird nur noch der Teil des hinteren Quadrats gezeichnet, der vorher vom Vorderen verdeckt wurde.

    ---

    Soweit ich das überblicke, scheitert ein Vorgehen mit dem Stencilbuffer. Alleine schon wegen der fehlenden Genauigkeit (8 Bit Stencil vs. 24 Bit Depth). Ich möchte das aber gerne schnell auf der Hardware lösen, eine Softwarelösung kommt nicht in Frage.

    Hat einer ne Idee?

    Viele Grüße
    FellaR



  • Mit einem normalen Z-Buffer wird das wohl schwierig. Mit Shadern sollte es aber gehen, wenn du den Z-Test dann später manuell durchführst. Die Tiefe renderst du dann in ein spezielles Render-Target.


Anmelden zum Antworten