Computer, Smartphones und Spielkonsolen verwenden für die flüssige Darstellung von 2D- und 3D-Grafiken spezielle Grafikprozessoren, sogenannte GPUs (Graphics Processing Units). Während ein Prozessor (CPU) aus vergleichsweise wenigen leistungsfähigen Rechenkernen besteht, enthält eine moderne GPU Hunderte bis viele Tausend einfachere Recheneinheiten (ALUs), die eine große Zahl ähnlicher Berechnungen gleichzeitig ausführen können.
| Gerät | Größenordnung paralleler ALUs / FP32-Lanes |
|---|---|
| Smartphone | einige Hundert bis etwa 1.000+ |
| Spielkonsole | etwa 1.000–4.000 |
| PC-GPU Mittelklasse | etwa 2.000–6.000 |
| PC-GPU High-End | etwa 10.000–22.000 |
Dieses Konzept ergibt sich aus der Bilderzeugung: Für jedes Bild müssen die Positionen, Farben, Beleuchtung und viele weitere Eigenschaften von Millionen Bildpunkten berechnet werden. Da sich viele dieser Berechnungen gleichzeitig durchführen lassen, sind GPUs stark auf parallele Verarbeitung ausgelegt.
Programmiert werden diese Berechnungen mit speziellen Programmen, den sogenannten Shadern. Shader legen beispielsweise fest, wo die Punkte eines 3D-Modells auf dem Bildschirm erscheinen, wie Licht auf eine Oberfläche wirkt oder welche Farbe ein einzelner Bildpunkt erhält.
Vereinfacht gesagt sind Shader also Programme für die vielen parallel arbeitenden Recheneinheiten einer GPU. Sie werden auf moderner GPU-Hardware typischerweise in SIMD-/SIMT-artigen (Single Instruction, Multiple Data / Single Instruction, Multiple Threads) Gruppen ausgeführt: dieselbe Berechnung wird gleichzeitig auf viele unterschiedliche Daten angewendet. Zur Programmerzeugung dienen Shadersprachen wie OpenGL Shading Language (GLSL).
Die geometrischen Berechnungen in der Computergrafik, Vermessungsgeräten und Robotik sind im Kern äußerst ähnlich. Es geht als Schwerpunkt um die Projektion von Punktkoordinaten und Richtungsvektoren zwischen lokalen Koordinatensystemen.
Das mathematische Werkzeug ist die analytische Geometrie und lineare Algebra, und hier spielen Vektoren der Dimension 4 und Matrizen der Dimension 4×4 eine zentrale Rolle. Mehr zu diesem Thema ist u.a. in meinem Beitrag https://thurow.de/einsatz-von-transformationsmatrizen-in-der-geometrischen-messtechnik zu entnehmen.
Unser Beispiel der photogrammetrischen Entzerrung ist dabei im Vergleich zu anderen photogrammetrischen Verfahren mathematisch einfach. Mittels einer Kamera werden Objekte / Punkte aufgenommen, die als in einer Ebene liegend abstrahiert werden, z.B. eine Häuserfassade.


Photogrammetrische Verfahren kehren vereinfacht gesagt den Abbildungsprozess bei Fotoaufnahmen von dreidimensionalen Objekten auf zweidimensionale Bilder mathematisch um. Da bei einer einzelnen Aufnahme die Tiefeninformation verloren geht, sind zur Rekonstruktion zusätzliche Informationen oder geometrische Annahmen erforderlich, z.B. bei der Mehrfachphotogrammetrie durch Aufnahmen der Objekte von verschiedenen Standorten.
In unserem Fall sieht das so aus:
- Jeder Punkt auf der Oberfläche der Fassade reflektiert Licht mit einer gewissen Farbe. Dabei werden auch Photonen in Richtung Objektiv der Kamera reflektiert.
- Für unser geometrisches Modell kann die Lichtausbreitung zwischen Fassade und Kamera als geradlinig angenommen werden; atmosphärische Einflüsse werden vernachlässigt.
- Die Lichtstrahlen treffen auf das Objektiv der Kamera und werden von diesem auf den Bildsensor gelenkt.
- Der Bildsensor erzeugt das zweidimensionale Abbild der Fassade.
In der Anwendung muss dieser Abbildungsprozess nun wieder mathematisch umgekehrt werden. Zum besseren Verständnis dazu zunächst ein Video einer Anwendungssoftware, die ich für diesen Beitrag erstellt habe:
Sowohl die Anzeige des Rohbildes, seiner Entzerrung, als auch der Lupe erfolgen direkt durch Shader. Besonders gut ist dies erkennbar, wenn wie im letzten Teil des Videos die Verzeichnungsparameter verändert werden.
Die nächsten Teile dieser Serie führen Schrittweise von der physikalischen Realität über die mathematische Modellbildung bis zum Code der Shader.