Q:

GLSL текстурирование по маске

Текстурирую следующим образом:
gl_FragColor=vec4(0.0);

gl_FragColor= mix(gl_FragColor,texture2D(texture[1], 32.0*vUv),texture2D(mask[0], vUv).r);
gl_FragColor= mix(gl_FragColor,texture2D(texture[2], 32.0*vUv),texture2D(mask[0], vUv).b);

используя маску:

Но почему-то на границе между красной и синей маской не хватает цветности, хотя сумма каналов для любого пискселя между синей и красной маской = 255.
Например, имея следующий код
   gl_FragColor=vec4(0.0);

   gl_FragColor= mix(gl_FragColor,vec4(1.0),texture2D(mask[0], vUv).r);
   gl_FragColor= mix(gl_FragColor,vec4(1.0),texture2D(mask[0], vUv).b);

я получаю: 

затемненная окружность - это и есть граница между красной и синей маской, ее не должно быть.
Как избавиться от этого?
Возможно, причина в использовании mix(), и есть другие способы получения нужного результата?

A:

Строки 
   gl_FragColor= mix(gl_FragColor,vec4(1.0),texture2D(mask[0], vUv).r);
   gl_FragColor= mix(gl_FragColor,vec4(1.0),texture2D(mask[0], vUv).b);

нужно заменить на 
vec4 m0=texture2D(mask[0], vUv);
gl_FragColor= gl_FragColor*(1.0-m0.r-m0.b)+vec4(1.0)*m0.r+vec4(1.0)*m0.b;

где vec4(1.0) могут быть разные текстуры.
Тогда неприятное затемнение на градиенте между масками пропадает, к тому же это работает быстрее.

