Nach dem letzten Artikel standen zwei Leserwunschthemen im Raum, die beantwortet werden wollten. Die Fragen waren, wie sich zum einen feststellen lässt, wann sich ein Dreieck eines zu zeichnenden Objektes (komplett) hinter einem anderen befindet und daher nicht gezeichnet werden muss, und wie zum anderen sich überlappende Dreiecke (ich vermute, mit “Flächen” waren Dreiecke gemeint) effizient gezeichnet werden können. In dem heutigen Artikel soll es um die erste Frage gehen, angereichert um einige zusätzliche Informationen.
Beim Zeichnen von Dreiecken (Polygonen – wir erinnern uns) in Echtzeit (das heißt in einer Geschwindigkeit, die genügend Bilder pro Sekunde erlaubt, um dem Betrachter ein flüssiges Bild zu suggerieren, etwa in Computerspielen) kommt es natürlich vor allem auf die Geschwindigkeit an, mit der eine Szene gezeichnet werden soll; dies geht umso schneller, je weniger Dreiecke gezeichnet werden müssen, insbesondere, da die Dreiecke ja mit Farbinformationen gefüllt werden müssen, um einen hohen Detailgrad bei der Darstellung zu simulieren. Das kollidiert allerdings mit der Anforderung, möglichst viele Details in der Szene unterzubringen, um ein realistischeres Bild zu erzeugen; mehr Details erfordern im Allgemeinen auch mehr Dreiecke. Um diese beiden Anforderungen wenigstens halbwegs vereinen zu können, ist es wichtig, die weniger bis nicht relevanten Dreiecke zu identifizieren und zu entfernen (wobei die Identifizierung natürlich nicht mehr Zeit beanspruchen darf als das eigentliche Zeichnen). Hier kommen mehrere Verfahren zum Einsatz; die beiden wichtigsten dürften das LOD-Verfahren und das Culling sein.
Beim LOD-Verfahren – LOD steht für Level Of Detail – werden Objekte in verschiedenen Auflösungen (das heißt, mit einer unterschiedlichen Anzahl an Dreiecken) erstellt; je weiter sich ein Objekt vom Punkt des Betrachters (der Kamera) entfernt befindet, desto weniger Details sind sichtbar und desto weniger Dreiecke sind benötigt, um das Objekt noch realistisch darzustellen. Weiter entfernte Objekte werden demzufolge mit einem Modell einer niedrigeren Auflösung gezeichnet; so kann die Anzahl der zu zeichnenden Polygone in der Szene schon drastisch reduziert werden.
Für die eigentliche Frage nach der Verdeckung von Dreiecken ist jedoch das zweite Verfahren, das Culling, interessant. Der Name des Verfahrens leitet sich vom englischen Begriff cull ab, was so viel wie aussondern bedeutet – und genau darum geht es bei dem Verfahren. Konkret hat das Culling zum Ziel, diejenigen Dreiecke in der zu zeichnenden Szene, die nicht sichtbar sind und daher nicht gezeichnet werden müssen, zu identifizieren und auszusondern. Eigentlich wird mit Culling auch nicht ein einzelnes Verfahren beschrieben, sondern eine ganze Sammlung von Methoden zur Reduzierung der Anzahl zu zeichnender Objekte in der Szene. Im Folgenden wollen wir einige der Verfahren durchgehen und dabei (hoffentlich) auch die Leserfrage beantworten.
Das zweifellos wichtigste Culling-Verfahren ist das Frustum-Culling. Beim Zeichnen einer Szene ist die meiste Zeit über nur eine kleine Menge an Objekten sichtbar; die restlichen befinden sich entweder hinter dem Betrachter, seitlich außerhalb seines Blinkwinkels oder so weit entfernt, dass sie ohnehin nicht sichtbar sind. Diese Grenzen des Sichtfeldes bilden einen Pyramidenstumpf, englisch Frustum – daher der Name. Das kleine Ende des Pyramidenstumpfes, die Near Clipping Plane, ist gewissermaßen die Ebene des Betrachters; alles dahinter befindet sich hinter dem Betrachter. Das große Ende des Pyramidenstumpfes, die Far Clipping Plane, ist die Ebene, hinter welcher Objekte so weit entfernt sind, dass sie nicht mehr gezeichnet werden müssen. Die Seiten des Pyramidenstumpfes repräsentieren die Grenzen des Sichtfeldes (da wir alle keinen Tunnelblick haben, sondern unser Gesichtsfeld in einem bestimmten Winkel nach außen geht, werden auch Bilder am Computer entsprechend gezeichnet). In der 3D-Grafik wird die Near Clipping Plane in der Regel nicht direkt auf die Position des Betrachters gesetzt, sondern ein wenig davor, um unschöne Effekte (etwa, dass die Spielfigur in einem Computerspiel in anderen Objekte hineinschauen kann) zu vermeiden; das sieht dann ungefähr so aus (der Stern ist der Betrachter):
Kommentare (2)