ФлеймФорумРазработка игр

Пропаганда Premultiplied Alpha (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
18:35, 22 дек 2023

Имбирная Ведьмочка
> Ну и какая тогда разница?
Ну так более прямой и непосредственный вывод, без привлечения случайных процессов.

#31
20:33, 22 дек 2023

}:+()___ [Smile]
> Именно! И эта новая альфа должна быть гамма-скорректированной
извиняюсь, но вроде как свет рассчитывается линейно, без учета гамма-коррекции, а вот применяется гамма коррекция уже в финале при умножении освещения на альбедо.

#32
21:00, 22 дек 2023

Ruslan
> извиняюсь, но вроде как свет рассчитывается линейно, без учета гамма-коррекции,
> а вот применяется гамма коррекция уже в финале при умножении освещения на
> альбедо.
Всё верно, рассчитывается в линейном пространстве.
Гамма коррекция нужна, сугубо чтобы хранить данные в одном байте. Если в диапазоне 0..255 хранить линейное значение, то между 254 и 255 человеческий глаз не заметит разницы, зато между 1 и 2 - разница будет огромна. Поэтому перед записью в byte применяют гамма коррекцию, и при чтении из byte делают обратную коррекцию

#33
21:01, 22 дек 2023

Ruslan
Гамма — это про формат хранения. Соответственно, при записывании цвета в память, гамма должна применяться, а при чтении — отменяться. Любые расчеты должны вестись с физически корректным линейным цветом на повышенной точности (например float вместо исходных uint8).

#34
21:09, 22 дек 2023

MrShoor
}:+()___ [Smile]
+

#35
22:21, 22 дек 2023

Ruslan
Условно говоря, "гамма" — это когда у нас есть список табличных значений, пусть будет "номер 0", "номер 1", "номер 2" ... "номер эн", и есть физическая величина, которую мы записываем в виде номера из этой таблицы.

Мы можем сделать равномерное соответствие:
номер 0 — 0%
номер 1 — 33%
номер 2 — 66%
номер 3 — 100%

А можем сделать и неравномерное:
номер 0 — 0%
номер 1 — 5%
номер 2 — 30%
номер 3 — 100%

И вот конкретно sRGB (то, что обычно подразумевают под "гамма-кодированием") — это такое вот неравномерное соответствие, когда у нас есть таблица из 256 значений, и когда мы пишем изображение в R8G8B8 — значение байта обозначает только индекс в эту таблицу и больше ничего, и складывать/вычитать/интерполировать/накладывать эти индексы имеет примерно такой же смысл, как складывать/вычитать/интерполировать/накладывать номера СНИЛС.

#36
22:33, 22 дек 2023

Имбирная Ведьмочка
Ты как-то уж слишком обобщил.

Гамма-коррекция это всё же не таблица значений. В отличие от таблицы с sRGB и с Гаммой можно математически работать. Есть же вполне конкретные формулы, которые позволяют значение из этой якобы таблицы перевести в линейный цвет и обратно.

Более того, ты гамма коррекцию можешь применять не только для таблицы из 256 значений, а для любой точности.

#37
22:39, 22 дек 2023

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

#38
22:39, 22 дек 2023

MrShoor
> Есть же вполне конкретные формулы, которые позволяют значение из этой якобы
> таблицы перевести в линейный цвет и обратно.
"Закодировать в сргб" и "раскодировать из сргб", вот и все операции. Притом, что на практике эти формулы считают заранее и по факту переводят всё-таки через таблицу.

MrShoor
> Более того, ты гамма коррекцию можешь применять не только для таблицы из 256
> значений, а для любой точности.
Но на практике практически никто не применяет сргб нигде, кроме упаковки в 8-битные каналы.

Так что, я считаю, если от формул абстрагироваться вообще и считать сргб тупо индексом в таблицу — то ты ничего такого особо важного и не потеряешь. Зато взамен приобретёшь понимание, почему ими нельзя оперировать напрямую в расчётах.

