3 Punkte von GN⁺ 2024-05-18 | 1 Kommentare | Auf WhatsApp teilen
  • Ausgehend vom falschen Pi-Wert im Doom-Quellcode wird untersucht, wie sich Rendering und Raumgefühl eines Ego-Shooters verändern, wenn man mathematische Konstanten absichtlich weiter verfälscht
  • Spielgrafik stützt sich nicht nur auf Pi, sondern auch auf Trigonometrie und verschiedene mathematische Verfahren; schon kleine mathematische Änderungen können daher beeinflussen, wie man die Welt sieht und sich darin bewegt
  • Doom ist ein klassischer FPS, dessen Quellcode 1999 unter der GPL veröffentlicht wurde, und konnte deshalb als Experimentierobjekt dienen, um Pi sowie trigonometrische Funktionen und Konstanten zu verändern
  • Das Experiment beleuchtet auch Optimierungstechniken, mit denen Doom auf der damaligen Hardware gut lief, und bietet eine Anleitung, um eine Version mit falscher Mathematik selbst zu kompilieren
  • Es wird untersucht, ob nicht-euklidische Geometrie in Spielen neue räumliche Erfahrungen schaffen kann; außerdem werden andere Spiele mit falschen Pi-Werten und öffentliche Quellcode-Repositories verlinkt

Dooms Mathematik absichtlich aus dem Tritt bringen

  • Pi gilt als Konstante mit festem Wert, doch im Doom-Quellcode wird ein falscher Pi-Wert verwendet
  • Grafik-Rendering hängt nicht nur von Pi ab, sondern auch von Trigonometrie und verschiedenen mathematischen Verfahren
  • Das Experiment prüft, wie sich das Spiel verändert, wenn der Pi-Wert im Doom-Quellcode noch ungenauer gemacht wird
  • Auch andere trigonometrische Funktionen und Konstanten werden verändert, um zu sehen, wie das Verständnis und das Bewegungsgefühl in der vertrauten virtuellen Welt ins Wanken geraten

Doom-Quellcode und Umfang des Experiments

  • Doom ist ein bekannter klassischer Ego-Shooter
  • Der Doom-Quellcode wurde 1999 unter der GPL veröffentlicht
  • Das Experiment umfasst unter anderem:
    • Änderung des Pi-Werts auf einen noch falscheren Wert
    • Änderung anderer trigonometrischer Funktionen auf falsche Werte
    • Ungenaue Änderung zugehöriger mathematischer Konstanten

Möglichkeiten nicht-euklidischer Spiele

  • Wenn man die Mathematik verändert, können sich auch die Struktur des virtuellen Raums und das Bewegungsgefühl ändern, die Spieler bisher kannten
  • Es wird untersucht, ob solche Veränderungen zu interessanten Spielmöglichkeiten auf Basis nicht-euklidischer Geometrie führen können

Performance-Optimierung und selbst ausführen

  • Kurz behandelt werden auch Optimierungstechniken, mit denen Doom auf der damaligen Hardware gut lief
  • Gegen Ende des Vortrags gibt es eine Anleitung, um die Doom-Version mit falscher Mathematik selbst zu kompilieren

Weiterführende Materialien

  • Es werden auch Links zu anderen Spielen mit falschen Pi-Werten und zu öffentlichen Quellcode-Repositories bereitgestellt
  • Das Vortragsvideo ist als MCH2022-Inhalt auf media.ccc.de verfügbar

