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

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

Страницы: 1 2 3 4 512 Следующая »
#30
13:12, 28 ноя. 2017

ArchiDevil
Мне кажется что для удовлетворительного результата можно просто подкрутить спекуляр.


#31
15:10, 28 ноя. 2017

nes
> Мне кажется что для удовлетворительного результата можно просто подкрутить
> спекуляр.
Изображение

#32
16:17, 28 ноя. 2017

war_zes у тебя шо там, элт монитор?

#33
22:54, 29 ноя. 2017

Я сам не в понятии что за sRGB... то ли Gamma 2.2, то ли какая-то сложная формула. Проблема встала не так давно когда в моем ray tracing пришла пора прикручивать HDR (но спрашивается зачем там нужен HDR, если в данной техники такого понятия в помине не существует).

#34
7:47, 30 ноя. 2017

Плюсую насчёт понятности объяснения, на редкость хорошо объяснили, просто божественно.
ТС просто читай http://www.gamedev.ru/code/forum/?id=231785#m11 до просветления, не ну серьёзно, там всё что тебе нужно в плане принципиального понимания зачем.

#35
8:34, 30 ноя. 2017

Почитал тему, решил озадачится вопросом.
и так, если я правильно понял, то...
1 - грузим текстуры как GL_SRGB8 или GL_SRGB8_ALPHA8, за исключением карт нормалей. Альфа канал, судя по спекам остается линейным, верно? У меня там хранятся спекулары-высоты.
2 - врубаем GL_FRAMEBUFFER_SRGB
3 - рисуем кадр и пост процесс в сргб
4 - переводим в финальном проходе постпроцесса картинку обратно в линейное пространство.

#36
8:44, 30 ноя. 2017

barnes
4 не надо делать. Если ты поставил фреймбуфер в SRGB и все нужные текстуры у тебя созданы с форматом SRGB то тебе вообще ничего делать не нужно. Выборка в шейдерах сама за тебя все сконвертнет при чтении, а при записи ROP-ы все как надо запишут.

#37
9:24, 30 ноя. 2017

то есть от финального
fragData.rgb = pow(color, vec3(u_control.w)); //  u_control.w = 1 / gamma

можно отказаться?

#38
10:10, 30 ноя. 2017

barnes
> то есть от финального
> fragData.rgb = pow(color, vec3(u_control.w)); //  u_control.w = 1 / gamma
при желании вообще всю гамма-коррекцию можно руками делать. и при чтении из srgb текстуры можно руками возводить pow(val, 2.2f), и при записи можно делать pow(val, 1.0f / 2.2f). но это считается не тру, потому что теоретически srgb->linear преобразование в общем случае может быть сложнее и поэтому считается тру, чтобы вообще все srgb преобразования выполнялись автоматически и как именно они выполняются, тебя вообще волновать не должно.

один из самых простых способов проверить, что всё работает правильно — это взять текстуру какого-нибудь заранее известного цвета между (0.0f, 0.0f, 0.0f) и (1.0f, 1.0f, 1.0f). я, например, использу текстуру цвета (1.0f, 0.5f, 0.0f), потому что хорошо помню, как она должна выглядеть. и просто вывести её на экран с srgb-чтением из текстуры и srgb-записью в рендертаргет. если всё сделано правильно, те результирующая картинка должна быть точно такой же, как исходная текстура, то есть (1.0f, 0.5f, 0.0f), что можно проверить, сделав скриншот и пипетнув в пейнте.

barnes
> 1 - грузим текстуры как GL_SRGB8 или GL_SRGB8_ALPHA8, за исключением карт
> нормалей. Альфа канал, судя по спекам остается линейным, верно? У меня там
> хранятся спекулары-высоты.
в общем случае все текстуры и рендертаргеты, которые хранят в том или ином виде цвет, должны быть srgb. то есть цвет диффуза, спекьюлар, лайтмапы и тому подобное. все текстуры, которые хранят не цвет, должны быть линейными: прозрачность, высоту, нормали, lookup, смещения, глубина итп.

