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

Яркость гамма и текстуры

Страницы: 1 2 Следующая »
#0
11:42, 21 окт. 2017

Привет.

Трабла такая.
Допустим в двиге не юзаю тонмапинг - адаптацию и хдр

раньше что было:

грузил текстуры и мог вручную сделать им яркость выше.

void OverBrightPixel(byte col[3],byte ou[3],float overbright)
{
  float r, g, b;
  float scale=1.0f;
  float tmp_scale;

  r = (float) col[0];
  g = (float) col[1];
  b = (float) col[2];
  r = r * overbright / 255.0f;
  g = g * overbright / 255.0f;
  b = b * overbright / 255.0f;
  
  if(r>1.0f && (tmp_scale=(1.0f/r))<scale) scale=tmp_scale;
  if(g>1.0f && (tmp_scale=(1.0f/g))<scale) scale=tmp_scale;
  if(b>1.0f && (tmp_scale=(1.0f/b))<scale) scale=tmp_scale;

  scale *= 255.0f;
  r *= scale;
  g *= scale;
  b *= scale;

  ou[0] = appRound(r);
  ou[1] = appRound(g);
  ou[2] = appRound(b);
}

И помимо этого еще гамма через setdevgammaramp

НО

теперь я гружу еще и с жатые текстуры с диска и я не могу уже применить эту функцию .(все текстуры стали темными). остается только гамма.
пробовал применять постпроцессом ко всей сцене эту функцию. - появляется адовая блевотная засветка на лайтинге.
И вот не знаю что с этим делать:

1) рисовать должны текстуры в нужной яркости а уменя в двиге остается только возможность подкручивания гаммы
2) что-то еще?

===================

и по гамме вопрос - гамма через pow(1/2.2) дает адовое обрезание цвета.
есть еще функция - toneMapped = vec4(1.0) - exp(f4Color * -fExposure);               

хочу вынести эту гамму в шадер.. и заюзать експ функцию вместо пова - это оно? можно да?

================
другой вопрос. если есть в двиге хдр тонемаппинг. что с ним делать - его сюда можно приткнуть как-то? или это отдельная тема


#1
12:25, 21 окт. 2017

Попробуй корректировать гамму постпроцессом. Я делаю через пов, все нормально (но у меня хдр нет)

#2
13:30, 21 окт. 2017

The Andreyp, гамма-текстуры, они же точно такие же текстуры, как обычные - просто они гамма-корректные (просто другое цвет. пространство). Потому, если ты хочешь сделать текстуру ярче и именно так же, как делал раньше, то есть простой способ, надо просто сделать ряд преобразований
исходна гамма -> "обычное" цвет пространство -> трансформируем (это твой код) -> обратно в гамму

Не путай гамму и тонемаппер. Нет, это не одно и то же.

#3
14:15, 21 окт. 2017

slava_mib
Это надо постпроцессом делать ко всему фбо сцены уже освещенной и тп и тд?
сделать в офлайне не могу - гружу dds / etc / astc

Srcgamma=fbo
Rgb=pow srcgamma 2.2 (или какая исходная гамма. гамма с которой были картинки нарисованы? я хз какая она - я например взял левую текстуру вообще из инета)
Overbright rgb
Result=pow rgb 1/2.2

Так ?

Ну и помимо этого пользовательский  setdevgramp ?

#4
14:16, 21 окт. 2017

slava_mib
То есть экспозиция формула это не то?

Тут и менно гамму применять к экрану только как Pow ?

#5
14:29, 21 окт. 2017

barnes
то есть у тебя текстуры изначально яркие?

если экран имеет гамму 1 то текстуры всёравно яркие?

#6
16:49, 21 окт. 2017

The Andreyp
здесь часто происходит подмена понятий, так как под гаммой понимают две совершенно разные вещи:
1) гамма в смысле power curve яркости изображения. чем больше гамма, тем более блёклое изображение.
2) гамма в смысле srgb-текстур, которые при чтении переводятся в линейное пространство через возведение в степень 2.2, операции над которыми выполняются в этом самом линейном пространстве и перед выводом на экран переводятся в яркость, возводя линейное значение в степень 1/2.2

так вот 2) влияет только на освещение, смешивание, прозрачность итп. если всё сделано правильно, текстуры на объектах при единичном освещении должны выглядеть точно так же, как в файлах. это преобразование не имеет ничего общего с настройкой яркости, оно лишь позволяет физически корректно смешивать светимости пикселей.

а вот 1) является вариантом tone mapping'а и используется в постпроцессе для изменения общего вида сцены. гамма для него может быть любой.

#7
17:38, 21 окт. 2017

Suslik
тем не менее - что мне делать/

ограничиться только setdevicegamaramp и изготовлением светлых текстур которые при гамме=1 выглядят ярко ?

#8
17:46, 21 окт. 2017

The Andreyp
> то есть у тебя текстуры изначально яркие?
У меня вообще там срач, из за наследия ку2 ретекстуре прождект, который ориентировался на оригинальные текстуры. Я из за их общей темноты множу на 2 по ргб, чтоб получить что-то адекватное на попиксельном освещении.
А новые текстуры уже рисуются в нормальной гамме там такие преобразования не нужны. По хорошему надо старые дифузы переделать, чтобы такими хаками не заниматься....

#9
17:49, 21 окт. 2017

barnes
угу... ясно.. то есть получается текстуры такие темные и поэтому приходится делать хак умножением на 2 - как я тоже делаю...
получается это не задача программы - это арт такой...

из управления только usergamma получается..

#10
17:51, 21 окт. 2017

Вот вот, именно арт такой... Не думали, художники, что ку2 прокачают до такой степени... Причем общая гамма то есть, но идет потом поверх всей этой байды.

#11
18:18, 21 окт. 2017

barnes
ну да...

а как так их устраивала такая темень? за счет ярких лайтмапов или то что у юзера должен быть моник выкручен адски?

#12
19:35, 21 окт. 2017

А хз... У текстур там был параметр интенсивности, но его особо не получалось выкручивать, тк лава и подобные лайт эмишен текстуры страдали. Вот и приходилось тогда через энв комбайн умножить ргб в двое или уде потом через шейдера. Такая вот гадость...

#13
19:39, 21 окт. 2017

barnes
это всё-равно что при семплинге из шейдера множить на 2.

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

#14
22:56, 21 окт. 2017

The Andreyp
> void OverBrightPixel(byte col[3],byte ou[3],float overbright)

Зачем менять яркость текстур? Я помню такое было в Quake3, во времена, когда еще не везде поддерживались функции SetDeviceGammaRamp/GetDeviceGammaRamp (появились только в Windows 2000). На Voodoo юзали wglSetDeviceGammaRamp3DFX (WGL_3DFX_gamma_control), а там где совсем беда была - вот в этом случае и меняли гамму через изменение яркости текстур. В современных реалиях это вообще ни к чему.

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

Тема в архиве.