В моей игре на основе 2D-плитки игрок может рисовать плитки, чтобы изменить цвет. Простой подход (и то, что я уже сделал) заключается в использовании параметра tint
в SpriteBatch.Draw
.Не окрашивайте, но «раскрашивайте» спрайт
Это выглядит красиво, а вот пример:
Но сказать, я хочу, чтобы нарисовать дерево белый. Если вы когда-либо сталкивались с оттенком, вы знаете, что это невозможно с использованием параметра оттенка. Color.White
оттеняет цвет спрайта по умолчанию, а не белый. Это не серьезная проблема, но я полагаю, что некоторые пользователи могут этого захотеть.
Мой вопрос: есть ли способ окраски спрайта на основе оттенка/насыщенности вместо оттенка. Подобно функции «colorify» в GIMP.
Очевидный подход будет в том, чтобы использовать эту функцию в GIMP и просто экспортировать спрайты для каждого цвета. Проблема заключается в том, что для всех моих спрайтов это займет много времени, и каждый спрайт имеет несколько вариантов, что означает, что вы могли бы иметь всего 100+ комбо для одного типа блоков.
Возможно ли это? Я предполагаю, что шейдер может выполнить эту работу.
Почему вы не делаете базовый спрайт максимально ярким (почти белый)? Вы можете добиться произвольных эффектов с помощью пиксельного шейдера, но я сомневаюсь, что это необходимо в этом случае. На мой взгляд, Gimp использует ту же технику, что и параметр оттенка. –
Посмотрите на цветовую модель HSV: [link] (http://en.wikipedia.org/wiki/HSL_and_HSV). Вы можете преобразовать текстуру из RGB в HSV, применить смещение к оттенку для изменения цвета, а затем преобразовать его обратно в RGB. Хотя, безусловно, было бы проще просто сделать вашу текстуру яркой белой, чтобы начать, и использовать встроенную тонировку XNA. – foolmoron