Да, я вообще не использую его для загрузки текстур.
Добавить несложно. engine\common\imagelib\img_utils.c:277
Функция Image_SetPalette
там есть кейсы такого вида:
C++ Source Code:
1
case LUMP_NORMAL:
2
for( i = 0; i < 256; i++ )
3
{
4
rgba[0] = pal[i*3+0];
5
rgba[1] = pal[i*3+1];
6
rgba[2] = pal[i*3+2];
7
rgba[3] = 0xFF;
8
d_table[i] = *(uint *)rgba;
9
}
Надо эти цвета пропустить сквозь гамму палитры. Вот так
C++ Source Code:
1
case LUMP_NORMAL:
2
for( i = 0; i < 256; i++ )
3
{
4
rgba[0] = TextureToGamma( pal[i*3+0] );
5
rgba[1] = TextureToGamma( pal[i*3+1] );
6
rgba[2] = TextureToGamma( pal[i*3+2] );
7
rgba[3] = 0xFF;
8
d_table[i] = *(uint *)rgba;
9
}
Принцип понятен. Ну и на остальных кейсах сделать тожы самое. Градиент, Маскед, Экстендед. Альфа-канал через гамму пропускать не надо. Доработаешь - будет гамма к текстурам применяться.
Фулбрайт совпал с гс при тексгамме 0.65 о_О
А как применить тексгамму на скайбокс?
Смотрелка лайтмап в гс прямо везде-везде сломана или все же где-то работает? Я не могу на Ксаше добиться нужного контраста, у меня тени слишком серые а света слишком темные, яркость ноль и и повышение яркости влияет только на тени.
Как вообще гамма в ксаше работает? Я запутался капитально. Лайтмапы и текстуры в игру попадают изначально в линейном пространстве? А потом уже происходит какая-то особая коррекция или как? Зачем так сложно.
Вроде маленько подразобрался. Для текстур и лайтмап отдельная гамма, в первом случае это константное значение 0.9, во втором задаётся кваром gamma. Затем это все единожды применяется к текстурам при загрузке, и уже откорректированные текстуры используются при рендеринге. https://github.com/FWGS/xash3d-fwgs...f1fe81b7b0c7c2a
Этой небольшой доработкой у меня получилось в игре получить картинку именно в линейном пространстве, тестировал таким образом: в гимпе нарисовал линейный градиент от черного до белого, т.е. в самом начале яркость 0, в середине картинки 128, а в самом конце 255. Затем это всё экспортировал в .tga файл, перепроверил что гамма не изменилась, затем эту текстуру всунул в игру, сделал скриншот игры, померял пипеткой на скрине начало/середину/конец текстуры. Получилось точно так же, как я описал выше, соответственно, игра никаких изменений к текстурам не применила, и я могу гамму корректировать уже на этапе постпроцессинга ручками, как мне это нужно.