El irresoluble problema de la Iluminación (II)

Comentario#1:

Ya que borraste la entrada anterior donde te informaba de que cryengine 2 si que tiene iluminación global en tiempo real con 3 rebotes en crysis 2 de pc, me pregunto si lo has tenido en cuenta para esta segunda versión de la entrada

Es demasiado larga y no me apetece leerla para comparar de memoria con la anterior

¿No hay manera de que bajes del burro verdad? El problema de la iluminación en el rasterizado es simple de explicar, trata cada uno de los elementos que componen la escena (vertices, polígonos, fragmentos de pixeles) de forma individual y por tanto local sin tener en cuenta todo el conjunto de la escena. En cambio técnicas como el RayTracing tienen en cuenta la iluminación de toda la escena. ¿Y que se ha hecho en el rasterizado para conseguir el “tercer rebote”? Tirar de técnicas externas, ya sea a través del renderizado híbrido o través de la Voxelización y los Octrees, ambas son técnicas que rompen por completo con el rasterizado tradicional por el hecho de que este esta sumamente limitado en lo que a la iluminación se refiere.

En el rasterizado tradicional que se puede resumir de la siguiente manera:

Pipeline

El Voxelizado no ocurre en ningún momento, por lo que las nuevas técnicas de iluminación global lo que realizan primero es la escena voxelizada con tal de tener un mapa de la escena que poder representar en un Octree.

voxelization1

La Voxelización será un elemento importante en el futuro de las GPUs, en el siguiente artículo en la web de Nvidia se habla de lo que es y su importancia, la cual es mucha de cara al futuro.

Una representación en voxeles de la escena tiene datos espaciales al contrario del de la visión de la rasterización convencional (almacenada como un render target/búfer d eimagen) el cual tiene una porción del valor de profundidad. Una escena voxelizada puede ser facilmente atravesada espacialmente y puedes acceder a los datos que se encuentran en el grueso de las localizaciones del mundo. Esto permite técnicas de renderizado que necesitan datos espaciales como la iluminación indirecta…

Es decir… La iluminación indirecta es imposible en el rasterizado clásico, ¿Qué entendemos por iluminación indirecta?

Voxelization2

¿Qué significa esto? Lo vuelvo a decir, en el rasterizado clásico la iluminación no es calculada de forma global sino localmente, ya sea a nivel de vértice o de fragmento de pixeles y esto limita enormemente la representación de la iluminación indirecta y de ahí la necesidad de voxelizar la escena pero dicha voxelización no forma parte del pipeline tradicional ni del pipeline gráfico contemporáneo y actualmente se realiza con los shaders consumiendo una gran cantidad de recursos de los shaders.

Personalmente creo que vamos a ver en un futuro una nueva pieza de función fija encargada de la realización de la voxelización de la escena con el objetivo de generar un Octree posteriormente en el cual almacenar la trayectoria de la iluminación de la escena:

SVOAlg

Hay muchas maneras de conseguir el voxelizado pero teniendo en cuenta los problemas futuros en cuanto al diseño de procesadores gráficos por la subida del precio por puerta lógica el hecho de colocar una máquina de estado realizando la Voxelizacion supone ocupar una área mucho más pequeña que el hecho de hacerlo a través de los Shaders porque entonces la potencia necesaria a través de los mismos para dicho proceso tendría como consecuencia un chip mucho más grande por el hecho de que las unidades programables son mucho más complejas que las máquinas de estado:

eezbRGE

El proceso de Voxelización significa que la geometría de la escena no es transformada al sistema cartesiano por lo que resultaría en un bypass en el pipeline clásico después de la generación de primitivas cuyo objetivo sería la generación del SVO de la escena y dado que se esta estandarizando el uso de voxeles es muy posible que veamos esto en la siguiente generación de consolas integrado en las GPUs y en las APIs gráficas. Obviamente lo ideal sería que fuese programable pero si tenemos en cuenta las limitaciones de coste en los sistemas domésticos esta es la mejor solución.

Claro esta que todo esto significa una cosa muy simple, romper con el rasterizado clásico, el cual es llamado también algoritmo Z-Buffer por el uso el búfer de profundidad en el renderizado de la escena. El uso de la voxelización para la creación de un Octree es para sustituir el búfer de profundidad y con ello dejamos de hablar ya del rasterizado clásico ya que el problema de la iluminación es irresoluble en el mismo y es necesario romper para dar el salto en cuanto a calidad visual en los juegos.

¿A que viene esta explicación? Pues por el hecho que me dices en el comentario de que mire la iluminación global del CryEngine y me encuentro como es de esperar que se basa en la voxelización, lo cual no es de extrañar desde el momento en que desde el rasterizado convencional la iluminación indirecta/global es imposible de realizar. ¿Pero que ventajas tendría un voxelizador? Fijaos en la siguiente diapositiva por favor:

SVOCost2

La construcción del Octree en un Kepler GK104, una GeForce 680 con una potencia de 3 TFLOPS, requiere en ese caso un tiempo de 7.34ms. Pensad que un juego a 30fps genera un fotograma en 33.3ms y uno a 60fps en 16.6ms, por lo que tener una parte del hardware de la GPU dedicada a la voxelización liberando a los shaders es muy importante de cara al futuro.

En fin, eso es todo.

Anuncios