一键设置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()