Compartir a través de


Reglas de rasterización

Las reglas de rasterización definen cómo se asignan los datos vectoriales a los datos ráster. Los datos ráster se acoplan a ubicaciones enteras que luego se seleccionan y recortan (para dibujar el número mínimo de píxeles) y los atributos por píxel se interpolan (de atributos por vértice) antes de pasarse a un sombreador de píxeles.

Hay varios tipos de reglas, que dependen del tipo de primitivo que se está asignando, así como de si los datos usan o no el muestreo múltiple para reducir el alias. En las ilustraciones siguientes se muestra cómo se controlan los casos de esquina.

Reglas de rasterización de triángulos (sin muestreo múltiple)

Cualquier centro de píxeles que caiga dentro de un triángulo se dibuja; se supone que un píxel está dentro si pasa la regla de la parte superior izquierda. La regla superior izquierda es que un centro de píxeles se define para estar dentro de un triángulo si se encuentra en el borde superior o en el borde izquierdo de un triángulo.

Donde:

  • Un borde superior, es un borde que es exactamente horizontal y está por encima de los otros bordes.
  • Un borde izquierdo es un borde que no es exactamente horizontal y está en el lado izquierdo del triángulo. Un triángulo puede tener uno o dos bordes izquierdos.

La regla superior izquierda garantiza que los triángulos adyacentes se dibujan una vez.

En esta ilustración se muestran ejemplos de píxeles que se dibujan porque se encuentran dentro de un triángulo o siguen la regla superior izquierda.

Ilustración de ejemplos de rasterización de triángulo superior izquierdo

La cubierta de gris claro y oscuro de los píxeles los muestra como grupos de píxeles para indicar qué triángulo están dentro.

Reglas de rasterización de línea (con alias, sin muestreo múltiple)

Las reglas de rasterización de línea usan un área de prueba de diamantes para determinar si una línea cubre un píxel. Para las líneas principales x (líneas con -1 <= pendiente <= +1), el área de prueba de diamantes incluye (se muestra sólido) el borde inferior izquierdo, el borde inferior derecho y la esquina inferior; el rombo excluye (se muestra punteado) el borde superior izquierdo, el borde superior derecho, el cordón superior, la esquina izquierda y la esquina derecha. Una línea y-major es cualquier línea que no es una línea x-major; el área de diamante de prueba es la misma que se describe para la línea x-major, excepto la esquina derecha también está incluida.

Dado el área de diamantes, una línea cubre un píxel si la línea sale del área de prueba de diamantes del píxel cuando viaja a lo largo de la línea desde el principio hacia el final. Una franja de líneas se comporta igual que se dibuja como una secuencia de líneas.

En la ilustración siguiente se muestran algunos ejemplos.

Ilustración de ejemplos de rasterización de líneas con alias

Reglas de rasterización de líneas (suavizado, sin muestreo múltiple)

Una línea suavizada se rasteriza como si fuera un rectángulo (con ancho = 1). El rectángulo forma intersección con un destino de representación que genera valores de cobertura por píxel, que se multiplican en componentes alfa de salida del sombreador de píxeles. No hay ningún suavizado previo al dibujar líneas en un destino de representación multimuestreo.

Se considera que no hay una única manera "mejor" de realizar la representación de líneas suavizadas. Direct3D 10 adopta como guía el método que se muestra en la ilustración siguiente. Este método se deriva empíricamente, mostrando una serie de propiedades visuales que se consideran deseables. El hardware no necesita coincidir exactamente con este algoritmo; las pruebas contra esta referencia tendrán tolerancias "razonables", guiadas por algunos de los principios enumerados más adelante, lo que permitirá varias implementaciones de hardware y tamaños de kernel de filtro. Sin embargo, ninguna de estas flexibilidades permitidas en la implementación de hardware se puede comunicar a través de Direct3D 10 a las aplicaciones, más allá de simplemente dibujar líneas y observar o medir cómo se ven.

