Nach Oben

Im Interview: Kursleiter Alexander Johr

Shader-Programming, Virtual Reality und Inspiration

| Simon Zimmermann

Alexander Johr (31), Student des Masterstudiengangs Medien- und Spielekonzeption, ist seit Anfang des Sommersemesters 2020 offiziell Dozent an der Hochschule Harz. Er hat zwei Lehraufträge für den Bachelorstudiengang Medieninformatik: Shader-Programming und Virtual Reality. Bereits während seines Bachelorstudiums hielt er Tutorien für Programmierung und sammelte erste Erfahrungen. Durch die Tutorien und das Feedback seiner Studenten hat er gelernt, dass Lehren etwas ist, das ihm liegt und ihm Spaß macht.

„Das ist auch etwas, worüber ich ein bisschen denke, dass dies meine Superkraft ist. Ich kann, ohne etwas darüber gelesen zu haben, ziemlich genau einschätzen, wie viel die Studierenden von dem Gezeigten und Gesagten bereits verstanden haben. Ich versuche Bilder zu finden und das Bild, das ich von einem Sachverhalt in meinem Kopf habe, in die Köpfe der Studierende zu übertragen.“, erzählt Alexander.

Konsequent wäre der nächste Schritt: Professor werden. Im Interview beantwortet Alexander Fragen zu seinem Unterricht, an welchen Projekten er arbeitet und wer ihn inspiriert hat.

Lehrauftrag: Shader-Programming

Was kann sich der Laie unter „Shader-Programming“ vorstellen?

„Jeder, der schon mal ein Videospiel gespielt oder zumindest gesehen hat, sieht Shader in Aktion. So wird z.B. für jeden einzelnen Pixel ein kleines Programm ausgeführt, das entscheidet, welche Farbe der Pixel haben soll. Diese Programme nennt man Shader.

Shader beschränken sich aber nicht nur auf Pixel. Auch die Farbe und Position einzelner Bestandteile eines 3D-Modells können durch einen Shader manipuliert werden. Wenn z.B. der Wind durchs Gras weht, so wird die Krümmung der Grashalme ebenfalls über kleine Shader-Programme realisiert.

Wie den meisten Gamern bekannt ist, sind zwei Hauptbestandteile eines Rechners bzw. einer Konsole die CPU (= Central Processing Unit = Prozessor) und die GPU (= Graphics Processing Unit = Grafikprozessor). Shader-Programme laufen ausschließlich auf der GPU.

Dieser Grafikprozessor ist dafür optimiert, zahlreiche Programmausführungen solcher Shader-Programme gleichzeitig auszuführen.

Dafür ist es aber auch notwendig, dass die Komplexität dieser Programme sehr gering ist. Genau das macht aber auch die Programmierung solcher Shader interessant, denn die Programme sind kleiner als Programme die beispielsweise auf einer CPU laufen.

Besonders interessant ist die Entwicklung von außergewöhnlichen Grafik-Effekten. Die Darstellung eines Hologramms, die Bewegung von Wellen, ein Röntgenblick oder die Ausbreitung eines Echos, all das sind Beispiele für Shader-Programme.“

Was ist das Besondere für dich am Shader-Programming, bzw. was macht dir daran besonders Spaß?

„Zwei Dinge: Die Serendipität und die Visualität.

Was ich damit meine? Serendipität bezeichnet ein überraschendes Ergebnis, einen glücklichen Zufall von etwas ursprünglich nicht Gesuchtem.

Genau das ist bei der Shader-Programmierung häufig der Fall. Man hat einen Grafik-Effekt im Kopf und wendet mathematische Werkzeuge an. Auf dem Weg zum finalen Effekt entstehen neue, spannende Effekte, weil etwa die mathematische Formel falsch ist oder sie noch nicht das finale Ergebnis liefert. Doch in manchen Fällen findet man den daraus entstehenden Effekt hübscher, als den, den man eigentlich verfolgt hat. Das macht die Shader-Programmierung zu einem äußerst künstlerischen, kreativen Prozess.

Zweitens, die Visualität. Jede Änderung am Code ist mit einem visuellen Ergebnis verbunden. Das ist ungewöhnlich, da Programmierung häufig Ergebnisse in textueller Form auf einer Kommandozelle darstellt. Es macht Spaß, sich ein unerwartetes Ergebnis zu erklären. Dazu interpretiert man die Farbe des Pixels und versucht – wie ein Detektiv – diese Farbe und die mathematische Funktion, die ihr zugrunde liegt, in Verbindung bringen.“

Lehrauftrag: Virtual Reality

Welche Themen lehrst du in deinem Kurs „Virtual Reality?“

