• No results found

El análisis de desempeño realizado se enfocó en evaluar el desempeño de las distintas etapas del pipeline gráfico implementado, dejando de lado el análisis de los sistemas de audio, de animaciones, de física y de lógica. Éste se realizó sobre la plataforma Xbox 360 y sobre la plataforma PC utilizando una GPU GeForce 560Ti de 384 stream processors y un procesador AMD Phenom II X4 965 de 4 núcleos (3.6Ghz). La resolución elegida fue 1120x630 pixeles debido a que no genera predicated tiling en la consola Xbox 360.

Dado que se desea medir principalmente el desempeño gráfico, se utiliza como medida los cuadros por segundo, si bien ciertas etapas, como frustum culling, hacen uso intensivo de la CPU.

Para los distintos test realizados se tomó como base la escena de prueba anteriormente descripta, pero se hicieron modificaciones con el objetivo de medir con mayor precisión el costo computacional de ciertos algoritmos o técnicas. Además, para obtener medidas más precisas se realizaron ejecuciones parciales del pipeline gráfico; por ejemplo, al evaluar el desempeño de la pasada light pre-pass, se ejecuta el algoritmo de

frustum culling, la generación del G-Buffer, la etapa light pre-pass y la etapa que renderiza los elementos 2D, pero no las etapas de renderizado de objetos y de post procesado. La renderización de los elementos 2D presupone una sobrecarga necesaria para mostrar información estadística entre la que se incluyen los cuadros por segundo.

Frustum Culling

En la primera etapa del pipeline gráfico se realiza una operación de frustum culling que ejecuta, por cada objeto activo, una operación de intersección entre el frustum de la cámara y el bounding sphere del objeto. Este algoritmo se diseñó en modo multithreading sin necesidad de sincronización entre los hilos, se reemplazó la operación de intersección provista por XNA por una implementación altamente optimizada, se evitó toda generación de basura y el algoritmo y los datos suministrados se organizaron de manera de reducir a un mínimo los accesos a memoria. En este caso se obtienen los siguientes resultados para una escena que contiene 6708 objetos activos:

Descripción del test PC Xbox 360

Frustum Culling sobre 6708 objetos activos 1010 cuadros por segundos 145 cuadros por segundo La cantidad de objetos presentes en esta escena de prueba es muy alta y la mayoría de las aplicaciones gráficas no alcanzan valores tan altos. Estos resultados muestran que la plataforma PC no se ve afectada significativamente por esta tarea, sin embargo, la consola Xbox 360 en escenarios similares requerirá la ejecución previa de un sistema de niveles de detalle para descartar con mayor rapidez objetos no visibles, en especial, si la aplicación necesita realizar complejas tareas de física o lógica.

Generación del G-Buffer

Con el objetivo de reducir las llamadas al sistema y la cantidad de veces que la GPU cambia de programa de vértices y de fragmentos la generación del G-Buffer se realiza utilizando solo 5 técnicas de

los shaders en lote. Ejecutando la aplicación de prueba y ejecutando el pipeline gráfico hasta esta etapa se obtiene (Figura 8-8):

Descripción del test PC Xbox 360

Generación del G-Buffer 1132 cuadros por segundos 218 cuadros por segundo Estos resultados muestran que se alcanzó un muy buen desempeño en esta etapa. Dado que los objetos se renderizan en lote por técnica y los shaders son relativamente simples, la principal limitación de esta etapa se encuentra en la cantidad de vértices a procesar y la cantidad de objetos presentes.

Figura 8-8 Ejecución en la plataforma PC del pipeline gráfico hasta la etapa G-Buffer. El mapa de normales es mostrado en pantalla.

Light Pre-Pass

Esta etapa típicamente es la que más tiempo de procesamiento consume debido a que se procesan todas las luces, las sombras y los algoritmos de iluminación global. Para obtener una mejor lectura del costo computacional de esta etapa se realizaron diferentes test con diferentes configuraciones de iluminación. Ejecutando la aplicación de prueba y ejecutando el pipeline gráfico hasta ésta etapa se obtiene:

Descripción del test PC Xbox 360 Luz ambiental (utilizando armónicos

esféricos)

823 cuadros por segundos 139 cuadros por segundo Luz ambiental (utilizando armónicos

esféricos) + oclusión ambiental (HBAO)

189 cuadros por segundo 16 cuadros por segundo

Luz direccional 830 cuadros por segundo 139 cuadros por segundo Luz direccional + sombras cascaded (4

cascadas)

614 cuadros por segundo 98 cuadros por segundo

Luz puntual 1010 cuadros por segundo 170 cuadros por segundo

