1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "Eyeon Fusion & Generation", создана пользователем BlackAgate, 13 май 2010.

Модераторы: Григорий Чаленко
  1. BlackAgate vip

    BlackAgate Moderator Команда форума

    С нами с:
    24.02.2006
    Сообщения:
    2.309
    Симпатии:
    70
    Баллы:
    1.047
    Фьюжн очень оригинально отображает TGA с альфа-каналом. В RGB-режиме он отображает альфа-канал полностью белым и не дает примержить, скажем, черный бэграунд на задний фон. Хотя в режиме просмотра альфа-канала он там есть.
    При этом, если включить галку Post-multiply by alpha, то альфа-канал становится виден и в RGB режиме, но с белой окантовкой вокруг изображения (Pre-multiplied alpha при сохранении из макса включен).
    Не подскажете, что означает эта особенность, и заодно, что такое Post-multiply by alpha?
     

    Вложения:

    • 1779517.jpg
      1779517.jpg
      Размер файла:
      185,4 КБ
      Просмотров:
      105
  2. kIRr 15085

    kIRr 15085 Активный участник

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

    BlackAgate Moderator Команда форума

    С нами с:
    24.02.2006
    Сообщения:
    2.309
    Симпатии:
    70
    Баллы:
    1.047
    Получилось. А почему все так сложно? Почему нельзя просто отображать альфу, как в афтере? И что такое аддитивная картинка?
     
  4. Григорий Чаленко

    Григорий Чаленко Moderator Команда форума

    С нами с:
    23.04.2005
    Сообщения:
    1.997
    Симпатии:
    13
    Баллы:
    1.254
    После АЕ бывает трудно понять, как на самом деле устроен композ, т.к. адобовские софты работают по своим собственным правилам и порой, подменяют понятия.

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

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

    BlackAgate Moderator Команда форума

    С нами с:
    24.02.2006
    Сообщения:
    2.309
    Симпатии:
    70
    Баллы:
    1.047
    Я так понимаю, аддитивный мердж используется в паре с Pre-multiplied alpha, потому что используются только крайние цвета - черный и белый для заднего фона? И это позволяет максимально эффективно избавиться от окантовки вокруг объектов
     
  6. Григорий Чаленко

    Григорий Чаленко Moderator Команда форума

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

    GooD Знаток

    С нами с:
    19.12.2006
    Сообщения:
    114
    Симпатии:
    0
    Баллы:
    21
    Я в таких случаях, чтобы избавить себя от всяких формул, просто конекчу лоадер к мерджу на оба входа, ставлю оператор in, и режим subtractive. В лоадере ставлю галочку пост-мульт.
     
  8. Григорий Чаленко

    Григорий Чаленко Moderator Команда форума

    С нами с:
    23.04.2005
    Сообщения:
    1.997
    Симпатии:
    13
    Баллы:
    1.254
    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Д софтину и композ, считать сразу с черным фоном.
    Не знаю, где как, а в Софтимаже можно энвайронмент, или что там на фоне стоит, отключать в первичной видимости (будет виднеться только в рефлефракшенах и прочих глобально-иллюминальных радостях).
     
  9. BlackAgate vip

    BlackAgate Moderator Команда форума

    С нами с:
    24.02.2006
    Сообщения:
    2.309
    Симпатии:
    70
    Баллы:
    1.047
    Спасибо, эти формулы очень пригодились при рендере элементов послойно.
     
  10. BlackAgate vip

    BlackAgate Moderator Команда форума

    С нами с:
    24.02.2006
    Сообщения:
    2.309
    Симпатии:
    70
    Баллы:
    1.047
    А что означает, собственно, операция умножения или вычитания? Она происходит относительно RGBA-значений?
    Например, что происходит, если мы умножаем, складываем или вычитаем белый цвет на черный?
     
  11. kIRr 15085

    kIRr 15085 Активный участник

    С нами с:
    25.04.2006
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    11
    ну если белый взять за 1, черный за 0:
    1 * 0 = 0
    1 + 0 = 1
    1 - 0 = 1

    в соответствующих каналах
     
  12. BlackAgate vip

    BlackAgate Moderator Команда форума

    С нами с:
    24.02.2006
    Сообщения:
    2.309
    Симпатии:
    70
    Баллы:
    1.047
    В свою очередь, 0-1=-1? Или 0?
     
  13. kIRr 15085

    kIRr 15085 Активный участник

    С нами с:
    25.04.2006
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    11
    если 32bit float то -1
    если 16bit float то 0
     
  14. Григорий Чаленко

    Григорий Чаленко Moderator Команда форума

    С нами с:
    23.04.2005
    Сообщения:
    1.997
    Симпатии:
    13
    Баллы:
    1.254
    Любой флоат (и 16 и 32) поддерживает отрицательные значения, в отличие от интеджера.
     
  15. oleg verenko 104550

    oleg verenko 104550 Знаток

    С нами с:
    05.10.2009
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    21
    тогда, допустим, -1 -1 -1 - это какой цвет?
     
  16. Григорий Чаленко

    Григорий Чаленко Moderator Команда форума

    С нами с:
    23.04.2005
    Сообщения:
    1.997
    Симпатии:
    13
    Баллы:
    1.254
    Цвет объектов, поглощающих свет (наподобие черных дыр).

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

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

    kIRr 15085 Активный участник

    С нами с:
    25.04.2006
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    11
    в настройках булия еще нужно инвертнуть альфу
     
  18. Григорий Чаленко

    Григорий Чаленко Moderator Команда форума

    С нами с:
    23.04.2005
    Сообщения:
    1.997
    Симпатии:
    13
    Баллы:
    1.254
Модераторы: Григорий Чаленко

Поделиться этой страницей