„Alles über Spieleprogrammierung und eben alles, was speziell die Entwicklung von Spielen für die virtuelle Realität betrifft. Dabei geht es vor allem darum, dass Spielern beim Spielen nicht übel wird. Das ist nämlich ein weit verbreitetes Phänomen beim Spielen mit einer VR-Brille“

Wie gehst du an die Kurse ran? (Oder anders gesagt, was ist dein Ziel/Wunsch beim Unterrichten?)

„Bei mir gibt es kein Skript. Alles, was ich lehre, zeige ich am praktischen Beispiel. Vor allem ist mir wichtig, dass dabei alle mitmachen. Ich kenne es aus meiner eigenen Erfahrung: Zuhören heißt, nicht verstehen. Verstehen heißt, nicht anwenden können.

Genau darauf zielen meine Kurse ab: Das Gelernte anwenden zu können. Dafür führe ich den Inhalt, den ich vermitteln möchte, zunächst vor. Dann sind die Studierenden dran, mir das Gezeigte nachzumachen. Dabei zeigt sich sehr schnell, ob das Gezeigte tatsächlich beim Studierenden angekommen ist. Anfangs ist das meist noch nicht der Fall. Die Studierenden sind gewohnt, dem Dozenten einfach zuzuhören. Doch mit Voranschreiten des Semesters kann ich den Studierenden immer mehr selbstständiges Arbeiten anvertrauen.

Ich habe auch schon mal Folien gezeigt und dabei Grundlagen erklärt. So sprach ich beispielsweise in einer Veranstaltung darüber, was das sogenannte ‚occlusion culling‘ ist. Doch genau das, was ich erwartet habe, trat ein. Die Studierenden wussten mit diesem Begriff am Ende doch nichts anzufangen. Wir hatten sogar ein Problem zu lösen, was ein Paradebeispiel für eine Lösung mit dieser Technologie war. Trotzdem fiel keinem der Studierenden auf, dass es da eine Technologie gibt, die ich vorgestellt habe, die genau dafür zugeschnitten ist.

Also mache ich es nach wie vor, wie ich es am besten kann: Mit praktischen Beispielen und gemeinsam mit den Studierenden.“

Wie alles anfing…

Weißt du noch, seit wann dir klar war, dass Programmierung dein Ding ist?

„Das war leider erst im Abitur. Ich wollte schon immer sehr gerne programmieren, aber ich hatte sehr große Angst davor. Mein Vater hat programmiert, aber er hatte auf meine interessierten Fragen hin, ob er mir etwas zeigen kann, mir einfach nur große Mengen Quellcode gezeigt, die mich natürlich abgeschreckt haben. Also, er hat es völlig falsch gemacht für einen interessierten Schüler: Ihn gleich mit dem ganzen Paket und der vollen Komplexität zu überwalzen. Und dann dachte ich: ‘Okay, das ist wie alles andere im Leben. Du kannst es nicht. Du hast nichts, was du kannst, was dir gut liegt.‘ Dieses Bild von mir hatte ich bis zum Abitur im Kopf.“

Wie sich herausstellen sollte, änderte sich dieses Bild während Alexanders Abiturs im Fach Wirtschaftsinformatik. Als alle das erste Mal programmiert haben, fand er heraus, dass ihm das analytische Denken Spaß macht und er sich auch in seiner Freizeit damit beschäftigen wollte. Seine erste Programmiersprache war C++.

Wie war das während des Abiturs für dich?

„Während dieser Zeit habe ich mir andere Sprachen angesehen. Ich habe dann angefangen in dem mittlerweile veralteten Spiele-Framework, dem XNA-Framework und mit C# – eine auch heute noch sehr populäre Sprache – Spieleprogrammierung zu üben. Und darüber kam ich dann sehr schnell in die Materie.

Ich weiß noch – und das ist eine wirklich signifikante Schlüsselszene -, ich saß vorm Computer und ich habe das Tutorial nicht verstanden. Ich habe Haltepunkte im Code gesetzt und ich habe gedacht, eigentlich müsste der Programmcode doch von oben nach unten ablaufen. Ich habe aber gemerkt, dass der Programmausführungspunkt ständig gesprungen ist. Und ich habe das nicht verstanden. Ich wollte das aber verstehen.

Ich saß vorm Computer und war mir in diesem Moment sicher, hier passiert gerade etwas Außergewöhnliches. Ich habe mir gesagt, ich gehe jetzt nicht eher schlafen, ehe ich das verstanden habe, bis ich verstanden habe, was „Klassen“ in der objektorientierten Programmierung sind. Und dann kam der Moment, wo es „Klick“ gemacht hat. Und da war der Break-Even-Point erreicht, von dort aus geht es dann steil nach oben, wo ich richtig Freude hatte, mir das selbst beizubringen und auch in der Schule der Überflieger zu sein, der dann mit Themen kam, auch in C++, die dann meine Lehrerin überfordert hatten.“