Ruslan
> В общем я к тому, что видимо не имеет смысла заморачиваться с учетом гамма
> коррекции в альфе, это все компенсируется при пост эффекте на весь буфер. Может
> ошибаюсь. А так то я понимаю, что это за коррекция и для чего она.
Под "гамма-коррекцией альфы" обычно понимают, что четвёртый канал в B8G8R8A8-текстуре тоже кодируется по этой же таблице, а не равномерно.

#39
22:44, 22 дек 2023

Имбирная Ведьмочка
> "Закодировать в сргб" и "раскодировать из сргб", вот и все операции. Притом,
> что на практике эти формулы считают заранее и по факту переводят всё-таки через
> таблицу.
Какая разница считают формулы заранее или нет? Если формулы оперируют фактически над непрерывным пространством, а не над таблицей.

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

> Так что, я считаю, если от формул абстрагироваться вообще и считать сргб тупо
> индексом в таблицу — то ты ничего такого особо важного и не потеряешь. Зато
> взамен приобретёшь понимание, почему ими нельзя оперировать напрямую в
> рассчётах.
Чтобы иметь понимание, не обязательно настолько абстрагироваться.

#40
(Правка: 22:55) 22:45, 22 дек 2023

Имбирная Ведьмочка
> Под "гамма-коррекцией альфы" обычно понимают, что четвёртый канал в
> B8G8R8A8-текстуре тоже кодируется по этой же таблице, а не равномерно.
понял, ну в принципе это логично да, если только не извращяться с тем, на сколько материал прозрачен, при расчете освещения(именно сколько энергии пройдет сквозь материал, а сколько отразится\рассеется диффузно)

Ой стоп! охрана, отмена!
мы же рассуждаем на тему блендинга, а не о физкорректном освещении.

#41
2:45, 23 дек 2023

MrShoor
> Ты как-то уж слишком обобщил.
В принципе, полезное обобщение, ибо дает новичкам правильное понимание.
Особенно с учетом того, что формула специально выбрана такой, чтобы только у хардварных таблиц было преимущество, а на всяких SSE/AVX/NEON и т. п. нормально реализовать было невозможно. В общем, явно хорошо на лапу дали изобретателям sRGB.

> Ну и кстати - "закодировать в сргб" ты через просто лукап таблицу уже не сделаешь.
Сделаешь, просто чуть сложнее. В железе, я почти уверен, все через таблицы.
Сначала генерируешь приближение с ошибкой не более одного значения вверх (по таблице от нескольких битов исходника, может с какой-нибудь простой интерполяцией), а дальше одним сравнением с истинным значением — корректируешь.

Имбирная Ведьмочка
> Но на практике практически никто не применяет сргб нигде, кроме упаковки в 8-битные каналы.
Еще 10-битные и может 12-битные. Все что выше — уже проще FP16 использовать.

Ruslan
> В общем я к тому, что видимо не имеет смысла заморачиваться с учетом гамма коррекции в альфе
Абсолютно такой же смысл, как и в любом другом цветном канале. Просто комитет, который sRGB принимал, явно понятия не имел об альфа-блендинге.

> мы же рассуждаем на тему блендинга, а не о физкорректном освещении.
Блендинг — это о смешивании цветов, самая что ни на есть оптика.

#42
9:00, 23 дек 2023

Странно что это не опубликовали..
https://gamedev.ru/code/articles/PremultipliedAlpha

#43
0:17, 16 мар 2024

Paint .NET предлагает галочку "Premultiplied Alpha", когда сохраняешь изображение в "avif".

#44
1:10, 16 мар 2024

Ну так что там ? Можно в фотошопе эту альфу вшить, скажем в webp ? Как это всё организовать с практической стороны ? Хоть в общих чертах.

Страницы: 1 2 3 4 Следующая »
ФлеймФорумРазработка игр