Как изменить режим выбора цвета по умолчанию с HSV на RGB?
По умолчанию Blender 2.8x - это HSV , но мне нужен RGB, как в 2.7x.
При сохранении файла запуска новые настройки не сохраняются.

В настройках можно только изменить круг на квадрат или HSV на HSL, не более того. Без круга или квадрата RGB

Ответы
нет возможности изменить тип палитры цветов на rgb
но вы можете скачать исходный код blender 2.83 и добавить возможность изменения цвета в rgb
blender-2.83.5 \ источник \ blender \ editors \ interface_region_color_picker.c
Простое решение
как вы знаете, enum имеет значение по умолчанию

enum ePickerType {
PICKER_TYPE_RGB = 0,
PICKER_TYPE_HSV = 1,
PICKER_TYPE_HEX = 2,
};
по умолчанию тип палитры цветов PICKER_TYPE_HSV = 1
так что вы можете изменить его на PICKER_TYPE_RGB = 0
static char colormode = 0;

Трудное решение Добавление в настройки
вы должны добавить случай для RGB в настройках
switch (U.color_picker_type) {
case USER_CP_SQUARE_SV:
ui_colorpicker_square(block, ptr, prop, UI_GRAD_SV, cpicker);
break;
case USER_CP_SQUARE_HS:
ui_colorpicker_square(block, ptr, prop, UI_GRAD_HS, cpicker);
break;
case USER_CP_SQUARE_HV:
ui_colorpicker_square(block, ptr, prop, UI_GRAD_HV, cpicker);
break;
/* user default */
case USER_CP_CIRCLE_HSV:
case USER_CP_CIRCLE_HSL:
case USER_CP_CIRCLE_RGB: # I ADD THIS CASE HERE
default:
ui_colorpicker_circle(block, ptr, prop, cpicker);
break;
}
есть функция для изменения hsv / hsl на rgb:
void ui_color_picker_to_rgb(float r_cp0, float r_cp1, float r_cp2, float *r, float *g, float *b)
{
switch (U.color_picker_type) {
case USER_CP_CIRCLE_HSL:
hsl_to_rgb(r_cp0, r_cp1, r_cp2, r, g, b);
break;
default:
hsv_to_rgb(r_cp0, r_cp1, r_cp2, r, g, b);
break;
}
}

enum ePickerType {
PICKER_TYPE_RGB = 0,
PICKER_TYPE_HSV = 1,
PICKER_TYPE_HEX = 2,
};
Как работает перечисление?
/* mode */
yco = -1.5f * UI_UNIT_Y;
UI_block_align_begin(block);
bt = uiDefButC(block,
UI_BTYPE_ROW,
0,
IFACE_("RGB"),
0,
yco,
width / 3,
UI_UNIT_Y,
&colormode,
0.0,
(float)PICKER_TYPE_RGB,
0,
0,
"");
UI_but_flag_disable(bt, UI_BUT_UNDO);
UI_but_func_set(bt, ui_colorpicker_create_mode_cb, bt, NULL);
bt->custom_data = cpicker;
bt = uiDefButC(block,
UI_BTYPE_ROW,
0,
IFACE_((U.color_picker_type == USER_CP_CIRCLE_HSL) ? "HSL" : "HSV"),
width / 3,
yco,
width / 3,
UI_UNIT_Y,
&colormode,
0.0,
PICKER_TYPE_HSV,
0,
0,
"");
затем вы можете использовать эту функцию для изменения типа палитры цветов:
bpy.context.preferences.view.color_picker_type = 'CIRCLE_RGB'
Я также загрузил исходный код blender 2.79. Я обнаружил, что функция преобразования rgb в hsv может быть полезной:
2.79 \ скрипты \ аддоны \ циклы \ источник \ util \ util_color.h
ccl_device float3 rgb_to_hsv(float3 rgb)
{
float cmax, cmin, h, s, v, cdelta;
float3 c;
cmax = fmaxf(rgb.x, fmaxf(rgb.y, rgb.z));
cmin = min(rgb.x, min(rgb.y, rgb.z));
cdelta = cmax - cmin;
v = cmax;
if(cmax != 0.0f) {
s = cdelta/cmax;
}
else {
s = 0.0f;
h = 0.0f;
}
if(s != 0.0f) {
float3 cmax3 = make_float3(cmax, cmax, cmax);
c = (cmax3 - rgb)/cdelta;
if (rgb.x == cmax) h = c.z - c.y;
else if(rgb.y == cmax) h = 2.0f + c.x - c.z;
else h = 4.0f + c.y - c.x;
h /= 6.0f;
if(h < 0.0f)
h += 1.0f;
}
else {
h = 0.0f;
}
return make_float3(h, s, v);
}
Глупое решение
вы можете использовать макро рекордер для изменения цветотипа !!!
когда вы меняете цветовой тип, когда он работает для других цветов, пока вы не закроете блендер
так что используйте эту программу при открытии блендера

import pyautogui
print(pyautogui.position())
pyautogui.moveTo(863,687,0.2) # Materil Position
pyautogui.click()
pyautogui.moveTo(976,677,0.2) # Color Position
pyautogui.click()
pyautogui.moveTo(834,559,0.2) # Change The Color Type to RGB
pyautogui.click()