Я хотел бы написать пиксельный шейдер, который принимает входное изображение и преобразует все цвета одного диапазона оттенков (например, HSV) в другой диапазон оттенков.
Моя мотивация проста: я хочу по-разному раскрасить кучу разных текстур, но я не хочу раскрашивать всю текстуру, только часть с оттенком в определенном диапазоне. Таким образом, я могу нарисовать одно изображение гоночной машины, а затем изменить цвет только полос и логотипа на машине с помощью пиксельного шейдера.
Я просмотрел документацию по HLSL в Интернете и не нашел ничего, что касалось бы оттенков. Есть ли в Интернете библиотека кода HLSL?
Вот какой-то псевдокод того, что я пытаюсь выполнить:
external float SrcMinHue,SrcMaxHue,TargetMin
void changeHues(image source)
{
foreach x,y in image:
{
float sourceHue = getHue(source,x,y)
if (SrcMinHue < sourceHue < SrcNaxHue):
setHue(source,x,y,(TargetMin + (sourceHue - MinHue))
}
}
Я работаю с XNA Game Studio, если эта информация кому-то нужна.