Вопрос

Я играю с некоторой ручной обработкой изображений ручной (прогулки по пикселям) и воссоздаю стандартную смесь «наложения». Я смотрю на макросы "Photoshop Math" здесь:

http://www.nathanm.com/photoshop-blending-math/ (Смотрите также здесь Для более читаемой версии наложения)

Оба изображения исходных изображений находятся в довольно стандартном формате RGBA (8 бит каждый), как и пункт назначения. Когда оба изображения полностью непрозрачны (альфа - 1,0), результат смешан правильно, как и ожидалось:

Но если мой слой «смешивания» (верхнее изображение) обладает прозрачностью, я немного покинул Как включить эту альфа в уравнение смешивания правильно. Я ожидаю, что это будет работать так, что прозрачные пиксели в слое смеси не влияют на результат, непрозрачные пиксели в слое смеси делают накладную смеси как нормальные, а пиксели с полузащитным слоем оказывают некоторое масштабированное влияние на результат.

Может ли кто -нибудь объяснить мне уравнения смеси или концепцию, стоящую за этим?

Бонусные очки Если вы можете помочь мне сделать это так, что результирующее изображение было правильно предсказанной альфа (которая вступает в игру только для пикселей, которые не являются непрозрачными в обоих слоях, я думаю).

Спасибо!

// 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??
Это было полезно?

Решение

Просто предположение, но я бы попробовал

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

Другие советы

После смешивания базового цвета и цвета смеси смешайте оригинальный базовый цвет и цвет, возникающий в результате смешивания, используя альфа цвета смеси:

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

Я использую это для «наложения», смешивая непрозрачный базовый цвет и смесь текстуры, которая имеет много (полу) прозрачных пикселей.

Я точно экспериментировал с этой проблемой, пока не узнал, что лучшее - иметь основание и слой смеси с прямой альфа, а затем преднамеренный только результат с базовой альфа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top