Ilustración de ejemplos de rasterización de líneas suavizadas

Este algoritmo genera líneas relativamente suaves, con intensidad uniforme, con bordes irregulares mínimos o trenzados. El patrón moire para las líneas de cierre se minimiza. Hay una buena cobertura para las uniones entre segmentos de línea colocados de un extremo a otro. El kernel de filtro es un equilibrio razonable entre la cantidad de borroso del borde y los cambios de intensidad causados por correcciones gamma. El valor de cobertura se multiplica en sombreador de píxeles o0.a (srcAlpha) por la siguiente fórmula por la fase de fusión de salida: srcColor * srcAlpha + destColor * (1-srcAlpha).

Reglas de rasterización de punto (sin muestreo múltiple)

Un punto se interpreta como si estuviera compuesto de dos triángulos en un patrón Z, que usa reglas de rasterización de triángulos. La coordenada identifica el centro de un cuadrado ancho de un píxel. No hay selección de puntos.

En la ilustración siguiente se muestran algunos ejemplos.

Ilustración de ejemplos de rasterización de puntos

Reglas de rasterización de suavizado de contorno multisample

El suavizado de contorno multimuestro (MSAA) reduce el alias de geometría mediante pruebas de cobertura de píxeles y galería de símbolos de profundidad en varias ubicaciones de submuestaña. Para mejorar el rendimiento, los cálculos por píxel se realizan una vez para cada píxel cubierto, compartiendo salidas del sombreador en sub píxeles cubiertos. El suavizado de contorno multisample no reduce el alias de superficie. Las ubicaciones de ejemplo y las funciones de reconstrucción dependen de la implementación del hardware.

En la ilustración siguiente se muestran algunos ejemplos.

Ilustración de ejemplos de rasterización de antialias multisample

El número de ubicaciones de ejemplo depende del modo de varias muestras. Los atributos de vértice se interpolan en los centros de píxeles, ya que aquí es donde se invoca el sombreador de píxeles (esto se convierte en extrapolación si el centro no está cubierto). Los atributos se pueden marcar en el sombreador de píxeles para muestrear el centroide, lo que hace que los píxeles no cubiertos interpolen el atributo en la intersección del área del píxel y el primitivo. Un sombreador de píxeles se ejecuta para cada área de píxeles 2x2 para admitir cálculos derivados (que usan deltas x e y). Esto significa que las invocaciones del sombreador se producen más de lo que se muestra para rellenar el cuantita mínimo de 2x2 (que es independiente del muestreo múltiple). El resultado del sombreador se escribe para cada muestra cubierta que supera la prueba de galería de símbolos de profundidad por muestra.

Las reglas de rasterización para primitivos son, en general, sin cambios en el suavizado multisample, excepto:

  • Para un triángulo, se realiza una prueba de cobertura para cada ubicación de ejemplo (no para un centro de píxeles). Si se cubre más de una ubicación de ejemplo, un sombreador de píxeles se ejecuta una vez con atributos interpolados en el centro de píxeles. El resultado se almacena (replica) para cada ubicación de ejemplo cubierta en el píxel que pasa la prueba de profundidad/galería de símbolos.

    Una línea se trata como un rectángulo formado por dos triángulos, con un ancho de línea de 1,4.

  • Para un punto, se realiza una prueba de cobertura para cada ubicación de ejemplo (no para un centro de píxeles).

Muchos formatos admiten el muestreo múltiple (consulta Compatibilidad de hardware con formatos Direct3D 10), algunos formatos se pueden resolver (ResolveSubresource; que reduce el muestreo de un formato multimuestreo a un tamaño de muestra de 1). Los formatos de muestreo múltiple se pueden usar en destinos de representación que se pueden leer de nuevo en sombreadores mediante la carga, ya que no se requiere ninguna resolución para las muestras individuales a las que accede el sombreador. Los formatos de profundidad no se admiten para recursos de varios ejemplos, por lo tanto, los formatos de profundidad solo se restringen a los destinos de representación.

