一键设置OCIO工具

import maya.cmds as cmds
import maya.mel as mel
import ctypes
import getpass

def get_windows_display_name():
    """获取 Windows 用户的显示名称(汉字),失败则优雅回退"""
    try:
        buf_size = 256
        buffer = ctypes.create_unicode_buffer(buf_size)
        secur32 = ctypes.windll.secur32

        # NameDisplay = 3 (获取全名如 "张三")
        if secur32.GetUserNameExW(3, buffer, ctypes.byref(ctypes.c_ulong(buf_size))):
            name = buffer.value
            # 确保拿到的是中文,如果包含中文才用,否则如果是英文就不截取最后一个字
            if any('\u4e00' <= char <= '\u9fff' for char in name):
                return name[-1]
            return name
    except:
        pass

    # 回退机制:如果是系统英文名,直接叫“老大”或“大侠”更亲切,避免出现“亲爱的 r!”
    default_user = getpass.getuser()
    return "大侠" if default_user.lower() in ["administrator", "admin", "default"] else default_user

def show_maya_message():
    user_praise = get_windows_display_name()
    message = f'<hl>亲爱的 {user_praise}!色彩空间已成功设置</hl>.'
    cmds.inViewMessage(amg=message, pos='midCenter', fade=True, fontSize=20, fadeStayTime=2000)

def main():
    ocio_path = "Z:/QKQL_Toolkits/thridlibs/OCIO/simple.config.ocio"
    target_rendering = "Utility - Linear - sRGB"
    target_view = "Raw (sRGB)"

    try:
        # --- 第一步:加载 OCIO 路径并开启色彩管理 ---
        cmds.colorManagementPrefs(edit=True, configFilePath=ocio_path)
        cmds.colorManagementPrefs(edit=True, cmEnabled=True)

        # --- 第二步:检测并设置渲染空间 ---
        all_spaces = cmds.colorManagementPrefs(q=True, renderingSpaceNames=True) or []

        if target_rendering in all_spaces:
            cmds.colorManagementPrefs(edit=True, renderingSpaceName=target_rendering)
        else:
            cmds.warning(f"[QKQL] 没找到 {target_rendering},当前可用前5个是: {all_spaces[:5]}")

        # --- 第三步:设置视图变换 (View) ---
        mel.eval(f'colorManagementPrefs -edit -viewTransformName "{target_view}";')

        # --- 第四步:同步修改底层的 OptionVar (管住新场景/新环境) ---
        cmds.optionVar(sv=("colorManagementColorPickerViewSelection", target_view))
        cmds.optionVar(sv=("defaultViewTransformName", target_view))
        cmds.optionVar(sv=("colorManagementOCIOPrefFilePath", ocio_path))

        # 确保新建场景时,默认【开启】色彩管理
        cmds.optionVar(iv=("colorManagementEnabledByDefault", 1)) 

        # --- 第五步:保存偏好设置 ---
        cmds.savePrefs(general=True)

        print(f"\n[QKQL SUCCESS] 全部配置已强制完成!")
        print(f"当前渲染空间: {cmds.colorManagementPrefs(q=True, renderingSpaceName=True)}")
        print(f"当前视图转换: {cmds.colorManagementPrefs(q=True, viewTransformName=True)}")

        # 成功的温馨提示
        show_maya_message()

    except Exception as e:
        print(f"\n[QKQL ERROR] 失败原因: {e}")

if __name__ == '__main__':
    main()