Войти
ПрограммированиеФорумГрафика

sRGB - для чего? (6 стр)

Страницы: 15 6 7 812 Следующая »
#75
23:15, 22 дек. 2017

gkv311
Да, вроде все верно. Единственно в OpenGL спецификации вроде есть правило, по которому железо дожно конвертировать sRGB->RGB и RGB->sRGB. Так что пятый пункт вполне можно ручками реализовать у себя.


#76
9:07, 23 дек. 2017

Я на этой проблеме чуть коньки не отбросил - пытался Adobe RGB colorspace текстуры выводить в рендер на OpenGL. Никто мне ничего дельного не сказал. Никакие шейдеры тут тебе не помогут. Потому что Виндоус сама осуществляет цветокоррекцуию на уровне каллбэков окна приложения и профилей мониторов и эту бадягу ты хрен как отловишь. У тебя ИТАК всё в SRGB по дефолту, поэтому прекращай ерундить.

#77
12:35, 17 янв. 2018

У меня к вам, товарищи, вопрос на последок: я тоже решил попробовать ваш пресловутый sRGB :) гружу текстуры, как sRGB и включил glEnable(GL_FRAMEBUFFER_SRGB);
Картинка немного изменилась, как в этом примере:

Изображение

Я всё правильно сделал? Больше мне ничего не нужно делать? Все блендинги и прочее будет рассчитываться уже по sRGB?
P.S. Для DDS-текстур я использовал следующие форматы:

GL_COMPRESSED_SRGB_S3TC_DXT1_EXT
GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT
GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT
GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT

#78
12:41, 17 янв. 2018

Daniil Petrov
> Я всё правильно сделал? Больше мне ничего не нужно делать? Все блендинги и
> прочее будет рассчитываться уже по sRGB?
Можешь еще себе пива купить)))

#79
13:01, 17 янв. 2018

barnes
> Можешь еще себе пива купить)))
Кстати, здесь писали, что если включить только glEnable(GL_FRAMEBUFFER_SRGB), а текстуры импортировать как просто GL_RGB / GL_RGBA, то картинка становится высветленная, но эксперименты показали, что если только загрузить текстуры как sRGB без включения фреймбуфера, то картинка становится очень чёрная :)))

#80
13:28, 17 янв. 2018

Ну. Если загружать текстуры как сргб не включая GL_FRAMEBUFFER_SRGB то все будет ооч темным.
А если грузить как ргба и включить GL_FRAMEBUFFER_SRGB, то все будет пересвечено.

#81
3:00, 18 янв. 2018

Вот здесь вот накопал целый раздел, посвящённый цветокоррекции, и возник вопрос: а мне хватит поддержки sRGB или всё таки придётся мутить что-то более сложное???
И второй вопрос: в sRGB грузятся только текстуры альбедо? Все остальные текстуры типа карт нормалей и прочие грузятся как обычные GL_RGB / GL_RGBA?

#82
20:01, 6 фев. 2018

Тоже сделал. Из диких плюсов - даже на сильно засвеченной по гамме картинке нет тех диких бандингов.
По скольку я все рендерю в хардварный фрейм буффер без фбо (оно только для ссао), мне загрузить именно сргб текстуру пришлось тексуру скрин капчура, через которую я делаю постпроцессинг.
Все просто чудно и тд. Постпроцесс гамму само собой приведу к единице.

Прошло более 1 года
#83
10:30, 29 июля 2019

Вопрос - как быть, когда поверх SRGB сцены нужно намалевать честный RGB гуй?
Если у нас фреймбуфер в SRGB, то при попытке намалевать честный RGB получим пересвет.
Ручками в шейдере гамму крутить?

#84
(Правка: 10:34) 10:33, 29 июля 2019

nes
> Ручками в шейдере гамму крутить?
Я так и делаю = вызываю шейдер с юниформой bool SRGB.
Хотя у гуя свой шейдер, тогда ещё проще.

#85
(Правка: 10:39) 10:36, 29 июля 2019

nes
> Вопрос - как быть, когда поверх SRGB сцены нужно намалевать честный RGB гуй?
"честный" в этом контексте — оксюморон, потому что если он честный, то должен хранить значения в формате srgb. если твой гуй хранит цвет в линейном представлении, это значит, что он как раз написан неправильно. если цвет хранится в представлении R8G8B8, то он должен быть в SRGB, потому что иначе ты неоптимально используешь цветовой диапазон. если этот цвет хранится в текстуре, то при чтении он автоматически переводится в линейное пространство. если этот цвет хранится, например, в формате вертекса, то его придётся переводить в линейное пространство в вершинном шейдере вручную.

Daniil Petrov
> Я так и делаю = вызываю шейдер с юниформой bool SRGB.
это неправильно, потому что srgb определяется рендертаргетом. если ты рендеришь в рендертаргет с цветом (а не глубиной или нормалями), то записываемое значение всегда должно быть линейное. другими словами, если ты записываешь куда-то цвет, то ты его должен записывать в рендертаргет, хранящий цвет, поэтому он должен быть srgb и писать в него надо линейное значение. если же на вход твоему шейдеру даётся srgb цвет (то, что обычно считается "обычным" цветом в пейнте и фотошопе), то в шейдере этот цвет необходимо линеаризовать при чтении. не при установлении какого-то там юниформа, а всегда.

#86
10:41, 29 июля 2019

Suslik
>то его придётся переводить в линейное пространство в вершинном шейдере вручную.
А нет какой-нибудь готовой функции вроде:

float4 rgb = get_me_linear_rgb_please(srgb);
?
#87
10:42, 29 июля 2019

nes
> А нет какой-нибудь готовой функции вроде:
>
> float4 rgb = get_me_linear_rgb_please(srgb);
http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html

#88
10:43, 29 июля 2019

Suslik
И кстати в d3d10/11 по-ходу не завезли R, RG варианты SRGB текстур...

#89
10:44, 29 июля 2019

Suslik
>http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html
Странно, что нет встроенной функции, чтоб без этих разветвлений...

Страницы: 15 6 7 812 Следующая »
ПрограммированиеФорумГрафика