¿Cómo calculo con precisión la cobertura de las curvas analíticas superpuestas?

10

La polarización de formas 2D se reduce a calcular la fracción de un píxel que está cubierta por la forma. Para formas simples que no se superponen, esto no es demasiado difícil: recorta la forma contra el rectángulo de píxeles y calcula el área de la forma resultante. Pero se vuelve más difícil si varias formas se superponen al mismo píxel. Simplemente sumar áreas puede hacer que la cobertura calculada sea demasiado alta, si descuida la cantidad en que una forma cubre otra. Por ejemplo, consulte la sección Limitaciones de este artículo sobre representación de fuentes . También puede encontrarse en una situación en la que las dos curvas provienen de diferentes objetos con diferentes colores (por lo que no se trata de la cobertura total para la unión de las dos formas, sino de la cobertura de cada una por separado).

¿Cómo se calcularía esto si le interesara la precisión completa? Aún más complicado, ¿cómo calcula la cobertura con precisión para la superposición de formas no poligonales como las curvas? ¿Hay algún punto en el que no tenga más remedio que recurrir a técnicas de muestreo múltiple o estocástico?

John Calsbeek
fuente

Respuestas:

10

Realmente no hay una buena manera de hacer esto de manera analítica eficiente para todos los casos de esquina. La mayoría o todos los renderizadores 2D comerciales que intentan realizar cálculos de cobertura analítica cometen errores predecibles que los métodos de muestreo múltiple no.

Un problema típico son dos formas superpuestas que comparten el mismo borde. La situación común es que los canales alfa suman un borde alfa demasiado grueso que se alias ligeramente. O si las formas tienen colores diferentes, el sistema confunde de qué color es el fondo. Esto es extremadamente molesto.

imagen

Imagen 1 : El motor de renderizado confunde la cobertura y crea un contorno blanco delgado donde no debería haber ningún contorno.

La segunda cobertura perfecta equivale al filtrado de cajas. Ciertamente podemos hacerlo mejor. Teniendo en cuenta que hay tantos casos de esquina especiales que requerirían operaciones booleanas en las formas para hacer lo correcto, el supermuestreo sigue siendo superior. De hecho, las estimaciones de cobertura pueden usarse para concentrar el muestreo donde es más probable que sea necesario.

La situación podría simplificarse a polígonos en niveles de subpíxel y luego la solución analítica discreta podría resolverse. Pero esto a expensas de la flexibilidad. Por ejemplo, no está fuera de discusión que los futuros sistemas vectoriales podrían querer permitir líneas borrosas de ancho variable que representan un problema para las soluciones analíticas, al igual que otros objetos de colores variables.

Cómo hacerlo analíticamente

Escena analítica

Imagen 2 : suponga que tiene esta escena, vista despiezada a la derecha

Ahora no solo puede hacer esto analíticamente, cada pieza por separado y luego fusionar los datos. Porque da como resultado datos incorrectos. Ver la mezcla alfa permitiría que el azul brille a través de los huecos si lo hiciera.

Lo que tienes que hacer es dividir la escena para que cada forma elimine lo que está debajo de la otra:

ingrese la descripción de la imagen aquí

Imagen 3 : necesita cortar las superficies subyacentes.

Ahora, si todo es opaco, todo esto es sencillo. simplemente calcule el área de cada pieza y multiplíquela por el color y sumelas. Ahora puedes usar algo como esto .

Todo esto se rompe si sus formas individuales no son opacas, pero incluso eso se puede hacer en algún nivel.

Recuerda:

  • El cálculo de AA debe hacerse en un espacio de color lineal y volver a convertirse para usar el espacio.
joojaa
fuente
Digamos que no nos importa mucho la eficiencia. ¿Cómo haríamos para hacer cálculos de cobertura para operaciones booleanas en formas? ¿Es eso posible en general, o solo para formas específicas?
John Calsbeek
@JohnCalsbeek ok, estoy empezando a construir la respuesta analítica, tomará un tiempo
joojaa