Хорошо. Итак, у меня есть игра, над которой я работаю, с кучей цветных частиц. Каждый из них получает свой собственный цвет, но все они близки к определенному оттенку.
Чтобы объяснить это лучше, я использую цветовое пространство HSV, и у меня есть глобальная переменная, которая циклически изменяется от 0 до 360 (H), и каждая из конкретных частиц добавляет или вычитает случайное количество из этого.
Я использую HSV, потому что это самый простой способ для меня переключаться между цветами, потому что вы можете просто изменить H.
Это выглядит очень красиво и все, однако частицы должны быть чистого света, который окрашен. Прямо сейчас все они - круги, окрашенные в тень, но позже я мог бы добавить эффекты свечения и другие методы затенения.
Проблема в том, что не все оттенки (я не связываюсь с H или V) равны по яркости, которую видят наши глаза, и это вызывает проблемы. Например, когда все они оттенков синего, вещи выглядят довольно темными.
Очевидно, что в шейдере мне нужно преобразовать эти цвета HSV в цвета RGB, и, выполнив некоторые математические расчеты, я быстро понял, что не так ... цвета не имели одинаковой яркости!
Насколько я понимаю, яркость примерно, (0.2126*color.r + 0.7152*color.g + 0.0722*color.b)
поэтому все выключено.
Является ли это способом получить его, чтобы я мог получать все различные цветовые оттенки (цвета на колесах), сохраняя высокую яркость? Возможно, мне следует работать с цветом другого типа, чем HSV, или, может быть, это формула, которая находит цвет в степени x на цветовом круге с яркостью y?
Спасибо большое!
Ответы:
HCY может быть лучше для ваших нужд. Согласно странице HSL и HSV в Википедии , проблема, с которой вы сталкиваетесь с HSV - то, что тот же «V» с разными оттенками не соответствует человеческому восприятию - похожа на HSL, но HCY может удовлетворить ваши потребности - «Y» в HCY для «luma»:
HCY описывается на странице Википедии как "luma / chroma / hue". С другой стороны, эта страница использует сокращение "HCY" и показывает, как преобразовать его в RGB и из него.
источник