Не забывать!

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

среда, 21 октября 2015 г.

Операция unpremult alpha в photoshop

Нужно поделить rgb на alpha. Т.е. положить ее слоем поверх с режимом divide.

Бывает мы имеем рендереное изображение на черном фоне с альфой и когда накладываешь его оно обладает черным контуром. Для избавления от артифакта слжит такое понятие как premult alpha. Это умножение на альфу фона, на который будет накладываться изображение. Получается черная дырка. А потом просто аддитивно кладется рендереное изображение. Все встает на место. У нас другой случай.
Нужно сделать текстуру с альфой, которая будет использоваться движком. Там все не так. Поэтому нужно сделать операцию наоборот, что называется unpremult. Значит надо поделить наше изображение на альфу. Так мы получим истинный цвет пикселей, что были до смешивания с черным фоном. С некоторой степенью неточности, разумеется.
Для этого копируем альфу в слой и смешиваем операцией divide. После сможем положить на любой фон:

1, 2 - RGB, Alpha
3 - unpremult (alpha blend over as «Divide»)
4, 5, 6 - place on black and other colors


Слабые по прозрачности полоски на черном фоне обрабатываются хорошо. Низкая прозрачность превратила полоски в белый цвет и потом они снова видны. Вот хороший пример с плавным цветным сердечком. Бывают трудности:


Здесь исправляется подтягиванием точки черного у слоя альфы, чтобы  не было деление на слишком малое число и как результат яркие контуры.  
Вот облака с испорченной альфой, которую так же можно исправить. Все изображения взяты с инета, поэтому альфы не точные. 


Здесь исправляется контур так же. И еще немного изменил гамму. В общем можно подобрать лучший результат и далее с ним работать.

Теперь надо проверить имитацией правильной альфы. Я беру изображение, крашу кистью ему маску и обрабатываю блюром, потому как кисть как правило имеет Dither. Еще я расчеты проводил в 16bit. Так же mips создаются с этого хорошо. Нет багов никаких.



Иногда еще хуже бывает отрендерено на цветном фоне. Это не про хромокей. Раз уж будет альфа, тогда рендерить лучше на черном фоне. Странно но бывает. при исправлении с цветного фона конечно точность может быть ниже. Короче можно воспользоваться таким способом: нужно работать в 32bit и перед unpremult надо отнять цвет фона от всего изображения, после прибавить вновь.

Конечно в фотошопе есть операция в меню слой>чегототам и вы получаете то же по сути. Однако там есть условие: ваша альфа должна быть в маске и в результате вы получаете слой уже вырезанный с прозрачностью. Мне же требуется нормальный rgb и отдельно alpha для текстуры в dds.