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 de enteros que, a continuación, 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 asigna, 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 se encuentra 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.
La cubierta de gris claro y oscuro de los píxeles los muestra como grupos de los píxeles para indicar qué triángulos 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 x-major (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 diamante excluye (mostrado puntos) 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 sea 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 diamante, 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.
Reglas de rasterización de línea (suavizado, sin muestreo múltiple)
Una línea suavizada se rasteriza como si fuera un rectángulo (con ancho = 1). El rectángulo se interseca 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 preformado al dibujar líneas en un destino de representación de muestreo múltiple.
Se considera que no hay una única manera "mejor" de realizar la representación de líneas antialiased. Direct3D adopta como una guía el método que se muestra en la ilustración siguiente. Este método se derivaba empíricamente, mostrando una serie de propiedades visuales consideradas deseables.
El hardware no necesita coincidir exactamente con este algoritmo; las pruebas con respecto a 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 a las aplicaciones, más allá de simplemente dibujar líneas y observar o medir cómo se ven.
Este algoritmo genera líneas relativamente suaves, con intensidad uniforme, con bordes irregulares mínimos o trenzas. El patrón moire para las líneas de cierre se minimiza. Hay una buena cobertura para 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 fusión de salida (OM):
srcColor * srcAlpha + destColor * (1-srcAlpha)
Reglas de rasterización de puntos (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.
Reglas de rasterización de suavizado multisample
El suavizado multimuestra (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 submuestras. Para mejorar el rendimiento, los cálculos por píxel se realizan una vez para cada píxel cubierto, al compartir salidas del sombreador en sub píxeles cubiertos. El suavizado 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.
El número de ubicaciones de ejemplo depende del modo multisample. 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 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 de 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 pasa 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).
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 muestras individuales a las que accede el sombreador. Los formatos de profundidad no se admiten para el recurso multimple, por lo que los formatos de profundidad están restringidos solo a los destinos de representación.
Los formatos sin tipo admiten el muestreo múltiple para permitir que una vista de recursos interprete los datos de diferentes maneras. Por ejemplo, podría 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 con 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 nivel de calidad y formato determinado). 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 multimuestra; Si el centro de píxeles no está cubierto, los atributos se extrapolan a un centro de píxeles. Si una entrada del 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 del área cubierta del píxel, posiblemente en una de las ubicaciones de ejemplo cubiertas. Se aplica una máscara de ejemplo (especificada por el estado de 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 ninguno de los ejemplos está cubierto. De lo contrario, se elige la primera muestra cubierta, empezando por el centro de píxeles y moviéndose hacia fuera.
- La máscara de ejemplo desactiva todas las muestras, pero una (un escenario común). Una aplicación puede implementar supermuestreo de varios pasos mediante el ciclismo a través de valores de máscara de muestra de un solo bit y volver a representar la escena para cada muestra mediante el muestreo centroide. Esto requeriría que una aplicación ajuste los derivados para seleccionar las mips de textura más detalladas apropiadamente 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 2x2 píxeles para admitir cálculos derivados, que se calculan tomando diferencias entre los datos de píxeles adyacentes (suponiendo que los datos de cada píxel se muestrean con espaciado de unidad horizontal o vertical). 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 no unitaria 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 muestreados.
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 texturas que derivan loD.
Temas relacionados