ffelagund escribió:Como has podido ver, para muetra un boton. El render del coche ese es ray tracing en tiempo real. Por supuesto que no es la misma calidad que un render que saque yafray o mental ray, pero lo que cuenta, es que el tipo de algoritmo, se ha corrido en tiempo real (20fps)
La cuestión es que los cálculos que realiza un ray tracer son por propia naturaleza vectoriales, por eso, en una cpu comun (dual core, quad core, etc), que son escalares, no se puede ganar mucha velocidad, pero con varios procesadores vectoriales en paralelo, la ganancia es exponencial.
Como ejemplo, una tarjeta grafica normal. Ningún PC sin tarjeta grafica, por mucho quad core que sea, o muchos MHz que tenga no puede correr un juego 3D actual, por que el tipo de procesador, solo procesa una operacion de cada vez (o 4 si es quad core por ejemplo)
Las tarjetas graficas son procesadores vectoriales. Ademas de ello son muchos procesadores en uno, por lo que la paralelizacion es mucho mas agresiva. Por ejemplo, supongamos que un pixel es el resultado de el producto de dos vectores 3D en la GPU. Esto se realiza de la siguiente manera: Para empezar, los vectores 3D son un tipo nativo de la gpu, y para seguir, la operacion "producto vectorial 3D" es tambien una operacion nativa, por lo que, digamos, esa operacion se hace de manera directa, en 'solo ciclo de reloj' para entendernos.
Un producto vectorial es como sigue:
A x B = { (Ay * Bz) - (Az * By), (Az * Bx) - (Ax * Bz), (Ax * By) - (Ay * Bx) }
Como podeis ver, esto a una cpu normal le supone, en operaciones nativas: 6 multiplicaciones y 3 restas, simplificando, 9 'ciclos de reloj'
Ademas de eso, una GPU tiene un monton de procesadores, por lo que por ejemplo, podria estar calculando hasta 92 productos vectoriales de una sola sentada (caso de la Wildcat Realizm 800, 92 fragment processors), se ve que la cantidad de operaciones que realiza una GPU frente a una CPU es muchisimo mayor. Esta es la razón por las que las tarjetas gráficas aceleran el dibujado. Bien, pues con el Cell pasa lo mismo. Las SPU son procesadores vectoriales, y son 8 (6 en la Ps3), pero tienen la grandísima ventaja de que, como procesadores vectoriales, son mucho mas genéricos que las GPUs, por lo que se pueden programar algoritmos genericos, es decir, no tienen un modo de funcionamiento prefijado (como el pipeline de las GPU)
Este tipo de comportamiento es perfecto para la implementacion de un ray tracer, por las dos razones que he dicho anteriormente:
a) las operaciones con vectores y matrices del ray tracer (casi todas) se harán muchísimo más rapido que con una CPU normal
b) Al haber 6 SPU podemos calcular sin problema, 6 rayos simultaneamente
Esto quizás no nos de ray tracing en tiempo real (depende de la complejidad de la escena), pero está claro que puede bajar el tiempo de proceso de un render de varias horas a varios minutos
Ahora no me quiero meter mucho en el tema (es un tema muy estenso y dificil de explicar), pero harian falta bastantes puntualizaciones en tu post, bastantes tirando a muchas... solo comentar eso. Igual has simplificado mucho para poder explicarlo, no se, pero con eso puedes confundir algo a la gente...