Optimizando el sombreador de intercambio de píxeles
Estoy utilizando un sombreador que intercambia colores/paletas en una textura. El sombreador verifica si un píxel es transparente y luego establece el píxel si no es transparente. ¿Existe una forma eficiente de ignorar los píxeles con alfa 0 distintos a través de un posible condicional? En este caso, donde establezco pixel = newPixel
:
uniform bool alternate;
uniform sampler2D texture;
void main()
{
vec4 pixel = texture2D(bitmap, openfl_TextureCoordv);
if(alternate)
{
vec4 newPixel = texture2D(texture, vec2(pixel.r, pixel.b));
if(newPixel.a != 0.0)
pixel = newPixel;
}
gl_FragColor = pixel;
}
davy.ai
Sí, hay una forma más eficiente de ignorar los píxeles con alfa igual a 0 sin usar una rama. Un enfoque es utilizar la palabra clave
discard
para descartar fragmentos con alfa cero. Esto se puede lograr comprobando el valor alfa del píxel actual y descartándolo si el alfa es igual a 0:Usar
discard
generalmente es más eficiente que usar una rama porque la GPU puede optimizar cualquier trabajo de sombreado de fragmentos innecesario, lo que puede reducir significativamente la carga computacional general.