Luz puntual + sombras cúbicas 660 cuadros por segundo 80 cuadros por segundo Luz ambiental (utilizando armónicos

esféricos) + oclusión ambiental (solo PC) + luz direccional (con sombras cascaded) + 2 luces puntuales + 1 luz spot

151 cuadros por segundo 66 cuadros por segundo

Figura 8-9 Ejecución en la plataforma PC del pipeline gráfico hasta la etapa light pre-pass. En este test se procesan 1 luz ambiental (utilizando armónicos esféricos y oclusión ambiental), 1 luz direccional (con sombras cascaded), 2 luces puntuales y 1 luz spot. La

contribución difusa es mostrada en pantalla.

La luz ambiental es computacionalmente costosa por ser un shader que se ejecuta sobre toda la pantalla, no obstante, incrementa significativamente la calidad visual debido a que genera una aproximación sencilla de iluminación global. La oclusión ambiental, por el contrario, reduce

significativamente los cuadros por segundo al punto de resultar prohibitiva para la consola Xbox 360 y GPUs de bajo rendimiento, por lo que se aconseja implementar un esquema de coherencia temporal o prescindir de esta técnica.

La luz direccional también requiere la ejecución de un shader que abarca toda la pantalla y por lo tanto se recomienda utilizarla solo para representar la luz solar. Las sombras cascaded permiten representar efectivamente sombras en escenas de exteriores a un costo computacional razonable. Las luces puntuales no representan una sobrecarga significativa y es posible representar una gran cantidad de estas luces; sin embargo, las sombras cúbicas reducen significativamente los cuadros por segundo y se recomienda activarlas solo cuando se considere estrictamente necesario.

El último test (Figura 8-9) muestra que una iluminación de mediana o alta complejidad es viable aún en la consola Xbox 360, pero se recomienda ignorar algoritmos de iluminación global en el espacio de la pantalla para hardware de bajo rendimiento.

Renderizado de Objetos

Similarmente a la generación del G-Buffer, se intenta reducir las llamadas al sistema y la cantidad de veces que la GPU cambia de programa de vértices y de fragmentos; para esto se califican nuevamente los objetos visibles en técnicas y se renderiza por lote. Para obtener una mejor lectura del costo computacional de esta etapa se realizaron diferentes test cada uno renderizando diferentes tipos de objetos. Ejecutando la aplicación de prueba (con la misma iluminación que el último test de la etapa anterior) y ejecutando el pipeline gráfico hasta ésta etapa se obtiene:

Descripción del test PC Xbox 360

Renderizado de objetos opacos 138 cuadros por segundos 47 cuadros por segundo Renderizado de objetos opacos y de 150

partículas suaves

96 cuadros por segundo 29 cuadros por segundo Renderizado de objetos opacos, de 150

partículas suaves y de objetos transparentes

96 cuadros por segundo 29 cuadros por segundo

El renderizado de objetos opacos tiene una sobrecarga que se ve influenciada principalmente por la complejidad poligonal y la cantidad de objetos a renderizar debido a que los objetos se renderizan en lote por técnica y los shaders son relativamente simples. Las partículas implementadas generan una gran cantidad de fragmentos y si varias de éstas cubren un área extensa de la pantalla, el desempeño se verá afectado significativamente. El renderizado de objetos transparentes (solo unos pocos polígonos en esta escena) es eficiente pero está influenciado sólo por un conjunto reducido de luces locales.

Post Procesado

Para obtener un mejor desempeño computacional se fusionaron varios algoritmos (calibración, exposición, mapeo tonal, film grain y color grading) en un único shader. Ejecutando la aplicación de prueba y ejecutando el pipeline gráfico completo se obtiene (Figura 8-10):

Descripción del test PC Xbox 360

Mapeo tonal + bloom + film grain + color grading

94 cuadros por segundos 26 cuadros por segundo Mapeo tonal + bloom + film grain + color

grading + MLAA

93 cuadros por segundo 24 cuadros por segundo

La etapa de post procesado tiene un costo computacional razonable, aportando técnicas gráficas que son muy valiosas a la hora de incrementar el fotorrealismo de la escena.

Figura 8-10 Ejecución en la plataforma PC del pipeline gráfico completo utilizando la escena de prueba; este renderizado incluye MLAA.

Todos estos tests muestran que es posible reproducir gráficos fotorrealistas en XNA Final Engine aún en plataformas como la consola Xbox 360; sin embargo, los algoritmos de iluminación global en espacio de pantalla son prohibitivos en la mayoría de las escenas y se recomienda, con el objetivo de aumentar el fotorrealismo, utilizar sólo luz ambiental basada en imagen en conjunto con un gran número de luces locales.