 Okay, willkommen zu dem Vortrag. Bitte einen herzlichen Applaus für Magnus. Er hält uns den Vortrag über Hördimensionale, Gemetrie und Fraktale. Hallo. Wie ihr schon im Abstakt gelesen habt, geht es heute in dem Vortrag über Fraktale. Es ist aufgeteilt in drei Teile. Ich gehe mal davon aus, dass ihr so grobe Ideen habt, wie man projektive Gemetrie macht. Ich werde auch ein paar Formeln reinwerfen in den Vortrag. Ich rede über Fraktale-Flammen. Das ist ein Spezialfall von Interaktiven Funktionssystemen. Dann reden wir darüber, wie das im Spezialfall bei 4D aussieht. Das heißt, wenn ich von vier rede, dann rede ich von R hoch vier oder höhere. Zwischendurch schiebe ich immer mal ein paar Beispielprogramme ein auf den Folien. Wer will, kann das auch gerne gleich auf der Homepage mitverfolgen. Gut, ich fange gleich an. Ich zeige euch gleich, was ich euch nicht zeig werde. Das ist jetzt ein Würfel, jeder weiß, wie ein Würfel aussieht. Das ist jetzt das Zeug, was ich auslasse. Wir machen keine Vektor-Matrizen und Matrix-Matrix-Produkte. Wir machen kein Kreuzprodukt in 3D. Wir machen keine homogenen Koordinaten. Ich gehe mal davon aus, das wisst ihr alle. Ich denke mal, wir wissen alle, wie Rotationen aussehen und dass ihr mir auch vertraut und wie man sie mit Matrizen darstellt. Wir brauchen homogene Koordinaten in Erstlinie deswegen, weil wir viele Transformationen verwenden wollen. Dann gibt es noch die Look-At-Transformation in OpenGL, die lasse ich jetzt auch aus, aber wir werden sie erweitern. Dann gibt es noch die Perspektivischen-Transformation. Das ist ungefähr das, was wir vorher gesehen haben. Es ist einfach eine Möglichkeit, die Dimensionalität einer Szene runterzureduzieren. Zum Schluss, nachdem man Perspektivische-Transformationen verwendet hat, nimmt man dann Projekten. Das ist jetzt noch mal das Kreuzprodukt. Eigentlich wollte ich es ja auslassen, aber wir wollen einfach nur noch die Notation klären. Vertical-Linien geben wir uns die Matrix an. Wenn man Rotations-Matrizen hat, dann kann man die erweitern, damit man sie multiplizieren kann mit affinen Transformations-Matrizen. Einfach alles nullen setzen bis auf die Diagonale, dass es voneinander eins ist. Das ist jetzt eine Matrix, die wir auch auslassen werden. Ich will es eigentlich nur hierhin schmeißen, um euch ein bisschen zu beeindrucken. Das, was den OpenGL verwendet hat. Ihr glaubt mir jetzt einfach mal, dass wir Perspektivische Projektionen machen können in 4D. Das ist jetzt ein Tesserakt oder auch Hyper-Würfel genannt. Wir nehmen ein 4D-Objekt und rechnen das runter auf ein 3D-Objekt. Und das wiederum können wir dann auf ein 2D-Objekt reduzieren. Das seht ihr dann da. Alles, was wir gerade eben ausgelassen haben, ist das, was man dafür braucht. Eigentlich ist es noch viel schlimmer, weil Großprodukte existieren gar nicht in Dimensionen außerhalb 3. Eigentlich brauchen wir normalen Vektoren. Insofern, das ist das einfacher. Was sind also normalen Vektoren? In 3D hatten wir halt nur 2D-Objekte. Das ist das, was wir in 3D-Objekt haben. In 3D hatten wir halt ein Kreuzprodukt. Wir haben, wenn man 2 Vektoren nimmt, und das ist drauf anwendend, kriegt man halt einen senkrechten Vektor dazu. Das ist das, was wir hier aufbrauchen. In 4D kann man natürlich nicht einfach 2 multiplizieren und dann etwas ordentlicher zu kriegen, weil im Prinzip kriegt man eine Ebene. Das heißt, man kann jetzt aber 3 nehmen und mit der Determinante dieser Matrix ausrechnen, und dann hat man zwei Möglichkeiten, zwei Vektoren, die rauskommen, und das ist, wenn man das normalen Vektor problemlösen will. Man braucht normalerweise keinen Basisvektor, diesen braucht man dreifeln. Okay, wir können das auch in höheren Dimensionen machen, und es sieht gleich aus eigentlich, aber wir brauchen einfach, wenn wir in der Enddimensionen sind, brauchen wir einfach ein weniger, also in minus 1, sondern können wir alle anderen Koordinaten fixen. Und das, was ich sehe, das ist jetzt Teil der Formel, die wir später brauchen. Ich werde nicht die meisten Formeln erklären. Ihr könnt das später nachlesen, wenn ihr wollt. Aber was wir sonst noch brauchen, ist eine Anschau-Transformation. In 3 Dimensionen hat man zum Beispiel einen Punkt, an dem man schaut, und dann hat man seine Kamera, und dann muss man die Kamera dazu bringen, den Punkt anzuschauen. Wir müssen dafür eine Rotationsmatrix bauen, in dem wir die letzte Spalte der Matrix damit füllen, wo wir hergucken, und dann brauchen wir noch eine Rotations-Vektor. Wir brauchen eine Orientierungs-Vektor. In 4 Dimensionen braucht man 2 Orientierungs-Vektor, und wenn man OpenGL zum Beispiel hat, dann hat man eine Funktion, die das für einen macht. Und man muss hier 3 Vektoren füttern, wo man hinguckt, wo der Punkt ist, und noch einen Rotations-Vektor. In 4 Dimensionen braucht man halt 2 Rotations-Vektoren, die man noch fixen muss. Und dann decken wir den Normal- oder Cross-Produkt über diese Vektoren. Hier gibt es noch einen weiteren normalen Vektor. Das kann man in verschiedenen Papers nachschauen online. Das hier, aber warum findet man nicht? Das braucht man halt, wenn man in höhere Dimensionen geht. Sieht immer noch genauso aus. Wir haben noch 2 lessen Dimensionen, und dann haben wir noch 2 weniger, und dann haben wir noch mehr, wir haben noch Patrimoniert und die Pro구요 Modell und dann wir noch 2 ähnliches, wir haben noch 2 weniger. Wir haben zwei weniger als die Anzahl der Dimensionen, wir schieben die berechneten Sp times von rechts rein. Gut. nach links und rechts nach außen schaut, statt einfach nur geradeaus. Das ist relativ kompliziert, aber OpenGL macht das für uns eigentlich schon fast alles. Deswegen ist das relativ einfach. Wir brauchen eine relativ ähnliche Matrix wie im 3D-Fall. Hier hat man nur den Winkel, den das Auge geöffnet ist, der FOV. Die letzte Dimension sind im Prinzip fixiert, so dass man sich die um nicht kümmern muss. Die letzte Dimension ist quasi immer so eine Schießtiefbeschärfe. So eine höhere Dimension sieht es im Prinzip genauso aus, dass man einfach die gleiche Variante hat mit mehr ... Und jetzt brauchen wir noch eine Chau Matrix. Und dann nehmen wir das alles, tun das alles zusammen, und dann sind wir glücklich, denn wir haben nur noch eine Matrix, die wir mit einem Vektor multiplizieren müssen. Und es ist nicht so schlimm, es sind einfach ein paar Matrix-Multiplikationen. Und es ist eine Vier-Kreuz-Vier-Matrix, und es ist eine Vier-Kreuz-Vier-Matrix, und das ist eine Vier-Kreuz-Vier-Matrix. Und es ist nicht so schlecht, denn wir können die eine da expandieren zu einer Vier-Kreuz-Vier-Matrix, wie vorher erklärt, und dann ist es nicht so schlecht. Und 5D ist es nicht so schlimm, es ist eigentlich dasselbe. Wir müssen darüber nicht sagen. Und wenn wir jetzt, nachdem wir die Matrix-Vektor-Multiplikationen gemacht haben, müssen wir immer noch, also wir haben immer noch, wir haben jetzt eine homogene 4D-Matrix-Koordinaten, und wir haben Matrix-Vektoren und Multiplizierende, und dann kriegen wir 5D-Koordinaten zurück. Und an diesem Punkt, wir müssen den homogenen Teil raus tun, und dann müssen wir noch eine perspektive Transformation machen. Und dann müssen wir das zweimal machen, dann kommen wir in den dreidimensionalen Vektor zurück, und jetzt haben wir den dreidimensionalen Vektor, wir machen das nochmal, und dann kommen wir mit dem zweidimensionalen zurück, und jetzt die erste, und jetzt zeige ich, wie man das gemacht hat, oder zumindest wie es aussieht. Und jetzt haben wir das, was wir vorher gesehen haben, vierdimensionalen Würfel in zweidimensionalen, oder jetzt erst mal in dreidimensionalen, in dreidimensionalen. Oh, und jetzt vertehen wir ihn in vierdimensionen. Und jetzt ... dass mit einer 3D-Objekt in 4D machen würde, würde man das quasi von innen nach außen umstülpen. So, jetzt machen wir das Ganze in 5D. Nach 5D wird es dann langsam verwirrend. Also, wenn wir beim Wasser bei 4 auf, bleibt man noch ein bisschen mehr bei Verstand. Ich habe euch versprochen, dass wir affine eterierte Funktionssysteme machen, ein IFS, ein eteriertes Funktionssystem, die Idee ist, dass man halt zwei, drei, vier Funktionen hat, und einen Satzreaktoren, und wir multiplizieren die jetzt alle aus, und wir machen das rekursiv, dann summiert man es auf. Das ist aus einem fractalen Flammenpapier. Wir machen das jetzt nicht bis ins Endliche, weil sonst sieht man nie was. Es würde nie aufhören. Aber darum ging es in dem fractalen Flammenpapier. Also, im Prinzip könnte man irgendeine Funktion wählen, aber eine simple wäre eine affine Transformation. Also, im Prinzip, wir nehmen einen Punkt, wir machen eine Translation, und dann routieren wir ihn noch. Normal, machen wir ein Chaos-Spiel, um das zu renden. Aber in drei oder vier D-Funktionen funktioniert es nicht, weil man zu viele Punkte braucht. In dem Fall kann man ein hinreichend unterteiltes Primitiv. Okay, sagen wir mal, wir machen eine Zierpinski-Schlange. Das sind drei Funktionen. Das kann man jetzt iterieren. Das machen wir jetzt ein paar Mal. Und du kriegst ein immer schöneres und immer schärferes Bild raus. Geht das in drei D? Klar. Alles gar kein Problem, können wir alles machen. Also, ich nehme jetzt mal einfach eine drei D Kurve. Die sind jetzt zufallsgeneriert mit einem bestimmten Sieg. Jetzt machen wir das Ganze noch in vier D und stülpen es um. Okay, also ihr seht, jetzt hier stülpt sich es gerade. Und die benutzt einen speziellen Funktionsaufruf, den Variationsaufruf, und der ist in dem Paper da definiert, und das könnt ihr nachlesen, wenn ihr wollt, weil das ist toll. Und die Variationen sehen ungefähr so aus. Ihr habt hier der Affin-Transformation, und ihr wendet also auch ein paar Variationsfunktionen an, die wir im Anhang definieren. Die sind kanonisch. Und die sehen ungefähr so aus. Wir können zum Beispiel eine Funktion machen, die nichts macht. Wir können eine Funktion, die Sinus anwendet, darauf. Wir können eine Sphärische Transformation haben, und alle möglichen lustigen Sachen. Und die haben wir über ein paar tolle Sachen nachgedacht. Und was man jetzt tut ist, man nimmt eine Anzahl von diesen Variationen, und dann nimmt man die zusammen. Und dann, dann nimmt man Teile von diesen Transformationen, und dann tut man die zusammen. Zum Beispiel eine halbesphärische, und dann nimmt man den Viertel von der Cosinus, und dann tut man das alles zusammen. Und jetzt kann man nach Transformationen machen, und man nimmt nochmal das Ganze von vorne und tut das nochmal. Und da hat man auch finale Transformationen. Und dann nimmt man das Ganze nochmal und macht das nochmal. Okay, und das sieht ganz sehr ganz lustig aus. Das, was man über das Chaos Spiel vorher wissen muss, wenn man das Chaos Spiel macht, wie vorher beschrieben, dann kriegt man einfach so ein schwarz-weiß Bild. Und es ist nicht so toll, das sieht nicht so toll aus. Man kann es ein bisschen verbessern, wenn man das einfach öfter anwendet, und dann bekommt man ein besseres Bild. Und es ist noch viel besser, wenn man ein Logrythmus nimmt, um das zu tun. Man muss es dann halt ganz oft verwenden, und dann hat man ganz viel Zufall, Dings, Zufall. Man muss dann auch noch ein paar kleine Sachen rausgeletten, und dann kann man noch eine Farbkarte darauf anwenden. Jede Funktion bekommt einen Index auf der Farbkarte, und dann tut man das alles zusammen, und dann kriegt man ganz tolle Bilder. Und dann bekommt man ganz tolle Sachen. Okay, jetzt. Dieser Algorithmus funktioniert wirklich nur in 2D. Es sieht zwar 3D aus, aber es ist es nicht. Können wir das in 3D machen? Also wir können das Chaos Spiel nicht machen, weil eines einfach der Speicher fehlt. Aber wir können aber eine Diskrete-Variante davon versuchen. Ich hatte wirklich viel Spaß mit diesem Programm. Ich hoffe, es riecht jetzt nicht einfach ab. Wir brauchen mehr Präzision, ein bisschen größer. Das sieht schon ziemlich cool aus. Es ist schon 4D. Okay, aber wir wollen erst mal mit dem 3D-Fall anfangen. Wir haben immer noch diesen Inversionseffekt, das umstüllt. Es ist jetzt zufällig, aber ihr seht, dass es jetzt 2D ist, weil ich eine Ebene genommen habe und es unterteilt habe. Wenn man die Transformation anwendet, dann muss man einfach nur bestimmte von diesen Variationsfunktionen anwenden und dann bekommt man die. Okay, der coole Teil bei dem fractalen Flammen-Algorithmus ist aber... Es stellt sich raus, dass es total einfach ist, wenn man diesen Logorithmus in den Pixel-Shader macht. Es klingt ziemlich wirr, aber es funktioniert in einer Echtzeit relativ gut. Es ist jetzt nicht das Schönste, was ich je gemacht habe, aber... Es ist immer noch ziemlich beeindruckend, dass es ziemlich glatt aussieht. Jetzt machen wir mal ein paar zufällige Farben dazu. Es gibt wieder einen Blau, die werden alle zusammengerechnet in den Pixel-Shader. Das mag ich jetzt eigentlich ziemlich gern. Okay, das ist ziemlich gut. Jetzt kommt es halt auch an, von wo aus man drauf schaut. Der Pixel-Shader hat die Eigenschaft, wenn die Farben so rumspielen, dann liegt das an den Pixel-Shader. Das ist quasi wieder das Umstülpen der Dimension. Man sieht hier diesen Nebel-Effekt durch diese 4D-Umstülpung. Es ist ziemlich heiße Bilder, die wir da haben. Dieser Code ist total Open Source. Ihr könnt es auf GitHub sehen, ihr könnt damit rumspielen. Ihr könnt den Code natürlich anschauen. Das Problem ist, dass WebGL-Schwebende-Texturen nicht unterstützt insofern. Es funktioniert im Prinzip, aber man kann es nicht so gut sehen, leider. Das ist das Programm, wenn es euch interessiert. Hier ist jetzt ein Paper, in dem es wirklich detailiert erklärt wird. Und mein Twitter dazu. Das hier unten ist das Original-Paper über fraktale Flammen. Kann ich nur empfehlen, die haben richtig coole Sachen drin stehen. Und natürlich die Bilder kommen aus French. Danke schön, Magnus. Sehr interessanter Vortrag. Ich mag fraktale. Wenn ihr unbedingt rausgehen müsst, dann seid bitte still. Bitte nicht sprechen, wenn ihr rausgeht. Einfach leise rausgehen. Gibt es Fragen vom Internet? Erste Frage aus dem Internet, bitte. Audioangel, please turn on. Audioangel is running. Okay, fangen wir einfach hier an. Hallo, danke für den Vortrag. Ich habe mich gefragt, die Projektions-Transformation, die du erklärt hast. Hast du angenommen, dass die letzte Dimension 1 ist? Also es wird die Tiefe sein. Und dann hast du angenommen, dass der Rest einfach kollerviert. Was passiert, wenn du das nicht annimmst? Oder wenn sich irgendetwas ändert? Denn in der Projektion gehst du davon aus, wie die Projektion gemacht ist zu 3D. Richtig, wenn ich das richtig verstanden habe. Okay, das habe ich mir noch gar nicht genauso anschaut, aber... Was ich eigentlich meine, ist, es könnte perzeptionell Unterschied sein. Ja, die an sich könnte anders sein. Man könnte das durchaus erweitern auf 4D oder 5D in OpenGL. Ich habe es noch nicht ausprobiert, aber es wäre eigentlich ziemlich cool, das hat man gemacht. Okay, signal Angel, do you have a microphone? Yes, I have. Okay, please ask away. Standard User vom IRC. Diese Resolation ist die, kann man die anwenden, auf die 3D-virtuelle Simulation für virtuelle Realität und kann man das auch mit 450 Dimens in den Allfaktan machen. Ich bin ziemlich sicher, wenn man mal so ein VR-Headset hat, dass man damit, wenn man da drinsteht und das alles vor sich hat, würde das die Erfahrung, die man damit macht, wirklich gigantisch verbessern noch. Ich habe es natürlich noch nicht ausprobiert, aber wenn jemand etwas will, ich bin der erste, der es ausprobiert. Okay, let's go back to microphone number three, please. Hallo, noch eine kurze Frage. Mir ist aufgefallen, dass sogar für die multidimensionale Fall, hast du die 2D-Primitiven genommen als Primitiven, kann man höhere Dimensionale Primitiven benutzen? Klar wäre das möglich, das ist überhaupt kein Problem. Wie du gesagt hast, ich verwende immer noch 2D-Primitiven. Ich habe das dadurch gemacht, dass man quasi durchgucken kann, weil wenn man mit einem 3D-Objekt mit 4D-Augen schaut, kann man quasi durchsehen. Es wäre durchaus möglich, klar, dass man einfach höhere Dimensionale Primitiven nimmt, aber es ist viel einfacher zu verstehen und darüber zu reden, wenn man 2D-Primitiven hat. Gibt es noch mehr Fragen aus dem Internet? Okay, off the way. Denkst du, dass ein Spiel in vier oder mehr Dimensionalen möglich wäre und dass das spielbar wäre? Es gibt sogar schon Spiele mit wenigstens vier Dimensionen und höher. Ich erinnere mich auf jeden Fall an 4D-Maze und eine 4D-Variante von Rubik's Cube. Mit den Rubik's Würfel. Ich wäre extrem beeindruckt, wenn jemand die 4D-Variante lösen kann, als ich damals so nachgedacht habe. Die Transformationen sind echt wahnsinnig cool. Ich würde ihn gerne verwenden, das hat man schon gesehen, das hat man noch nicht gesehen und dass man da einen 4D-Inversionen dran macht. Und ich würde wahnsinnig gerne ein Spiel sehen, was sowas verwendet und es gibt wohl auch welche, aber zu wenig. Gibt es noch mehr Internet-Fragen? Nein, noch nicht. Noch mal Mikrofon. Danke für deinen Vortrag. Ich habe eine Frage über nicht nur die Fraktale zu benutzen, sondern wir könnten auch 4D- oder Indimensionale Datensätze reintun. Funktioniert das? Und wie sieht das aus? Was würde man dann für den Trick benutzen, um Transparenz zu bekommen? Also am Ende habe ich eigentlich nur einen Transfer der Oberfläche gemacht. Aber in höheren Dimensionen, um Datensätze zu visualisieren. Wenn man so Sachen anschaut, wo man solche Visualisierungen macht, anhand von Kategorien, wenn man zum Beispiel so einen Grafen malen will, wäre es relativ einfach, einen planaren Grafen zu machen in höheren Dimensionen. Habe ich da aber auch noch nicht gesehen und ich würde es wahnsinnig gerne sehen. Und vor die 4D-Rotationen sind da sehr, sehr schwierig zu verstehen. Und die Idee ist ja eigentlich, dass man die Visualisierungen nutzt, damit man es einfacher sieht und einfacher versteht. Und ich bin nicht sicher, ob das hier funktioniert, auch wenn es wahnsinnig cool wäre. Wir haben noch Zeit für eine oder zwei Fragen. Das andere Mikrofon, Mikrofon Nummer 2. Danke für den Vortrag. Ich habe ein bisschen theoretische Frage. Du hast uns gesagt, dass es 47 Variationen von der ganzen Sache gibt. Ich habe da noch nie darüber was gehört über diese Variationen. Also wie das haben die für Eigenschaften? Das sind eigentlich nur definiert an dem Ende dieses Papers, was ich referenziert habe, dieses Roktala-Flammen-Algorithmen-Paper. Die sind ganz speziell aufgelistet. Die einzige gemeinschaftliche Eigenschaft, die sie haben, ist, dass sie alle 2D sind. Manche kann man erweitern, manche kann man nicht. Danke schön. Noch eine letzte Frage? Danke, ja. Keine Frage, nur eine kleine Information. Eine kleine Information, über die es für Dimensionale gibt. Es gibt ein Spiel, das im Internet rumgegangen ist. Und ich weiß nicht, wie man das ganz ausspricht. Du kannst nachschauen, was man in dem Spiel machen kann. Du hast eine dreidimensionale Umgebung. Und man kann das in 3D-Sin anschauen. Und dann kommt man an eine Wand. Und man kann in 3D-Sin nicht um die Wand rumkommen. Aber man kann das aus einem anderen Blickwinkel anschauen. Und dann kann man in 4D-Sin um diese Wand rumlaufen. Man wechselt sozusagen zu einer anderen Dimension. Und eine Menge Spiele machen das. Aber dieses Spiel macht das wirklich mit der richtigen Matte. Ich habe das gesehen. Ich wollte das unbedingt ausprobieren. Aber ich habe es daran noch nicht geschafft. Das was Teil ist, dass es funktioniert. Weil wenn du die 4D-Projektionen machst, hast du auch nur eine 3D-Welt. Das macht total Sinn, dass man an Teile der Welt einfach rumdreht. Und wäre wirklich cool, habe ich aber leider noch nicht gesehen, aber ich will es ausprobieren. Lass uns nochmal den Vortragenden danken.