Al pensar en gráficos 3D, la Game Boy Color no es precisamente la consola que se nos viene a la cabeza. Y a pesar de ello, el desarrollador Danny Spencer ha logrado que una de las más clásicas de Nintendo ejecute una demo interactiva de «shader» 3D en tiempo real: todo, con una tetera.
Una tetera que puedes rotar y a la que, de hecho, puedes alumbrar desde distintos ángulos. La demostración no queda en un solo vídeo. El propio Spencer ha publicado la ROM descargable, el código fuente y hasta una versión integrada en un emulador online, para cualquiera que pueda probarla.
Pero lo que más descoloca a los jugadores es que estamos hablando de una consola con un procesador Sharp SM83 a 8 MHz. Un dispositivo que, en sus propios documentos, no cuenta con instrucciones de multiplicación. Para hacer viable esta proeza, Spencer ha explicado en su blog que ha tenido que tirar de trucos clásicos: tablas de consulta, logaritmos y conversiones para reducir el trabajo matemático. Y además, ha implementado el sombreado Lambert de manera eficiente. Una demostración de hasta dónde llega el ingenio cuando el hardware aprieta de verdad.
Cómo se consigue un 3D «de verdad» en una Game Boy Color
La demo es un ejemplo perfecto de que la programación puede superar todos los límites establecidos. En vez de forzar el diseño 3D, se ha rediseñado el problema para que encaje en lo que la Game Boy Color sí puede hacer. En este caso, el propio Spencer ha detallado que la ausencia de multiplicación del SM83 se esquiva con logaritmos y tablas, lo que reduce las operaciones y las sustituye por aproximaciones precalculadas.
De hecho, para aligerar las tareas computacionales, el desarrollador ha convertido vectores en coordenadas esféricas para aplicar el shader Lambert, que es el típico sombreado difuso que se basa en aportar más luz cuando la superficie «mira» a la fuente de luz. Dicho de una manera más simple: en vez de generar píxeles planos, se genera volumen, y la luz se comporta de una manera más coherente. Aunque estemos en una pantalla diminuta con un chip de antaño.
No es que la Game Boy Color cuente con la potencia necesaria para este hito, sino que el problema se ha reformulado para que el coste por frame sea totalmente asumible.
Dónde descargarlo y cómo probarlo
La otra parte buena de esta noticia es que no estamos ante un experimento de laboratorio ultrasofisticado. El propio Spencer ha sido el artífice del vídeo que puedes ver arriba, pero también ha compartido todo lo necesario para poder disfrutar de su ROM en una versión embebida de un emulador online. Así que cualquiera puede jugar sin tener que investigar una odisea. En la demo, puedes manipular la luz con las teclas de cursor, y a la vez, cambiar el ángulo de la tetera para ver cómo responde el sombreado cada vez que giramos el objeto.
Esta demo –disponible en GitHub– también tiene un valor intrínseco: se aleja de las promesas y del marketing, y en todo momento puedes probarla y ver si realmente responde en tiempo real. En caso de que lo ejecutes en un emulador, la experiencia sigue la misma línea: interacción directa y cambios de iluminación que no están prerenderizados.
En el propio GitHub se detalla cómo está resuelta cada parte: desde el pipeline de cálculo hasta los trucos para recortar ciclos. Una heroicidad que parte de un chip «viejo», y que ha conseguido mover gráficos en 3D, con luz dinámica y que no forma parte de una «cinemática», sino de los propios controles del usuario.
| Parámetro Técnico | Valor (GBC) | Observación para el Render 3D |
|---|---|---|
| CPU | Sharp SM83 a 8.388 MHz | Velocidad extremadamente baja y sin instrucción de multiplicación. |
| RAM | 32 KB | Insuficiente para almacenar texturas complejas o buffers de geometría. |
| Paleta de colores | 56 colores simultáneos en pantalla | Limita el degradado suave del sombreado. |
| Resolución | 160x144 píxeles | Baja resolución que, paradójicamente, hace asumible el coste computacional por píxel. |