1 Kommentare

 
GN⁺ 2024-05-18
Meinungen auf Hacker News
  • Im klassischen Duke Nukem 3D gab es auch so ein Beispiel: das Level „Lunatic Fringe“ von Richard „Levelord“ Gray.
    https://dukenukem.fandom.com/wiki/Lunatic_Fringe
    Dieses Level hatte außen einen kreisförmigen Korridor, der zwei vollständige Runden drehte, ohne sich selbst zu schneiden, und nutzte die damals wegweisende Fähigkeit der Build-Engine, Bereiche über raumbasierte Verbindungen zu trennen. Diese Funktion wurde auch für die „Room-over-Room“-Technik verwendet.
    Im Multiplayer machte das Spaß, und die optische Täuschung hielt ziemlich gut. Wenn ich mich richtig erinnere, hatte der zentrale Raum vier Eingänge, aber bei jeder Runde außen herum begegnete man nur zwei davon.
    Beim Experimentieren mit der Engine habe ich mit dieser Technik auch einmal ein Spielzeug-Level gebaut, das das Rätsel löste, „3 Häuser und 3 Versorgungswerke zu verbinden, ohne dass sich Linien kreuzen“.

    • Ich weiß nicht, in welchem Sinn Duke Nukem ein „Beispiel dafür“ sein soll. Bei Duke ist es intern ein konsistentes Programmverhalten, während das hier eher zufällige Fehler durch eine willkürliche Änderung im Quellcode sind.
      Duke könnte so etwas wie nichteuklidische Geometrie sein, aber diese Pi-Änderung in Doom hat wenig mit Geometrie zu tun und wirkt eher wie „Garbage in, garbage out“.
    • Wenn es um die „damals wegweisende Room-over-Room-Technik“ geht: Bungies Marathon konnte das schon 1994 und zeigte es in der Deathmatch-Map 5-D Space[1].
      Bei überlappenden Sektoren ging im Grunde nur Doom kaputt.
      [1] https://www.lhowon.org/level/marathon/30
    • Vor langer Zeit habe ich eine kleine Engine mit so einer Funktion gebaut. Damals kannte ich die Build-Engine nicht und teilte die Welt in konvexe Sektoren auf, erlaubte aber statt eines BSP-Baums beliebige Links, also Portale. Das Rendering lief von vorn nach hinten und schnitt an den Portalgrenzen ab.
      Wenn man das Innere einer konvexen Form rasterisieren kann, kann man auch eine Sektor-Portal-Welt rasterisieren: Man markiert eine bestimmte Fläche als Portal, setzt den Bereich, in dem diese Fläche sichtbar wäre, als Clipping-Region oder Stencil Buffer und rendert dann mit der passenden Transformation aus den Portaldaten und der Sektor-ID auf der anderen Seite den Sektor dahinter.
      Kollisionserkennung durch Portale hindurch ist viel schwieriger als das Rendering hinter Portalen.
    • Das Room-over-Room, das spätere Build-Spiele implementierten, erfordert normalerweise keine solchen überlappenden Sektoren. Es ist eine Erweiterung der Methode für schwimmbares Wasser: Die Engine rendert statt Boden oder Decke einen anderen Sektor.
      Lunatic Fringe ist ein Beispiel, das unmögliche Geometrie in Build direkt vorführt, aber Duke3D-Maps enthalten noch viel mehr sich schneidende Geometrie. In Doom kann man für solche Strukturen keinen BSP-Baum bauen, und da Spieler oder Monster nur X/Y-Koordinaten verfolgen, ist das natürlich unmöglich.
    • Es gibt ein interessantes VR-Spiel namens Tea For God. Innerhalb der realen Spielfläche erzeugt es jedes Mal, wenn man um eine Ecke geht oder einen Lift nimmt, geschickt neue Korridore und Räume, sodass die Illusion entsteht, man befinde sich an einem riesigen Ort, obwohl man denselben Raum nicht verlässt. Das funktioniert ohne Joystick oder Teleportation.
  • Ich las gerade Poul Andersons Klassiker Operation Chaos.
    https://en.wikipedia.org/wiki/Operation_Chaos_(novel)
    Er spielt in einer Parallelwelt, in der Magie real ist und sich zusammen mit der Wissenschaft rasant weiterentwickelt. Edwin Land erfindet zum Beispiel ein Gerät, das mithilfe von Polarisation Werwölfe ohne Mondlicht verwandelt.
    Das Kind der Hauptfiguren wird entführt und in die Hölle gebracht, und sie erfahren, dass das Militär 20 Jahre zuvor versucht hatte, die Hölle zu untersuchen, woraufhin alle wahnsinnig wurden. Der Gegenspieler lässt den Hinweis fallen, dass sich die Raumzeitgeometrie der Hölle von unserer unterscheidet und man daher zu dem Moment zurückkehren kann, in dem das Kind dort ankommt, um es zurückzuholen.
    Allein aus diesem Hinweis erkennen die Wissenschaftler, dass die Geometrie der Hölle nichteuklidisch ist, und berechnen Zauber, um sicher hineinzukommen, dort zu überleben und zurückzukehren. Um den Weg zu finden, beten sie um die Hilfe zweier Geometer des 19. Jahrhunderts, von denen einer ein Heiliger ist.

    • Die Raumzeitgeometrie unserer Welt ist ebenfalls nicht euklidisch, nicht einmal riemannsch. Operation Chaos wirkt eher chaotisch als wissenschaftlich.
      Die Werke von Poul Anderson, die ich gelesen habe, darunter auch das hervorragende High Crusade, sind ähnlich: Er legt nicht viel Wert auf den wissenschaftlichen Anstrich und prescht lieber grob voran.
      Als anderes Werk über nichteuklidische Geometrie ist mir Christopher Priests Inverted World in guter Erinnerung geblieben.
    • Das mag abgedroschen klingen, und vielleicht ist es das auch, aber ich weiß nicht, warum heutzutage so wenige kreative Romane erscheinen.
    • Jack Vances hervorragende Sammlung Tales of the Dying Earth ist ebenfalls einen Blick wert. Darin kommen Magie/Wissenschaft und Dämonendimensionen gemeinsam vor.
    • Operation Chaos mochte ich, aber die deutlich später erschienene Fortsetzung war enttäuschend.
  • John Carmack mag sich bei der 10. Nachkommastelle von Pi falsch erinnert haben, aber es wäre gut, wenn alle in ihrer Codebase nach 84.600 suchen und prüfen, ob jemand die Anzahl der Sekunden pro Tag vertippt hat.
    Das kommt überraschend häufig vor und ist eine Lektion dazu, ob man Konstanten direkt ins Programm schreiben oder lieber die Werte verwenden sollte, die bereits in der Standardbibliothek der Programmiersprache vorhanden sind.

  • In der Praxis werden Grafik und Bewegung erst seltsam und am Ende unspielbar. Statt das nicht-euklidisches Doom zu nennen, scheint „die Folge davon, an den Konstanten des Universums herumzuschrauben“ passender.
    Bei echtem nicht-euklidischem Doom hätte ich eher so etwas erwartet: https://youtu.be/kEB11PQ9Eo8?si=0HNlpGFBii2AIK1n

    • Wenn man etwas pingelig ist, verwendet auch dieses Video den Begriff nicht-euklidisch falsch. Die Leute von HyperRogue haben einige Videos erstellt, die echte nicht-euklidische Geometrie zeigen.
      https://youtu.be/yqUv2JO2BCs?si=AutaqS5unvT7cDjw
      Wenn man sich in dem Doom-Video die seltsamen Geometrieeffekte ansieht, etwa dass Objekte beim Vorwärtslaufen seitlich zu rutschen scheinen, wirkt es bis zu einem gewissen Grad vertretbar, dieses Doom nicht-euklidisch zu nennen.
    • Auch das ist nicht das, was nicht-euklidisch bedeutet. Es ist einfach eine gewöhnliche 3D-Welt mit Portalen. Ego-Shooter-Engines jener Zeit verbanden Räume üblicherweise über Türöffnungen, also Portale, um verdeckte Bereiche zu entfernen.
      Man konnte normale Geometrie darstellen, aber die Geometrie musste in keiner Weise sinnvoll sein, und beliebige Verbindungen zwischen Räumen waren ebenfalls erlaubt. Ich will nicht kleinlich sein, aber das ist ein verbreitetes Missverständnis.
      Für echte nicht-euklidische Sachen empfehle ich die Arbeiten von ZenoRogue. Zum Beispiel ein einfaches Spiel mit Nil-Geometrie[1], einen riesigen Bosskampf in einem Roguelike mit nicht-euklidischer Welt[2] oder allgemeine geometrische Merkwürdigkeiten[3]. Man kann sich im Grunde irgendetwas von ihnen ansehen.
      [1] https://m.youtube.com/watch?v=gejRg_q70EA&pp=ygUJemVub3JvZ3V...
      [2] https://m.youtube.com/watch?v=jcnXI8IArRI&pp=ygUJemVub3JvZ3V...
      [3] https://m.youtube.com/watch?v=yqUv2JO2BCs&pp=ygUJemVub3JvZ3V...
    • Ich bin überrascht, dass Antichamber noch nicht erwähnt wurde. Das war ein großartiges Spiel, das aus einem ähnlichen Konzept echte Rätsel gemacht hat.
      Wenn ich es mir recht überlege, ist inzwischen genug Zeit vergangen, dass es wieder Spaß machen dürfte.
    • Das sieht nach Portalen aus. Ego-Shooter jener Zeit verbanden Räume im Grunde über Türöffnungen, also Portale, und entfernten so verdeckte Bereiche.
      Für die Darstellung normaler Geometrie war das kein Problem, aber es gab keine Bedingung, dass die Geometrie zwingend Sinn ergeben musste, und Räume konnten beliebig miteinander verbunden werden.
    • Genau so etwas hatte ich auch erwartet. Hier ist eine weitere nicht-euklidische Umsetzung, in der auch noch ein paar andere neue Ideen stecken.
      https://www.youtube.com/watch?v=tl40xidKF-4
  • Doom ist keine Simulation, daher ist das Ändern einer einzelnen Konstante kein gutes Beispiel für irgendetwas.
    Es läuft eher darauf hinaus, ein paar Routinen kaputtzumachen, weshalb die meisten Änderungen das Spiel unspielbar machen.

    • Ich verstehe nicht ganz, warum das interessant sein soll. Wenn man eine Konstante auf eine falsche Zahl ändert, entstehen natürlich seltsames Verhalten oder Fehler. Was sollte sonst passieren? Das seltsame Verhalten wirkt auch nicht besonders; ich weiß nicht, was mir entgeht.
  • Man kann den Quellcode seines bevorzugten Konsolen-Emulators nehmen und beliebige Gleitkommafehler einbauen oder die Bedeutung einiger Branch-Instruktionen umdrehen. Je älter das Spiel, desto höher die Wahrscheinlichkeit, dass es noch läuft, und desto größer auch die Chance, dass es wie ein schlechter Halluzinationstrip aussieht.

    • Vor langer Zeit gab es ein Tool für N64-Emulatoren, das genau so etwas machte. Als ich es ausprobierte, war es eine Weile lustig, stürzte aber erwartungsgemäß oft ab.
      Es gab auch Glitch-Art-Projekte, bei denen bestimmte Abschnitte bekannter Bild- und Videodateien beschädigt wurden, um etwas Neues zu erzeugen. Ich würde beides gern wiederfinden, finde es aber nicht mehr.
  • Marathon 1 (1994) unterstützte zwar nichteuklidische Räume, nutzte sie aber nur selten. Man spielt sich durch ein ganzes Spiel mit mehreren Leveln samt Karte, und nur in ein oder zwei Leveln tauchen unmögliche Räume auf — ohne dass das Spiel davor warnt oder darauf hinweist, dass so etwas möglich ist.
    Vielleicht war es deshalb der beste Ort für ein Easter Egg, den man im Spiel finden konnte.
    Ein Demo-Video habe ich auch gefunden: https://www.reddit.com/r/Marathon/comments/vclu55/probably_n...

  • Die letzte Frage lautet: „Was ist der maximale Wert von pi, der noch spielbar ist und nicht abstürzt?“ Der Grund, warum es bei pi = 4 zu einem Segmentation Fault kommt, dürfte sein, dass einige Zugriffe auf Lookup-Tabellen über das Tabellenende hinausgehen. Falls das stimmt, liegt der maximal spielbare Wert wahrscheinlich nur ganz geringfügig über pi selbst.

  • Ich hätte mir gewünscht, dass dieses Video stärker auf die Spielmechanik eingeht und genauer erklärt, warum die Änderung von Pi auf diese Weise Probleme verursacht hat.

  • Ich frage mich, ob dieses Experiment im erwähnten Raytracing-Doom interessanter wäre. Das Ergebnis des Hackens einer Konstante in der Rasterisierungstechnik entsprach ziemlich genau den Erwartungen. Mit Raytracing könnten aber spannendere Ergebnisse herauskommen.