Projekte

Mit welchen Programming-/Game-Projekten beschäftigst du dich außerdem?

„Aktuell lerne ich vor Allem zwei neue Programmiersprachen und zwar mit Fokus auf Data-Science. Ich sehe mir die Programmiersprachen „Python“ und „R“ an, die man für Daten-Analysen verwendet. Das liegt daran, dass ich angefangen habe beim Thünen-Institut zu arbeiten, wo genau das meine Aufgabe ist: Skripte zu schreiben, zu dokumentieren, besser zu machen und anderen Mitarbeitern zu erklären.

Ein Gaming-Programming-Projekt war ein Spiel, das wir gemeinsam mit Japanern der Technischen Universität in Tokyo entwickelt haben. Unser Spiele-Prof. Dominik Wilhelm hat diese einzigartige Zusammenarbeit organisiert. Dort haben wir ein Spiel für Tabletts entwickelt, wo man mit seinen Fingern Linien zieht und aus diesen Linien Formen gebildet werden und je größer die Formen sind, je mehr Flächeninhalt sie haben, desto mehr Punkte bekommt man. Dieses Spiel konnte man zu zweit spielen und derjenige mit dem größten Flächeninhalt hat dann gewonnen. Das war sehr spannend, da einerseits eine Kollaboration mit Japanern, andererseits bot das dann auch den Teilnehmern, die besonders gute Spiele gemacht haben, die Möglichkeit nach Japan zu fliegen und die Spiele dort im Goethe-Institut auszustellen. Das war sehr spannend.“

Siehe hierzu auch den Blogeintrag zur Japanreise.

Das Spiel hieß übrigens „Point and Line to Space“. Die Idee kam von Kazuya Takahashi, dem japanischen Studierenden der Technischen Universität in Tokyo, erklärt Alexander.

Die Teamaufteilung für „Point and Line to Space“:

Kazuya Takahashi – Idee & Mockups

Kousuke Kobayashi – Sound & Musik

Kyohei Takabe – Programmierung der grafischen Nutzeroberfläche

Alexander Johr – Programmierung

„Das letzte Spiel, dass ich entwickelt habe, war im letzten Semester in der Spezialisierung: Game Development / Kollaboratives Studio.

Zu dem Spiel inspirierte mich die Parabel von Bertolt Brecht: ‚Wenn die Haifische Menschen wären.‘ Daran orientierte ich mich, während ich mit einer Gruppe von sechs Master-Studierenden ein Taktik-Spiel entwickelte, das in einer von einer Hai-Diktatur kontrollierten ozeanischen Welt spielt. Ein Team aus einer Handvoll Rebellen – wie etwa ein Delfin, Orca und ein Rochen – muss die individuellen Fähigkeiten jedes Mitglieds geschickt kombinieren, um im Spiel weiterzukommen. Die Spezialfähigkeit des Delfins ist es zum Beispiel, im Dunkeln zu sehen, indem er ein Echolot einsetzt. Wenn Sie es schaffen, stürzen sie den bösen Hai Hitler.

Die Entwicklung des Spiels war äußerst interessant, da die grafischen Effekte zur Visualisierung dieses Echolotes eine spannende Herausforderung darstellte.“

Das Spiel trägt den Namen: Operation Whalekyrie: Link zum ausführlicher Gameplay-Trailer.

Die Teamaufteilung für „Operation Whalekyrie“:

Lea Brock – Sound & Musik

Shanice Hofmann – Leveldesign & Story

Sainab Sakhizada – Menu Design

Jessica Scheffel – Trailererstellung (Link zum Trailer) & Projektmanagement

Christopher Thiel – 3D-Modelle

Alexander Johr – Programmierung

Special Thanks:

Helfer, auch wenn nicht Teil des Kurses:

Kristina Röpke – Voice Over für den Trailer, Konzeptart

Jacky The Moo (Künstlername) – UI Icon Design

Inspirationen

Auf die Frage, ob es Menschen gibt, die ihn besonders inspiriert haben, erzählt Alexander, dass er sich immer gerne Ted-Talks angehört hat und fasziniert davon war, wie ein Redner ein Thema über einen längeren Zeitraum argumentativ schlüssig und interessant transportieren konnte.

Ein Beispiel dafür ist für ihn die Psychologin Amy Cuddy. In einem Vortrag zum Thema „Power Posing“ erklärt sie den Zusammenhang zwischen einer expressiven Körperhaltung – „etwa wie ein sich auf die Brust schlagender Gorilla“ – und der damit einhergehenden Senkung des Angsthormons. Ein ähnliches Phänomen lässt sich beobachten, dass man sich glücklicher fühlt, wenn man lächelt.

