Y entonces ¿que tipo de ray tracing lleva o puede llevar el chip de imagination? La apariencia está muy bien para ser un mero asic que no ocupa ni un 33% de un chip que de base no es muy grande. Algo se me escapa.
El PowerVR GR6500 no deja de ser una GPU pensada para la rasterización pero con una serie de elementos adicionales que ayudan a acelerar el proceso del Raytracing moviendo a unidades especializadas y de función fija (y por tanto no programables) los elementos más recursivos y que más potencia de calculo requieren, estos elementos son:
- La construcción de la estructura de datos que nos servirá para almacenar la posición de la geometría en escena.
- El recorrido de dicha estructura de datos de manera recursiva para su actualización.
- La comprobación de la interacción de todos los rayos de luz de la escena con cada uno de los pixeles de la misma.
La explicación simple sería que esos elementos se encuentran ya en el PowerVR y por pensamiento mágico podemos llegar a concluir que gracias a ello se puede hacer el Raytracing o más dicho un pipeline de renderizado híbrido donde se rasteriza primero (iluminación directa) y luego se calcula el Raytracing utilizando las unidades especializadas integradas en el chip, que es lo que Imagination nos explico en su día cuando lo presento en el 2014.
Pero hemos de tener en cuenta que pese a que hemos añadido una serie de piezas para acelerar ciertos procesos en realidad estas piezas trabajan en conjunto con las piezas de una GPU convencional, no para el Raytracing puro sino para el Raytracing híbrido que tiene un pipeline combinado de rasterización y raytracing. En este caso haciendo uso de un pipeline pensado para el Deferred Rendering para extenderlo aún más.
Pero hemos de tener en cuenta que el PowerVR tiene la particularidad de no ser una GPU al uso sino un Tile Renderer y esto es importante porque los Tile Renderers tienen o al menos tenían una ventaja enorme a la hora de ser adaptados para el Raytracing y es lo que voy a intentar explicar en esta entrada.
¿Como funciona un Tile Renderer? Muchos de los que sois habituales en el blog lo sabéis pero un Tile Renderer es un tipo de GPU que en vez de renderizar los fotogramas al completo lo que hace es renderizar porciones de fotogramas a las que llamamos Tiles.
Cada Tile en los PowerVR es de unos 32×32 pixeles y esto significa que a la hora de renderizar en vez de utilizar buses de imagen gigantescos utilizamos uno lo suficientemente pequeño como para colocarlo en la memoria interna de la GPU y evitar de esta manera tener que tocar la memoria principal. Esto significa que los ROPS que son las unidades que escriben el backbuffer no la escribirán en la RAM asignada al video y solo el Frontbuffer será el que terminara en la RAM asignada a la GPU.
¿Y que elementos forman el Backbuffer? Pues principalmente 2, el Color Buffer que almacena el color de cada pixel y que puede tener varias muestras para lo que es el renderizado en diferido y el Depth Buffer que almacena la distancia de cada pixel respecto a la cámara y nos sirve para saber si el pixel correspondiente a un objeto rasterizado se muestra o esta opacado por otro que hay detrás.
Precisamente el hecho de tener el Z-Buffer en una memoria interna nos permite realizar lo que es el Hidden Surface removal que no es otra cosa que eliminar los pixeles no visibles al estar opacados por otros al haber otro objeto delane, el handicap del Hidden Surface Removal aplicado antes de la étapa de Texturizado+Fragment o Pixel Shader es que no sabemos el valor de la transparencia en el objeto y con escenas con transparencias esto es un problema porque el Hidden Surface Removal es inefectivo.
Ahora bien, con lo que quiero que os quedéis es que el Z-Buffer almacena información de la posición de cada objeto relativa al punto de vista del observador, pero solo la profundidad y con un eje de datos no hacemos suficiente. ¿Como obtenemos la posición en X e Y?
Los Tile Renderers al contrario de las GPUs convencionales son arquitecturas del tipo Middle Sort, esto significa que ordenan la escena después de calcular la geometría de la escena pero antes del rasterizado.
En el caso del PowerVR lo que se hace es crear una lista de pantalla por cada tile antes de la rasterizacion para ordenar la geometría.
Esto se almacena en una serie de Tile Buffers que corresponde cada uno a un Tile, estas se almacenan en buffer conjunto llamado Parameter Buffer. El Parameter Buffer no es más que una lista de Tiles que representan la pantalla o parte de la pantalla, en el caso de los PowerVR habra tantos PBs como «clusters» ya que cada uno de los clusters trabajara en una porción regular de la pantalla y tomando un Tile de 32×32 pixeles de esa porción.
Por ejemplo si renderizamos con una PowerVR GT7200 tendremos 2 Parameter Buffers, si renderizamos con una PowerVR GT7900 entonces tendremos 16 Parameter Buffers.
Así pues nos encontramos que antes de la rasterización la GPU ha construido una estructura de datos con las listas de los triangulos (geometria) y su posición respecto a cada Tile por lo que tenemos una estructura de datos construida por parte de la GPU que la podemos utilizar como la estructura de datos que necesitábamos en el punto 1. ¿Cierto? Pues no, porque lo que tenemos una estructura de datos de tipo lista…
Necesitamos convertir dicha estructura de datos lineal en una jerarquica, en este caso si hacemos caso a Imagination en un Octree regular de 3 niveles (8^3=512 subdivisiones).
De esto se encarga el Scene Hierarchy Generator que es la pieza de función fija que construirá el Octree.
Al final de la etapa de renderizado cada Tile procesado será voxelizado. Esta información en conjunto con la información del Parameter Buffer le permitirán sin participación alguna de los Shaders al Scene Hierarchy Generator generar el Octree e incluso recorrerlo.
En las siguientes diapositivas se explica el proceso de manera visual.
Tened en cuenta que las GPUs por su arquitectura son altamente ineficientes a la hora de realizar este tipo de tareas. Como ya habréis deducido de las anteriores entradas que he ido haciendo esta semana sobre este tema dicha estructura de datos es utilizada para poder calcular la intererseccion de los rayos con los objetos de la escena.
En el caso de las GPU convencionales con las Rasterización por Tiles se ha adoptado el Middle Sort en las últimas GPUs de PC (Maxwell en adelante pero al contrario que los Tile Renders no se genera un Parameter Buffer por lo que en el caso de implementarse el Scene Hierarchy Generator con tal de generar el Octree y recorrerlo este tendría la misma funcionalidad pero diferente funcionamiento dado la inexistencia del Parameter Buffer en una GPU convencional.
El Pixel Local Storage
El Pixel Local Storage es una memoria en la que en el caso de los Tile Renderers se pueden escribir los resultados de los Fragment/Pixel Shader para realizar a continuación una etapa de post-procesado sobre los mismos. La particularidad del PLS es que su uso hace bypass a la etapa de Blending.
Lo que significa hacer Bypass a los ROPS desde el Pixel/Fragment Shader, por cierto que las diapositivas son de la arquitectura Mali de ARM que también tiene un PLS pero su utilidad es la misma.
El PLS es lo que permite el Deferred Rendering en una GPU basada en Tiles, pero nos va a permitir a hacer cosas como la Voxelización del Tile y aplicar el Raytracing sin que ese Tile impacte a la memoria principal para luego tener que recuperarlo. El PLS es uno de los elementos del hardware de las GPU de Smartphone que «podrian» aparecer en futuras GPUs de sobremesa…
…
¿Cual es el Raytracing utilizado en el PowerVR Wizard?
En vez de aplicar el Ray Tracing a toda la escena entera lo aplicamos Tile por Tile, donde realmente cada Voxel almacena un Tile, haciendo que el algoritmo al final sea el siguiente:
Genera Rayos a través del Frame Shader y almacenalos en una Cola. Mientras haya Rayos en Cola Escoge un Voxel/Tile Volumétrico a Procesar Intersecciona el Rayo con el siguiente pixel del Voxel Si hay Intersección Por cada Rayo en el Voxel Calcula el BDRF y ejecuta el Ray Shader Añade los Rayos Generados de manera Indirecta a la Cola Si la Superficie es Emisiva Almacena su contribución a la Radiancia de la Imagen Si no hay intersección: Avanza al Siguiente Pixel del Voxel/Tile Volumétrico
Obviamente la potencia a la hora de realizar el Raytracing es limitada a la cantidad de rayos que se pueden ser emitidos y procesados. ¿Pero que tipo de Raytracing utiliza? La respuesta es el Whitted Raytracing y es que el pipeline gráfico en este caso es curioso ya que el calculo de la iluminación en diferido no se realiza a priori de la etapa de Raytracing sino a posteriori porque el Whitted Raytracing como sabréis no puede calcular la luz indirecta difusa y para ello se necesita el Path Tracing/Ray Tracing Montercarlo e en una versión más simplificada la Radiosidad (sin poder combinar ambos tipos de luz).
Con esto supongo que habré solventado en lo máximo posible por mi parte tu pregunta.
Joder, y con creces. Estupendo artículo y muchas gracias por tu tiempo.
Me gustaMe gusta
Que bueno el Miki, jajajajajajajajaja
Me gustaMe gusta
«A Mickey Mouse Cartoon» es una joyita oculta del catálogo Disney.
Me gustaMe gusta
Lo que me interesa del PLS es lo de las transparencias, porque la vegetación siempre tumba el framerrate.
Sobre todo en r.v. es un problema importante según he leido a un par de desarrolladores de r.v. que siempre tienen que vigilar y mantener al minimo la carga de alfa y emisivos.
No entiendo por qué oculus ha tirado por el snapdragon 821 para oculus go en ve, de un power vr con pls y quizá recortando piezas de raytracing… Bueno, si lo se. Querian heredar la biblioteca de samsung gear vr.
Me gustaMe gusta
La psp 3 podria ser un clon de oculus go (199$/230€) sin mando, usando un dualshock 4 (sensores de movimiento y touchpad) con power vr para aprovechar la api de vita, y recibir ports sin problemas de control tanto de los juegos para oculus que se controlan con mando de xbox (hubo packs que lo incluian) como de juegos para oculus go/gear vr
Con 7 nm el año que viene y sin el problema de transparencias, y ram dedicada a graficos como en vita con mas ancho de banda, digamos 512 mb y 2 gb lpddr4 para el resto. Aunque oculus go tiene 3 gb de ram y por ese lado podria tener problemas.
El sensor de movimiento sin posicionamiento absoluto del mando de oculus es similar al sistema sixaxis.
Me gustaMe gusta
¿Porque el chip les salía barato? En todo caso los Adreno son el Barón Adler de las GPUs
Me gustaMe gusta
No, hubieran tirado por un power vr antiguo del mismo modo que google daydream toma como referencia el 835 igual que otros standalone, pero ellos han usado el 821 por precio.
Elegir snapdragon sin pls y seguir con el problema del alfa en rv en vez de power vr es porque les ha permitido diferenciarse de toda la competencia de standalones y daydream porque han heredado inmediatamente tosa la biblioteca de gear vr
Si ya tenias cuenta de samsung con compras en su store para gear vr, es crossbuy y ya las tienes para oculus, sin parche ni nada.
Me gustaMe gusta
Si software sells system mira la ventaja en apps:
Y mira el efecto rejilla:
Me gustaMe gusta
Pues no la encuentro. Era una imagen casi igual pero compara el numero de apps. El caso es que pico tiene como 75 apps y por ahi anda vive port tambien, pero gear vr tiene 1.000 y pico y en la caja del go ponen «mas de 1.000 apps»
Me gustaMe gusta
Me gustaMe gusta
No entiendo mucho, pero parece que las Lenovo son las que se llevan el gato al agua, por lo que veo donde pone VISOR ¿significa que cuando giras la cabeza el muñeco tambien la gira?
Si es así me parece básico, prové las vive en un mediamarkt y me pareció la experiencia más aluciante desde que me compré mi psx hace ya …
Entonces el TOP 3 creo que sería el siguiente:
1 Lenovo
2 Go
3 Oculus santa Cruz (si el precio no pasa de 400€
El resto se van de precio.
¿Es imposible comprar en la tienda de oculus con las lenovo?
Me gustaMe gusta
se refiere a si tiene posicionamiento absoluto. si lo tiene el visor te permite moverte por la habitación con tu cuerpo (en las go dependes de moverte con el mando o usar teletransportes, o sobre railes).
si lo tiene el mando te permite tener eje de profundidad. sin este en sculptr vr tienes que rotar el mando para acercar o alejar el pincel… una mierda que rompe la inmersión. con posicionamiento absoluto en los mandos puedes hacer lo de agarrar un shuriken en super hot y lanzarlo con realismo.
en calidad precio lo mejor es oculus go pero limitandonos a potencia de movil, y de paso aplasta en catálogo a la competencia.
en pc (potencia y catálogo de pc=tienda de oculus y tienda de steam, oculus tiene exclusivos) lo mejor en calidad a precio intermedio es samsung odissey que tiene la misma pantalla que htc vive pro pero vale varios cientos de euros menos. los otros mixed reality competencia de odissey parece que tienen todos la misma pantalla y lentes que lenovo. a mi me gustan las acer por diseño y tienen cascos y auriculares integrados pero parece que si usas unos tuyos te ahorras una pasta, habria que mirar bien.
aparentemente las lenovo con tus cascos y microfono si serían lo mejor en calidad precio y tienen las apps de windows 10 store «mixed reality» + steam y con el programa revive puedes jugar a las cosas de oculus (tambien usando el vive)
Me gustaMe gusta
Me pregunto porque carajos los juegos en celulares tope de gama siguen viendose peor que en una Vita en algunos casos….Tanto cuesta aprovechar los 33gb/s que tienen moviles como el S8?
Muy buenas entradas como siempre, y me hace querer esperar mas a las nuevas gpu´s.
Me gustaMe gusta