Gráficos por ordenador: tubería fija2018-01-26T11:27:50+00:00

Project Description

Gráficos por ordenador: tubería fija

Funcionamiento de la tubería fija

Escrito por Reisor | 25/01/2018

La tubería fija se llama así porque el hardware gráfico que lo implementa consiste en elementos que no pueden ser programados. Algunas partes de la tubería pueden cambiarse de estado, por ejemplo, el Z-buffer (donde se almacena la profundidad del espacio 3D, que es el eje de coordenadas Z en geometría.) puede activarse o no, pero no se da la posibilidad de escribir programas que controlen el orden en cómo las funciones se ejecutan en algunas etapas.

La arquitectura de la tubería fija es la que se mostró en el anterior artículo, a continuación podemos volver a verla para refrescarnos la memoría. Ahora explicaremos con mayor detenimiento cómo se comportan cada una de las etapas en este tipo de tubería.

Etapa de aplicación

En esta etapa el desarrollador tiene el control total de lo que pasa en ella, debido a que se ejecuta en la CPU. Los cambios en ella pueden afectar al rendimiento de los siguientes estados, por ejemplo, el uso de algoritmos muy pesados (impacto negativo) o decrecer el número de triángulos a renderizar (impacto positivo).

Debido al modelo base de implementación del software, no se divide en subetapas, como ocurre en las de geometría y rasterización. Sin embargo, se podría aumentar el rendimiento si, por ejemplo, partes del código se paralelizaran para que pudiese ser usado por diferentes nucleos de la CPU.

Un ejemplo de proceso típico que se implementa en esta etapa es la detección de colisiones. Tras la colisión de dos objetos, se envía la fuerza generada por el choque a los objetos para que estos reaccionen y se muevan. También se resuelven los eventos del teclado y ratón. Otros procesos suelen ser la animación de texturas u objetos.

Etapa de geometría

La etapa de geometría es la responsable de las operaciones sobre los polígonos y vértices. La etapa se divide en cinco subetapas, como podemos ver en la figura siguiente:

Hay que tener en cuenta que estas subetapas pueden variar dependiendo de cómo se implementen. En algunos casos pueden dividirse en pequeñas etapas paralelizables.

La etapa de la transformación del modelo y vista se encarga de controlar el sistema de coordenadas de los objetos y la cámara. Cada modelo tiene un sistema de coordenadas propio y los objetos de éste se transforman (mueven, rotan y escalan) de acuerdo a este eje de coordenadas y solo afecta a ellos mismos. La transformaciones en la cámara actuan de una forma distinta respecto a los objetos, estas afectan a todos los objetos de la escena. La etapa de vertex shading se encarga de dotar a los objetos del tipo de material (vienen predefinidos y pueden ser: plástico, metal, cristal, etc.) y aplicar los efectos que ejercen las luces sobre ellos. Tras el vertex shading el sistema de renderizado aplica la proyección, que se encarga de usar un método para la visualización. Los dos más comunes son la proyección ortográfica y perspectiva, esté último dota a la escena de una visión más realista. A continuación, la etapa clipping se encarga de cortar y eliminar los objetos y las partes de ellos que quedan fuera de la cámara y que no se tienen que renderizar. Por último, se aplicá el mapeo de pantalla coge la escena resultante de los anteriores pasos y la transforma para ajustarla a la pantalla que el programador haya configurado, para lo que muestra la escena y la ajusta a la ventana del programa.

Podemos observar que todas las subetapas podrían ejecutarse mediante software en un solo procesador, en ese caso se podría decir que éstas consisten en una sola tubería, como en el caso de la etapa de aplicación. Éste es el caso que se daba antes de que existieran los chips gráficos y todo se generaba mediante software.

Etapa de rasterización

La etapa de rasterización se encarga de, dado un vértice transformado y proyectado junto con sus datos de sombreado, calcular y elegir los colores de los píxeles que cubrirán el objeto en la pantalla. Este proceso se conoce como rasterización, que es la conversión de vértices en dos dimensiones en el espacio de la pantalla, junto con su valor de profundidad y sombreado, a píxeles del monitor.

Como en la etapa de geometría, ésta también se subdivide en diferentes subetapas, como podemos ver en la figura a continuación:

La etapa de triangle setup utiliza los datos de geometría y los aplica a la superficie de los triángulos. En la computación gráfica todos los objetos están formados por triángulos debido a que es la figura geométrica más simple al igual que las operaciones geométricasen ellos son las más sencillas. Por lo tanto, todos los objetos, por ejemplo una esfera, están formados por triángulos. Para la etapa de triangle traversal se comprueba si cada píxel de la ventana de la aplicación cubre algún triangulo de los objetos de la escena. Si el caso es afirmativo se usa la información de la etapa de geometría para rellenar ese píxel con la información. La siguiente etapa aplica el shader a cada píxel si lo hay. Esta etapa es totalmente programable, pero en la tubería fija está muy limitada, por lo que el shader (basicamente, un programa que realiza calculos gráficos) permite ejecutar diferentes técnicas sobre los píxeles de los objetos, una de las más importantes es aplicar texturas, o imágenes a los objetos. Como he comentado, en la tubería fija, para los shaders no existe una programación especifica y solo se encargan de añadir texturas a los objetos. Por último, la etapa de merging se encarga de almacenar todos los colores de cada píxel en un buffer y mezclarlos con los colores resultantes de la etapa de pixel shading. Pese a que no es programable si que es altamente configurable, lo que permite conseguir diferentes tipos de efectos.