Was ist der Zweck des Schablonenpuffers? Was ist eine Schablone in der Computergrafik?


41

Ich lese das Schablonenwort oft und habe keine Ahnung, wozu es in der Computergrafik wirklich gut ist.

Wenn ich das Bild auf Wikipedia in Schwarzweiß sehe, habe ich immer noch Probleme damit.

Warum verwenden wir eine Schablone oder einen Schablonenpuffer und was ist der Unterschied zu einem Z-Puffer? Warum dieses Wort benutzen, das im Grafikdesign eine Bedeutung zu haben scheint?


Gute Frage, alles was ich weiß ist, dass es zum Rendern von Schatten verwendet wird ... Aber ich bin interessiert, eine vollständige Erklärung zu hören!
Ricket

Antworten:


40

In seiner ursprünglichen Inkarnation war ein Schablonenpuffer ein Ein-Bit-pro-Pixel-Framebuffer (dh schwarz oder weiß, aber keine Graustufen). Sie können es wie jeden anderen Framebuffer rendern, was Sie wollen. Später können Sie dann den Inhalt dieses Puffers zum "Schablonieren" oder Ausblenden verwenden, wenn Sie in Ihren regulären Puffer zeichnen.

Ein Beispiel: Nehmen wir an, Sie machen ein Fahrspiel. Sie möchten einen kleinen Rückspiegel auf dem Bildschirm haben, der Ihnen zeigt, was sich hinter dem Auto befindet. Sie müssen eine Ansicht rendern, die hinter das Auto zeigt, aber Sie möchten diese Ansicht nur innerhalb des kleinen abgerundeten Rechtecks ​​des Rückspiegels rendern. Die typische Lösung ist:

  1. Rendern Sie die abgerundete Rechteckform in den Schablonenpuffer.
  2. Aktivieren Sie das Schablonieren.
  3. Rendern Sie die rückwärts gerichtete Ansicht auf den regulären Puffer.

Die Schablone maskiert es dann so, dass Sie nur in die Form des Spiegels zeichnen.

Da Render-Pipelines jetzt viel flexibler und programmierbarer sind, werden Schablonenpuffer als allgemeiner 1-Bit-Framebuffer verwendet, mit dem Sie alles tun können, was Sie wollen. Schatten sind ein häufiger Anwendungsfall.


10
Mit anderen Worten, es hat im Grunde die gleiche Funktion wie eine echte Schablone, bei der beim Auftragen von Tinte Teile ausgeblendet werden.
Kaj

4
Heutzutage unterstützen fast alle Geräte einen 8-Bit-Schablonenpuffer.
Chris Howe

Ich verstehe dein Beispiel nicht wirklich, es ist, als gäbe es einen zweiten Frustrum? rastert es einen anderen Teil der Szene? Können Sie ein Beispiel mit Schatten geben?
jokoon

Es ist nur ein zweiter Bildpuffer. Sie können den Kegelstumpf jederzeit ändern, bevor Sie ihn rendern (was meiner Meinung nach bei Schattensystemen der Fall ist), aber das ist nicht Teil des Kernkonzepts.
Munificent

9

Neben der bereits diskutierten funktionalen Verwendung von Schablonenpuffern können auch Schablonenpuffer zur Optimierung verwendet werden.

Aufgrund der Position des Schablonentests in der Grafikpipeline ( vor der Pixelschattierung) können mit dem Schablonentest Pixel getötet werden, die starke Schattierungsarbeiten ausführen, wenn sie nicht benötigt werden. Oft kann dies mit einer gröberen Granularität als nur einem einzelnen Pixel erfolgen, z. Eine Kachel mit Pixeln, sodass die Arbeit häufig auch während der Grobrasterung aussortiert werden kann.


4

Es ist nur ein Puffer, der steuert, welche Pixel beim Rendern von Polygonen geändert werden können. Für jedes Pixel gibt es einen entsprechenden Schablonenwert, und Pixel können abhängig von diesen Werten bedingt geändert / ignoriert werden

Im einfachsten Fall kann es wie eine physische Schablone verwendet werden - eine Maske, die einige Pixel durchlässt und andere Pixel davon abhält, geändert zu werden.

Es verhält sich sehr ähnlich wie ein Z-Buffer - wie ein Tiefentest, ist ein Schablonentest ein True / False-Test, und es gibt ähnliche Einstellungen, um den Schablonentest zu steuern (bestanden, wenn größer / kleiner / gleich). Anstatt jedoch eine Tiefe darauf zu schreiben, werden in der Regel vordefinierte Werte darauf geschrieben oder beim Zeichnen von Pixeln inkrementiert / dekrementiert, wie dies in Schablonenschattenalgorithmen verwendet wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.