Render.ru

Некорректное поведение прозрачных областей

Дима Ярков

Администратор Арх. Галереи
Команда форума
Рейтинг
829
#1
Фьюжн очень оригинально отображает TGA с альфа-каналом. В RGB-режиме он отображает альфа-канал полностью белым и не дает примержить, скажем, черный бэграунд на задний фон. Хотя в режиме просмотра альфа-канала он там есть.
При этом, если включить галку Post-multiply by alpha, то альфа-канал становится виден и в RGB режиме, но с белой окантовкой вокруг изображения (Pre-multiplied alpha при сохранении из макса включен).
Не подскажете, что означает эта особенность, и заодно, что такое Post-multiply by alpha?
 

Вложения

kIRr 15085

Активный участник
Рейтинг
11
#2
Фьюжен отображает как есть. Оригинально отображает after effect, который в принципе не знает что такое аддитивная картинка. У вас тот самый случай.
Можно поступить сл.образом:
1. Рендерить на черном фоне
2. Либо если так нужен белый, то его можно убрать. На практике можно убрать любой фон, надо только иметь этот фон отдельно.
В данном случае он равномерно белый. Сделайте background таким же цветом и размером как исходник. Затем нужно вычесть из исходной картинки background помноженный на обратную альфу картинки.
Поключите картинку и background к custom tool. В нем вбейте c1-c2*(1-a1), где с1 исходная картинка, а c2 - background.
 

Дима Ярков

Администратор Арх. Галереи
Команда форума
Рейтинг
829
#3
Получилось. А почему все так сложно? Почему нельзя просто отображать альфу, как в афтере? И что такое аддитивная картинка?
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#4
После АЕ бывает трудно понять, как на самом деле устроен композ, т.к. адобовские софты работают по своим собственным правилам и порой, подменяют понятия.

Вот формула аддитивного мерджа:
BG*(1-FGa)+FG
где
BG - цвет нижнего слоя
BGa - альфа нижнего слоя
FG - цвет верхнего слоя
FGa - альфа верхнего слоя

Т.е. цвет фона умножается на инверсную альфу верхнего слоя, потом добавляется цвет верхнего слоя. Все просто.
 

Дима Ярков

Администратор Арх. Галереи
Команда форума
Рейтинг
829
#5
Я так понимаю, аддитивный мердж используется в паре с Pre-multiplied alpha, потому что используются только крайние цвета - черный и белый для заднего фона? И это позволяет максимально эффективно избавиться от окантовки вокруг объектов
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#6
В общем-то, pre-multiplied by alpha подразумевает черный цвет там, где 100% прозрачность.
Это не Альфа предумножена, как можно заключить из АЕ-шного интерфейса, а РГБ умножены на альфу.
Там, где альфа=0 (максимальная прозрачность), РГБ тоже будут равны 0 (черный цвет).
 

GooD

Активный участник
Рейтинг
11
#7
Я в таких случаях, чтобы избавить себя от всяких формул, просто конекчу лоадер к мерджу на оба входа, ставлю оператор in, и режим subtractive. В лоадере ставлю галочку пост-мульт.
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#8
Good В таком варианте подъедается граница объектов.

Если хочется обойтись без формул, нужны следующие приборы и материалы:
ChannelBoolean - 1 шт.
Чистый фон без переднепланового объекта (в данном случае - Background, окрашенный в равномерный белый) - 1 шт.

1. В желтенький инпут Булиня втыкаем горемычный рендер с белым фоном.
2. В зелененький инпут Булиня втыкаем ноду Background, окрашенную в белый (цвет фона).
3. В сиреневенький инпут Булиня втыкаем, опять же, горе-лоадер (булинь возьмет альфу в качестве маски).
4. В настройках Булиня ставим:
Operation = Subtract
To Red = Red FG
To Green = Green FG
To Blue = Blue FG
To Alpha = Do Nothing

Математика та же - инструменты разные.

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

Дима Ярков

Администратор Арх. Галереи
Команда форума
Рейтинг
829
#9
Спасибо, эти формулы очень пригодились при рендере элементов послойно.
 

Дима Ярков

Администратор Арх. Галереи
Команда форума
Рейтинг
829
#10
А что означает, собственно, операция умножения или вычитания? Она происходит относительно RGBA-значений?
Например, что происходит, если мы умножаем, складываем или вычитаем белый цвет на черный?
 

kIRr 15085

Активный участник
Рейтинг
11
#11
ну если белый взять за 1, черный за 0:
1 * 0 = 0
1 + 0 = 1
1 - 0 = 1

в соответствующих каналах
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#16
Цвет объектов, поглощающих свет (наподобие черных дыр).

Если серьезно, то это может пригодиться в такой ситуации:
Выкручиваем контраст так, что темные области уходят в черное. Если затем, по каким-то причинам нужно дополнительно цветокорректить, при высветлении черные области не становятся плоскими серыми. На них проявляются детали.

Такое происходит часто при дефолтной конверсии логарифмических ДПХ в линейное пространство.
Т.е. умолчальная точка черного 95 светлее некоторых деталей скана. Если работать в линейном интеджер, назад вернуть в логарифмическое пространство без потерь не получится (будет плоская заливка одним цветом в тенях). Если же работать во флоат пойнт, этой проблемы не возникнет.
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#18
Сверху