Pregunta

Estoy jugando con algunos (walk-the-píxeles) Manual de procesamiento de imágenes, y estoy recreando el estándar mezcla de "superposición". Estoy mirando las macros "Photoshop" matemáticas aquí:

http://www.nathanm.com/photoshop-blending-math/ ( Ver también aquí para la versión más fácil de Overlay)

Las dos imágenes son fuente de RGBA bastante estándar (8 bits cada uno) de formato, como es el destino. Cuando ambas imágenes son completamente opaco (alfa es 1,0), el resultado se mezcla correctamente como se esperaba:

Pero si mi capa "mezcla" (imagen de arriba) tiene la transparencia en ella, estoy un poco desconcertado como a cómo el factor alfa que en la mezcla ecuación correctamente. Espero que funcione de tal manera que los píxeles transparentes en la capa de mezcla tienen ningún efecto en el resultado, los píxeles opacos en la capa de mezcla hacer la mezcla de superposición de forma normal, y semitransparentes píxeles de la capa de mezcla tener algún efecto en escala en el resultado.

Puede alguien me explique las ecuaciones de mezcla o el concepto detrás de hacer esto?

puntos prima si puede ayudarme a hacerlo de tal manera que la imagen resultante ha premultiplicado correctamente alfa (que sólo entra en juego para los píxeles que no son opacas en ambas capas, creo.)

Gracias!

// factor in blendLayerA, (1-blendLayerA) somehow?
resultR = ChannelBlend_Overlay(baseLayerR, blendLayerR); 
resultG = ChannelBlend_Overlay(baseLayerG, blendLayerG);
resultB = ChannelBlend_Overlay(baseLayerB, blendLayerB);
resultA = 1.0; // also, what should this be??
¿Fue útil?

Solución

Sólo una conjetura, pero me gustaría probar

resultA = 1 - (1-baseAlpha) * (1-blendAlpha)

Otros consejos

Después de la mezcla del color base y el color de mezcla, mezclar el color de base original y el color resultante de la mezcla utilizando la alfa del color de fusión:

vec4 baseColor = ...;
vec4 blendColor = ...;
vec4 blendedColor = blend(baseColor, blendColor);
vec4 fragmentColor = (1.0 - blendColor.a) * baseColor + blendColor.a * blendedColor;

I uso para "superposición" la mezcla de un color base opaca y una textura mezcla que tiene una gran cantidad de (semi) píxeles transparentes.

Me estaba experimentando con este problema exactamente, hasta que descubrí que la mejor es tener la base y la capa de mezcla tanto con alfa recta, entonces premultiplicar sólo el resultado con el alfa de base.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top