сразу скажу, что проблемы бывают с gbuffer'ом на d3d9, потому что в d3d9 srgb write — это рендрестейт сразу для всех рендертаргетов. поэтому если один таргет albedo, а второй — normals, то можно либо в оба писать srgb, либо в оба не писать. установить srgb для одного и linear для второго можно только в d3d11+. это — один из немногих случаев, когда srgb преобразование можно выполнить руками.

#39
10:14, 30 ноя. 2017

Кстати. Интересен тот факт, что в Quake 2 всё невероятно тёмное и надо иметь сверхяркий монитор, а Quake 3 при старте гамму экрана в винде выдрючивает так, что все окошки и прочее засвечивает люто. Вон я недавно процесс опенарены убил, так перезагрузиться пришлось, в десятке половина кнопок в диалогах была не видна, а тёмно-синие стали блёкло-голубенькими.

Можно ли сказать, что третья квака использует костыльный аналог sRGB, насилуя кривые яркости в видяхе?


Ещё мыслЯ: можно ли получить нищебродское HDR на 8 битах, если пожертвовать половиной диапазона? Ведь лимит яркости от этой половинки  повысится в 4 раза, чего может хватить для всяких не особо честных отражений.

#40
10:22, 30 ноя. 2017

Cheb
> Можно ли сказать, что третья квака использует костыльный аналог sRGB, насилуя
> кривые яркости в видяхе?
Да, именно это она и делает. sRGB для бедных, когда еще львиная доля железа не поддерживала sRGB, а шейдеров не было. Выкручивались как могли. Так делает не только квака насколько мне известно, а еще например halflife первый.

#41
10:23, 30 ноя. 2017

Cheb
> можно ли получить нищебродское HDR на 8 битах, если пожертвовать половиной
> диапазона? Ведь лимит яркости от этой половинки  повысится в 4 раза, чего может
> хватить для всяких не особо честных отражений.
нищебродское hdr можно получить несколькими способами. например, можно вместо цвета просто хранить в текстурах величину в духе color / 10 и обратно переводить её (color / 10) * 10 при чтении. разумеется, точность будет в 10 раз меньше, но диапазон будет в 10 раз больше. ещё можно R32G32B32_FLOAT текстуру примерно аппроксимировать, затолкав несколько экспонент в R8G8B8 текстуру одну за другой. то есть вместо одного RGB32 изображения солнышка, можно в одну текстуру затолкать, например, 4 RGB8 изображения солнышка с разными экспонентами, а потом из них в шейдере восстановить float-значение, сложив их по формуле в духе color1 * 1000 + color2 * 100 + color3 * 10 + color4. звучит костыльно, но я так делал для одного проекта, в котором нельзя было просто поменять формат текстуры, работало прекрасно.

#42
11:24, 30 ноя. 2017

Вот годное чтиво:
https://tomforsyth1000.github.io/blog.wiki.html#%5B%5BThe%20sRGB%… 20curve%5D%5D

#43
12:05, 30 ноя. 2017

Cheb
> Кстати. Интересен тот факт, что в Quake 2 всё невероятно тёмное и надо иметь
> сверхяркий монитор, а Quake 3 при старте гамму экрана в винде выдрючивает так,
> что все окошки и прочее засвечивает люто.
В ку2 гамма менялась коррекцией текстур на старте. Ку3 же использовал виндовый гамма рамп. И у него еще была такая бяка, если игра крашилась, то на десктопе оставалась выкрученная игрой гамма, что выбешивало просто безумно.
Вообще у меня как щас реализовано - читаю текстуры как ргб-ргба, все рисую а потом прохожу поверх пасом оутКолор = пов(колор, 1.0 / гамма), не считая коррекции по брайтнес-контраст-сатюрейшен если необходимо.

#44
13:56, 30 ноя. 2017

Никто не хочет написать термин для сайта про sRGB?

Страницы: 1 2 3 4 512 Следующая »
ПрограммированиеФорумГрафика