Bagaimana cara mengubah mode pemilih warna default dari HSV ke RGB?
Blender 2.8x defaultnya adalah HSV , tapi saya ingin RGB seperti di 2.7x.
Menyimpan file startup tidak menyimpan pengaturan baru.

Dalam pengaturan preferensi, seseorang hanya dapat mengubah lingkaran menjadi persegi atau HSV ke HSL, tidak lebih. Tidak ada RGB lingkaran atau persegi

Jawaban
tidak ada opsi untuk mengubah jenis pemilih warna ke rgb
tetapi Anda dapat mengunduh sumber blender 2.83 dan menambahkan opsi untuk mengubah warna menjadi rgb
blender-2.83.5 \ source \ blender \ editors \ interface_region_color_picker.c
Solusi Mudah
seperti yang Anda ketahui enum memiliki nilai default

enum ePickerType {
PICKER_TYPE_RGB = 0,
PICKER_TYPE_HSV = 1,
PICKER_TYPE_HEX = 2,
};
secara default, jenis pemilih warna adalah PICKER_TYPE_HSV = 1
sehingga Anda dapat mengubahnya menjadi PICKER_TYPE_RGB = 0
static char colormode = 0;

Solusi Keras Menambah preferensi
Anda harus menambahkan case untuk RGB dalam preferensi
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;
}
ada fungsi untuk merubah hsv / hsl menjadi 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,
};
Bagaimana cara kerja enum?
/* 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,
"");
lalu Anda dapat menggunakan fungsi ini untuk mengubah jenis pemilih warna:
bpy.context.preferences.view.color_picker_type = 'CIRCLE_RGB'
Saya juga mengunduh sumber blender 2.79 Saya menemukan fungsi untuk mengubah rgb ke hsv mungkin berguna:
2.79 \ scripts \ addons \ cycles \ source \ 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);
}
Solusi Konyol
Anda dapat menggunakan perekam makro untuk mengubah jenis warna !!!
ketika Anda mengubah jenis warna setelah itu berfungsi untuk warna lain sampai Anda menutup blender
jadi gunakan program ini saat Anda membuka blender

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()