- A partir del valor incorrecto de pi en el código fuente de Doom, explora cómo cambian el renderizado y la percepción espacial de un juego de disparos en primera persona cuando se alteran deliberadamente aún más las constantes matemáticas
- Los gráficos de videojuegos dependen no solo de pi, sino también de la trigonometría y de varias técnicas matemáticas, por lo que incluso pequeños cambios matemáticos pueden afectar la forma en que se ve el mundo y se navega por él
- Doom es un FPS clásico cuyo código fuente fue publicado bajo GPL en 1999, por lo que pudo usarse como sujeto de experimentos para modificar pi, funciones trigonométricas y constantes
- El experimento también repasa las técnicas de optimización que hicieron que Doom funcionara bien en el hardware de la época, y ofrece instrucciones para compilar directamente la versión con matemáticas incorrectas
- Examina si la geometría no euclidiana puede crear nuevas experiencias espaciales dentro de un juego, y también enlaza otros juegos que usan valores incorrectos de pi y repositorios públicos de código fuente
Desajustar deliberadamente las matemáticas de Doom
- Pi se conoce como una constante con un valor fijo, pero el código fuente de Doom usa un valor incorrecto de pi
- El renderizado de gráficos depende no solo de pi, sino también de la trigonometría y de varias técnicas matemáticas
- El experimento verifica cómo cambia el juego si se modifica el valor de pi en el código fuente de Doom para hacerlo aún más impreciso
- Al cambiar también otras funciones trigonométricas y constantes, observa cómo se altera la sensación de comprender y desplazarse por un mundo virtual familiar
Código fuente de Doom y alcance del experimento
- Doom es un conocido juego de disparos en primera persona clásico
- El código fuente de Doom fue publicado bajo GPL en 1999
- El experimento incluye lo siguiente:
- Cambiar el valor de pi por uno aún más incorrecto
- Cambiar otras funciones trigonométricas por valores incorrectos
- Cambiar constantes matemáticas relacionadas por valores imprecisos
Posibilidades de juegos no euclidianos
- Si se cambian las matemáticas, también puede cambiar la estructura del espacio virtual que el jugador conocía y la sensación de desplazamiento
- Examina si estos cambios pueden conducir a posibilidades interesantes de juego basadas en geometría no euclidiana
Optimización de rendimiento y ejecución directa
- También aborda brevemente las técnicas de optimización que hicieron que Doom corriera bien en el hardware de la época
- Al final de la charla, se ofrecen instrucciones para compilar directamente la versión de Doom con matemáticas incorrectas
Material relacionado
- También se proporcionan enlaces a otros juegos que usan valores incorrectos de pi y a repositorios públicos de código fuente
- El video de la charla está disponible como contenido de MCH2022 en media.ccc.de
1 comentarios
Comentarios de Hacker News
También había un ejemplo de esto en el clásico Duke Nukem 3D. Era el nivel “Lunatic Fringe”, creado por Richard “Levelord” Gray.
https://dukenukem.fandom.com/wiki/Lunatic_Fringe
El nivel tenía un pasillo circular en el exterior, con una estructura que daba dos vueltas completas sin cruzarse consigo mismo, y aprovechaba la capacidad del innovador motor Build de la época para separar áreas mediante conexiones entre salas. Esa función también se usaba para la técnica de “sala sobre sala”.
Era divertido en multijugador y la ilusión óptica se mantenía bastante bien. Si mal no recuerdo, la sala central tenía 4 entradas, pero en cada vuelta por afuera solo te encontrabas con 2 de ellas.
Mientras experimentaba con el motor, también llegué a hacer un nivel de juguete que resolvía con esta técnica el rompecabezas de “conectar 3 casas y 3 servicios públicos sin que las líneas se crucen”.
Duke podría ser algo parecido a geometría no euclidiana, pero cambiar pi en Doom no tiene mucho que ver con la geometría y parece más bien un caso de “si entra basura, sale basura”.
En realidad, prácticamente solo Doom se rompía con sectores superpuestos.
[1] https://www.lhowon.org/level/marathon/30
Si puedes rasterizar el interior de una figura convexa, también puedes rasterizar un mundo de sectores y portales marcando una cara determinada como portal, definiendo la zona donde esa cara es visible como región de clipping o como stencil buffer, y luego renderizando el sector del otro lado con la transformación adecuada contenida en los datos del portal y el ID del sector opuesto.
El manejo de colisiones al atravesar portales es mucho más difícil que renderizar lo que hay más allá de ellos.
Lunatic Fringe es un ejemplo directo de geometría imposible en Build, pero los mapas de Duke3D contienen mucha más geometría intersectada. En Doom no se puede construir un árbol BSP con una estructura así y, además, jugadores y monstruos solo rastrean coordenadas X/Y, así que obviamente es imposible.
Justo estaba leyendo el clásico Operation Chaos de Poul Anderson.
https://en.wikipedia.org/wiki/Operation_Chaos_(novel)
Está ambientado en un mundo paralelo donde la magia es real y avanza rápidamente junto con la ciencia. Por ejemplo, Edwin Land inventa un dispositivo que usa polarización para transformar a hombres lobo sin luz de luna.
El hijo de los protagonistas es secuestrado y llevado al infierno, y ellos se enteran de que el ejército intentó investigar el infierno 20 años antes, pero todos terminaron enloqueciendo. El antagonista deja caer una pista: como la geometría del espacio-tiempo del infierno es distinta de la nuestra, podrían volver al instante en que el niño llega y llevárselo.
Solo con esa pista, los científicos deducen que la geometría del infierno es geometría no euclidiana y calculan hechizos para entrar de forma segura, resistir allí y regresar. Para encontrar el camino, rezan pidiendo ayuda a dos geómetras del siglo XIX, uno de ellos un santo.
En las obras de Poul Anderson que he leído, como la excelente High Crusade, él tampoco se preocupa demasiado por el barniz científico; le gusta avanzar a lo bruto.
Como otra obra sobre geometría no euclidiana, recuerdo con cariño Inverted World, de Christopher Priest.
Puede que John Carmack haya recordado mal el décimo dígito de pi, pero estaría bueno que todos buscaran 84,600 en su base de código para ver si alguien escribió mal la cantidad de segundos que tiene un día.
Es sorprendentemente común, y deja una lección sobre si conviene ingresar constantes directamente en el programa o usar valores que ya existen en la biblioteca estándar del lenguaje de programación.
https://github.com/search?type=code&auto_enroll=true&q=84600
https://github.com/mysql/mysql-server/blob/824e2b4064053f7da...
https://github.com/textmate/textmate/blob/346b52b108b387462d...
15 * 60 * 60.En realidad, los gráficos y el movimiento se vuelven raros hasta que al final ya no se puede jugar. Más que llamarlo Doom no euclidiano, parece más correcto llamarlo “las consecuencias de tocar una constante del universo”.
Esperaba que un Doom realmente no euclidiano se viera así: https://youtu.be/kEB11PQ9Eo8?si=0HNlpGFBii2AIK1n
https://youtu.be/yqUv2JO2BCs?si=AutaqS5unvT7cDjw
Al ver los efectos geométricos extraños del video de Doom, como cuando al avanzar parece que los objetos se deslizan hacia los costados, llamar no euclidiano a este Doom también parece hasta cierto punto razonable.
Podían representar geometría normal, pero la geometría no tenía por qué tener sentido de ninguna manera, y también permitían conexiones arbitrarias entre habitaciones. No quiero ponerme puntilloso, pero es un malentendido común.
Para no euclidiano de verdad, recomiendo el trabajo de ZenoRogue. Por ejemplo, un juego simple que usa geometría Nil[1], una enorme batalla contra un jefe en un roguelike de mundo no euclidiano[2], rarezas geométricas en general[3], etc. Básicamente, miren cualquiera de sus trabajos.
[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...
Ahora que lo pienso, ya pasó suficiente tiempo como para que valga la pena jugarlo de nuevo.
No había problema para representar geometría normal, pero no existía la condición de que la geometría necesariamente tuviera sentido, y se podían conectar habitaciones de forma arbitraria.
https://www.youtube.com/watch?v=tl40xidKF-4
Doom no es una simulación, así que cambiar una constante no sirve como buen ejemplo de nada.
Es más bien romper algunas rutinas, y por eso la mayoría de los cambios terminan haciendo que no se pueda jugar.
Toma el código fuente de tu emulador de consola favorito y mételes errores de punto flotante al azar, o invierte el significado de algunas instrucciones de bifurcación. Cuanto más viejo sea el juego, más probable es que siga funcionando, y también más probable es que parezca un mal viaje alucinógeno.
También había proyectos de glitch art que rompían secciones concretas de archivos de imágenes y videos famosos para crear algo nuevo. Me gustaría volver a encontrar ambos, pero no logro hacerlo.
Marathon 1 (1994) admitía espacios no euclidianos, pero se usaban muy rara vez. Al jugar todo el juego, compuesto por varios niveles con mapas, en apenas uno o dos niveles aparecen espacios imposibles, y el juego no advierte ni informa que eso sea posible.
Por eso quizá era la mejor ubicación para un easter egg que se podía encontrar en el juego.
También encontré un video de demostración: https://www.reddit.com/r/Marathon/comments/vclu55/probably_n...
La última pregunta es: “¿cuál es el valor máximo de pi que sigue siendo jugable y no crashea?”. La razón por la que con pi igual a 4 se produce un error de segmentación probablemente sea que algunos accesos a tablas de consulta se pasan del final de la tabla; si es así, es muy probable que el valor máximo jugable sea apenas un poco mayor que el propio pi.
Me habría gustado que este video profundizara más en las mecánicas del juego y en por qué cambiar Pi causó problemas de esa manera.
Me pregunto si este experimento sería más interesante en el Doom con trazado de rayos mencionado. El resultado de hackear la constante en la técnica de rasterización fue casi el esperado. Pero con trazado de rayos podrían aparecer resultados más interesantes.