Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Яркость гамма и текстуры

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

Поделиться

Страницы: 1 2 Следующая

The AndreypПостоялецwww21 окт. 201711:42#0
Привет.

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

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

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

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);               

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

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

Правка: 21 окт. 2017 11:45

barnesПостоялецwww21 окт. 201712:25#1
Попробуй корректировать гамму постпроцессом. Я делаю через пов, все нормально (но у меня хдр нет)
slava_mibМодераторwww21 окт. 201713:30#2
The Andreyp, гамма-текстуры, они же точно такие же текстуры, как обычные - просто они гамма-корректные (просто другое цвет. пространство). Потому, если ты хочешь сделать текстуру ярче и именно так же, как делал раньше, то есть простой способ, надо просто сделать ряд преобразований
исходна гамма -> "обычное" цвет пространство -> трансформируем (это твой код) -> обратно в гамму

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

The AndreypПостоялецwww21 окт. 201714:15#3
slava_mib
Это надо постпроцессом делать ко всему фбо сцены уже освещенной и тп и тд?
сделать в офлайне не могу - гружу dds / etc / astc

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

Так ?

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

Правка: 21 окт. 2017 14:32

The AndreypПостоялецwww21 окт. 201714:16#4
slava_mib
То есть экспозиция формула это не то?

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

Правка: 21 окт. 2017 14:27

The AndreypПостоялецwww21 окт. 201714:29#5
barnes
то есть у тебя текстуры изначально яркие?

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

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

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

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

The AndreypПостоялецwww21 окт. 201717:38#7
Suslik
тем не менее - что мне делать/

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

Правка: 21 окт. 2017 17:47

barnesПостоялецwww21 окт. 201717:46#8
The Andreyp
> то есть у тебя текстуры изначально яркие?
У меня вообще там срач, из за наследия ку2 ретекстуре прождект, который ориентировался на оригинальные текстуры. Я из за их общей темноты множу на 2 по ргб, чтоб получить что-то адекватное на попиксельном освещении.
А новые текстуры уже рисуются в нормальной гамме там такие преобразования не нужны. По хорошему надо старые дифузы переделать, чтобы такими хаками не заниматься....
The AndreypПостоялецwww21 окт. 201717:49#9
barnes
угу... ясно.. то есть получается текстуры такие темные и поэтому приходится делать хак умножением на 2 - как я тоже делаю...
получается это не задача программы - это арт такой...

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

barnesПостоялецwww21 окт. 201717:51#10
Вот вот, именно арт такой... Не думали, художники, что ку2 прокачают до такой степени... Причем общая гамма то есть, но идет потом поверх всей этой байды.
The AndreypПостоялецwww21 окт. 201718:18#11
barnes
ну да...

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

barnesПостоялецwww21 окт. 201719:35#12
А хз... У текстур там был параметр интенсивности, но его особо не получалось выкручивать, тк лава и подобные лайт эмишен текстуры страдали. Вот и приходилось тогда через энв комбайн умножить ргб в двое или уде потом через шейдера. Такая вот гадость...
The AndreypПостоялецwww21 окт. 201719:39#13
barnes
это всё-равно что при семплинге из шейдера множить на 2.

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

0xc0deПостоялецwww21 окт. 201722:56#14
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 Следующая

/ Форум / Программирование игр / Графика

2001—2017 © GameDev.ru — Разработка игр