Die Psychologin Kelly McGonigal liefert ein weiteres Beispiel für inspirierende Vorträge. Bei ihr geht es darum, wie man mit Stress und Nervosität umzugehen lernt und seinem Körper beibringt, dass Stress hilfreich sein kann. Für Alexander Johr war es ihre bildreiche Art ein Thema neu zu beleuchten, die ihn besonders fasziniert hat.

Auf Grund seiner Fähigkeit vergleichsweise trockene Themen wie Datenwissenschaften oder Analysen von Scan-Algorithmen (Siehe auch: Der Xerox-Bug) selbst über mehrere Stunden spannend vortragen zu können, hat auch der Datenwissenschaftler David Kriesel Alexander inspiriert.

Der Programmierer Kasper Verdich Lund entwickelte zusammen mit Lars Bak und Gilad Bracha die Programmiersprache Dart.

Alexander: „Als er (Kasper Verdich Lund) in Aarhus war, entwickelte er ein Tutorial, wie man in Dart programmiert. Und da hat er so schnell in die Tasten gehämmert und ohne Mühe Strukturen programmiert, das ich dachte: ‚Der wird gar nicht mehr von seinem Gehirn gebremst, also von der Idee, wie komme ich von dem Problem zur Lösung, er wird nur noch von seinen Fingern gebremst. Wenn er noch schneller tippen könnte, könnte er noch schneller programmieren.‘ Das hat mich fasziniert.“

Was den Lehrstil anbelangt, war Herr Wilhelm ihm eine Inspiration, da er einen sehr ähnlichen Lehrstil verfolgt, erklärt Alexander.

„Herr Wilhelm hat immer viel mit Beispielen gearbeitet, statt mit Folien und viel Text. Er hat Programmiersprachen in der Entwicklungsumgebung gezeigt, wie es funktioniert und immer durch praktische Anwendung. Das hat mich inspiriert, weil das mal was anderes war. Das hat mir dann das Gefühl gegeben, so ist es auch okay. Es ist nicht so, dass man sich dem Bild beugen muss, was man vom Lehren hat. Dass man, immer wenn man lehrt, ein Skript braucht. Man kann auch sagen, man nutzt kein Skript. Man zeigt es am praktischen Beispiel und vergewissert sich noch in der Stunde, ob die Studierenden es verstanden haben, weil man es gleich mit ihnen gemeinsam übt. Dann weiß man gleich ‚Okay, das, was ich beibringe, ist angekommen‘ und dieses Bild hat auch Herr Wilhelm in mir gefestigt.“

Alexander: „Wer mich auch sehr inspiriert hat fürs Lehren, war auf jeden Fall Prof. Dr. Zimmermann. Er hat eine Art und Weise, Dinge beizubringen, in dem er das mit Bildern zeigt.  Er hat beispielsweise in objektorientierter Programmierung mit C++ gezeigt, wie Pointer funktionieren. Pointer sind Zeiger auf den Arbeitsspeicher und als genau solche hat er Herr Zimmermann auch diese Pointer gezeichnet. Er hat ein Blatt Papier genommen, den Pointer mit einem Punkt dargestellt, daneben den Arbeitsspeicher gezeichnet und hat dann einen Pfeil von dem Pointer in den Arbeitsspeicher, wo die Variable verortet ist, gezogen. So hat er auch viele andere Sachverhalte anschaulich erklärt. Mit dieser Art und Weise war es auf einmal völlig leicht zu verstehen: Was bedeutet das ‚dereferenzieren‘ von einem Pointer, also das Zugreifen auf den Wert der Variable aus dem Arbeitsspeicher.

Und das hat mich unglaublich fasziniert, das habe ich zuvor bei niemandem beobachtet.“

Schlusswort

Wenn sich jemand, der völlig neu in dem Thema ist, mit Shader-Programming oder Virtual Reality informieren will: Was sind deine Tipps?

„Zu allererst: Nicht einschüchtern lassen. Am Anfang ist alles erstmal sehr viel und sehr gruselig und gibt einem immer das Gefühl von ‚Dafür bin ich zu blöd, das werde ich nie verstehen‘. Das war das, was ich immer gedacht habe. Da muss man Geduld haben, dass man irgendwann dahinter kommen wird. Klein anfangen. Tutorials sind auf jeden Fall gute Anlaufstellen. Wenn man zum Beispiel mit Programmierung für Shader anfangen möchte, schaut man sich auf „udemy.com“ um – einer Plattform für viele Tutorials, die aber nur als Kaufversion verfügbar sind – und könnte sich das Tutorial zu Shader-Programmierung in CG in Unity ansehen. Oder man kann sich mit Hilfe der Unity-Dokumentation Beispiele anschauen, wie Shader-Programmierung funktioniert. Und wie gesagt, nicht einschüchtern lassen, weil am Anfang ist das immer kompliziert.“

Schlagworte: , , , ,
%d Bloggern gefällt das: