기본 색상 선택기 모드를 HSV에서 RGB로 변경하려면 어떻게합니까?

Aug 19 2020

Blender 2.8x 기본값은 HSV 이지만 2.7x와 같은 RGB를 원합니다 .

시작 파일 저장은 새로운 설정을 저장하지 않습니다.

기본 설정에서 원을 정사각형으로, HSV를 HSL로만 변경할 수 있습니다. 원 또는 정사각형 RGB 없음

답변

8 SeyedMortezaKamali Aug 30 2020 at 11:07

색상 선택기 유형을 rgb로 변경하는 옵션이 없습니다.

그러나 블렌더 2.83의 소스를 다운로드하고 색상을 rgb로 변경하는 옵션을 추가 할 수 있습니다.

blender-2.83.5 \ source \ 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'

또한 블렌더 2.79 소스를 다운로드하여 rgb를 hsv로 변환하는 기능이 유용 할 수 있음을 발견했습니다.

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);
}
2 SeyedMortezaKamali Aug 30 2020 at 14:49

어리석은 솔루션

매크로 레코더를 사용하여 색상 유형을 변경할 수 있습니다 !!!

블렌더를 닫을 때까지 다른 색상에 적용되면 색상 유형을 변경하면

그러니 블렌더를 열 때이 프로그램을 사용하세요

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