Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

FRIKADAS: La línea de código que cambió la industria de los gráficos 3D

Este post es una adaptación de la respuesta en Quora de Joe McCracken a la pregunta "What line of code changed the world of programming?". Quizá exagere, quizá no, pero nos ha parecido lo suficientemente interesante como para reseñarla aquí.

La siguiente línea de código derribó un imperio de varios miles de millones de dólares y acercó los juegos en 3D a las masas:

i = 0x5f3759df - ( i >> 1 ); // what the fuck?

Proviene del código fuente en C de Doom, el revolucionario juego en 3D de los años 90 que cambió el mundo (fue tan popular que estaba en la práctica totalidad de los PCs de la época, y tenía más instalaciones que Windows 95).

Portada del juego Doom

El comentario de la línea, es del mítico John Carmack, y de él se desprende que, seguramente, esa fórmula no es suya, pero se dio cuenta de que no se había utilizado previamente para trabajos en 3D.

Esa fórmula es una manera aparentemente "mágica" de calcular la raíz cuadrada inversa aproximada, una operación común para determinar distancias entre vectores en modelado 3D en tiempo real. Este cálculo normalmente requiere una aritmética de punto flotante que es muy intensiva en cómputo, utilizando la fórmula de aproximación original de Isaac Newton.

O sea, la cosa va así por ejemplo: ¿cuál es la raíz cuadrada de 1089? Primero adivinas que 30 sería un valor cercano, pero al elevarlo al cuadrado ves que es bajo así que sumas 1 y lo intentas de nuevo. Al final, deduces que es 33. Esta es una tarea muy laboriosa para los ordenadores, especialmente para los de la época. Como esta función debe ser llamada millones de veces para renderizar una única pantalla 3D compleja y además ha de hacerlo 30 veces por segundo... se puede ver la importancia de la velocidad y la eficiencia al realizar esta operación.

Por aquella época había una empresa llamada Sillicon Graphics (o SGI) que era la líder mundial en hardware específico para creación de gráficos 3D. Era la empresa gigantesca que estaba detrás de éxitos de Hollywood como Parque Jurásico, y ganaban millones con su hardware especializado para cálculos en coma flotante. Piensa en ellos como en NVidia en la actualidad: nadie les hacia sombra.

Pero resulta que esa línea de código lograba hacer aproximadamente lo mismo en cualquier ordenador que los chips especializados de SGI que costaban decenas de miles de dólares. Vale, no era tan preciso, pero lo era suficiente para engañar al ojo de los usuarios.

Este simple hack de código lo cambió todo e hizo que SGI perdiese su ventaja competitiva. De repente, un ordenador barato con hardware corriente podía realizar gráficos 3D similares a las estaciones de trabajo que costaban más de 100.000 dólares. SGI tuvo que cambiar de rumbo y centrarse en su negocio de servidores, que posteriormente fracasó. Hasta tal punto que llegaron a cerrar.

OpenGL es seguramente el único legado real que aún perdura de SGI.

Si te interesa el código completo de la función que hacía el famoso cálculo, es el siguiente:

float Q_rsqrt( float number ) 
{
	long i; 
	float x2, y; 
 	const float threehalfs = 1.5F; 
 	x2 = number * 0.5F; 
 	y  = number; 
 	i  = * ( long * ) &y;                    // evil floating point bit level hacking 
	i  = 0x5f3759df - ( i >> 1 );            // what the fuck?  
 	y  = * ( float * ) &i; 
 	y  = y * ( threehalfs - ( x2 * y * y ) );// 1st iteration 
 //	y  = y * ( threehalfs - ( x2 * y * y ) );// 2nd iteration, this can be removed 
	return y; 
} 
campusMVP campusMVP es la mejor forma de aprender a programar online y en español. En nuestros cursos solamente encontrarás contenidos propios de alta calidad (teoría+vídeos+prácticas) creados y tutelados por los principales expertos del sector. Nosotros vamos mucho más allá de una simple colección de vídeos colgados en Internet porque nuestro principal objetivo es que tú aprendas. Ver todos los posts de campusMVP
Archivado en: General

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Comentarios (1) -

El codigo citado proviene de Quake III Arena, no del Doom.

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.