Los formatos sin tipos (R8G8B8A8_TYPELESS por ejemplo) admiten el muestreo múltiple para permitir que una vista de recursos interprete los datos de maneras diferentes. Por ejemplo, puede crear un recurso de varios ejemplos mediante R8G8B8A8_TYPELESS, representarlo mediante un recurso render-target-view con un formato de R8G8B8A8_UINT y, a continuación, resolver el contenido en otro recurso con un formato de datos R8G8B8A8_UNORM.

Compatibilidad de hardware

La API informa de la compatibilidad de hardware con el muestreo múltiple a través del número de niveles de calidad. Por ejemplo, un nivel de calidad 0 significa que el hardware no admite el muestreo múltiple (en un determinado formato y nivel de calidad). Un 3 para los niveles de calidad significa que el hardware admite tres diseños de ejemplo diferentes o resolver algoritmos. También puede suponer lo siguiente:

  • Cualquier formato que admita el muestreo múltiple, admite el mismo número de niveles de calidad para cada formato de esa familia.
  • Todos los formatos que admiten el muestreo múltiple y tienen los formatos _UNORM, _SRGB, _SNORM o _FLOAT, también admite la resolución.

Muestreo centroide de atributos cuando el suavizado multisample

De forma predeterminada, los atributos de vértice se interpolan a un centro de píxeles durante el suavizado de contorno multisample; Si el centro de píxeles no está cubierto, los atributos se extrapolan a un centro de píxeles. Si una entrada de sombreador de píxeles que contiene la semántica centroide (suponiendo que el píxel no está totalmente cubierto) se muestreará en algún lugar dentro del área cubierta del píxel, posiblemente en una de las ubicaciones de muestra cubiertas. Se aplica una máscara de ejemplo (especificada por el estado del rasterizador) antes del cálculo centroide. Por lo tanto, un ejemplo enmascarado no se usará como ubicación centroide.

El rasterizador de referencia elige una ubicación de ejemplo para el muestreo centroide similar al siguiente:

  • La máscara de ejemplo permite todas las muestras. Use un centro de píxeles si el píxel está cubierto o si no se trata ninguna de las muestras. De lo contrario, se elige la primera muestra cubierta, empezando por el centro de píxeles y moviéndose hacia afuera.
  • La máscara de ejemplo desactiva todas las muestras, pero una (un escenario común). Una aplicación puede implementar el supermuestreo de varios pasos mediante el ciclo a través de valores de máscara de muestra de un solo bit y volver a representar la escena para cada ejemplo mediante el muestreo centroide. Esto requeriría que una aplicación ajuste los derivados para seleccionar adecuadamente mips de textura más detallados para la mayor densidad de muestreo de textura.

Cálculos derivados al muestreo múltiple

Los sombreadores de píxeles siempre se ejecutan con un área mínima de 2 x 2 píxeles para admitir cálculos derivados, que se calculan tomando deltas entre datos de píxeles adyacentes (suponiendo que los datos de cada píxel se muestrean con espaciado de unidad horizontal o verticalmente). Esto no se ve afectado por el muestreo múltiple.

Si se solicitan derivados en un atributo que se ha muestreado centroide, el cálculo de hardware no se ajusta, lo que puede provocar derivados inexactos. Un sombreador esperará un vector de unidad en el espacio de destino de representación, pero puede obtener un vector que no es de unidad con respecto a algún otro espacio vectorial. Por lo tanto, es responsabilidad de una aplicación mostrar precaución al solicitar derivados de atributos que se muestrea centroide. De hecho, se recomienda no combinar derivados ni muestreo centroide. El muestreo centroide puede ser útil para situaciones en las que es fundamental que los atributos interpolados de un primitivo no se extrapolan, pero esto viene con desventajas como atributos que parecen saltar donde un borde primitivo cruza un píxel (en lugar de cambiar continuamente) o derivados que no se pueden usar mediante operaciones de muestreo de textura que derivan loD.

Etapa del rasterizador