Обновить

Куда девается свечение при сохранении в PNG. Два формата прозрачности, о которых почти никто не знает

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели91K
Всего голосов 45: ↑44 и ↓1+51
Комментарии25

Комментарии 25

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

Да, если смотреть только на RGB, кажется, будто справа «зашит чёрный фон». На самом деле это не фон, а уже выполненное умножение цвета на альфу.

Такую картинку нельзя просто положить на другой фон как обычный PNG. Её композят так:

RGB_{фон} × (1 − α) + RGB

Тогда тёмная кайма не появляется: поскольку изображение сверху добавляется через ADD. Напомню ADD это операция когда цвета становятся ярче, но никак не темнее. Кайма возникает, когда premultiplied принимают за straight и умножают на альфу второй раз — об этом как раз абзац про чёрный контур вокруг огня.

Зачем так хранить:

  • в одном слое можно держать (и, главное, рендерить) и полупрозрачность, и свечение (огонь, glare, блик), это я указал в статье

  • при мипмапинге и фильтрации такая альфа ведёт себя лучше;

  • рендер, Nuke, Fusion, работают именно с таким типом альфы. Это - стандарт композа.

А как для игр экспортят такие текстуры со свечением и нулевой альфой, если в PNG некрасиво? Делают две текстуры и смешивают на рендере? Или другой формат изображений берут?

Просто переключатель в настройках текстуры типа такого: https://docs.unity3d.com/6000.1/Documentation/Manual/urp/blending-modes.html

По самому файлу не поймёшь, там straight или premultiplied, так же как не поймёшь нормали там direct x или openGL

direct x или openGL

Любопытно, а в чём разница?

Прямо сейчас видео посмотреть не могу, но ведь это только для Fixed Function Pipeline? На шейдерах же можно как угодно карты нормалей сделать.

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

В системе координат, в Dx она леворукая, в огл праворукая(или наоборот, точно не помню) отсюда и разная работа с нормалмапами, потому что они запекаются в тангентспэйсе.

Хороший вопрос на самом деле, я не знаю какой там пайплайн. Я заметил, что если сохранить в tiff, то 8bit выводится straight, а 16bit premultiplied. По идее можно сохранить в 16bit tiff, a потом уже где собирается атлас сохранить во что-то более удобное.

Полученные изображения нужно проявить на одну плёнку.

То ли авто генерация, то ли автор не понимает процессов в плёночной фотографии и киносъёмке.

генерация, кругом генерация!

Просто скриншот нельзя сделать?

ПО для композинга обычно поддерживает premultiplied alpha и в формате PNG, нужно просто поставить соответствующую галочку при импорте. Никогда не испытывал с этим проблем, видишь темный контур и сразу знаешь что нужно включить.

Ха-ха, да, но проблема не в импорте, а экспорте. Проблема в том как рендер из Blender сохранить в PNG с premultiplied alpha. До 2.8 можно было выбрать формат при сохранении, а в современных версиях выбора нет.

Разве Alpha Convert Node вопрос не решает? Blender все равно будет делить альфу для PNG с потерей данных?

насчет Straight alpha: насколько помню, в браузерах будет не 50/50, а

50% opacity means, 50% of the light is blocked
50% + (50% * 50%) = 75% opacity.

(это если два слоя по 0.5 миксовать)

ну или если более точно

Total Opacity = First Opacity + (100 - First Opacity) * Second Opacity

при этом first - это тот, что снизу.

сверялся с этим обсуждением и на практике вроде все сходилось

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

а, т.е. альфа только у одного.

Полученные изображения нужно проявить на одну плёнку.

Тут я споткнулся. Не проявить, а снять на одну пленку?

Ну да, спроецировать, наверное точнее

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

По сути статья не про разные альфы, а по разные способы композа, которых к слову не 2 а гораздо больше. И если говорить про GAPI то каждая операция над текущими данными и бэком настраивается через параметры смешивания.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации