Построение цветового куба в Blender

В цветовой модели RGB любой цвет представляется как комбинация из трех базовых цветов: R – красного, B – синего, и G – зеленого. Базовые цвета задаются числом в диапазоне от 0 до 255. Следовательно, любой цвет в этой модели будет представлен комбинацией из трех таких чисел. Например, светло-оранжевый цвет будет представлен набором чисел (255, 153, 51). Модель RGB можно визуализировать, представив ее в виде куба со стороной равной 255, все внутренние точки которого являются векторами, положение которых определяется тройкой чисел, которая определяет сам цвет.

Такой куб не сложно построить в Blender при помощи Python API.

Мы можем в цикле по каждой координате проходить все значения от 0 до 255 и в каждую полученную точку сцены помещать любой объект, например, сферу.

Однако давайте немного упростим пример, и будем создавать сферу в сцене не для каждой возможной точки, а возьмем только 6 точек на сторону куба. И сам цветовой куб уменьшим в 255 раз, чтобы в координатах сцены он занимал пространство в диапазоне от 0 до 1.

Для получения 6 точек из диапазона 0-255 нам нужно на каждой итерации цикла увеличивать координату на 51. А чтобы получить все 6 точек, воспользуемся лист-компрехенсив, в дополнение к оператору range().

Цикл по трем координатам будет иметь следующий вид:

Выполнив этот код, мы получим куб, заполненный сферами. Однако мы не видим в нем никакой информации о цвете.

Назначим каждой сфере цвет вьюпорта, такой, который соответствует координатам ее центра. Дополнительно, имя каждой сферы оформим так же в виде цифрового значения того цвета, которому она соответствует.

Теперь наш код будет выглядеть так:

Выполним его, а для того, чтобы цвета были видны сразу в окне 3D вьюпорта, в его свойствах переключим параметр Lighting в значение Flat, Object Color – в значение Object. По желанию, можно установить галочки Shadow и Outline.

Если присмотреться к кубу, цвета кажется распределенными немного неправильно. Это произошло из-за того, что в цветовой модели RGB мы оперируем числами в диапазоне от 0 до 255, а цвет нашим сферам во вьюпорте мы задаем в диапазоне от 0 до 1. Приводя один диапазон к другому, мы просто поделили значения на 255, что для преобразования диапазона цветов является ошибочным.

Чтобы перевести значение цвета из диапазона RGB в линейный диапазон, нам нужно воспользоваться специальной формулой.

Оформим ее в виде функции, на вход которой подается число из цветового диапазона RGB от 0 до 255, а на выходе мы получаем значение в линейном диапазоне от 0 до 1.

Теперь осталось немного изменить наш код построения цветового куба, добавив правильное преобразование цветов.

Финальный код:

Теперь построенный нами цветовой куб выглядит корректно и мы можем удобно изучать распределение цветов в его пространстве.

Количество точек можно увеличить, чтобы повысить точность визуализации вплоть до 255.

5 1 голос
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии