Nuke的启动脚本

当我们打开nuke的时候,想加载一些自己的插件,或者添加一些环境变量。
这些事情交给一个python脚本去做,它会随着Nuke的启动运行。
在C:\Users\zhang\.nuke(系统用户路径下.nuke隐藏文件夹),
创建一个menu.py和init.py。
这两个文件都会随着Nuke的启动而运行,他们的不同点是:

  • init.py:在命令行模式和打开UI的时候都会加载。
  • menu.py:仅在打开Nuke UI的时候会加载它。

Nuke有三个地方管理环境变量
1.在终端里使用echo $NUKE_PATH命令查看Nuke的环境变量。
2.Python的sys.path模块。
3.打开Nuke在脚本编辑器里运行nuke.pluginPath()
(添加一个路径到pluginPath里: nuke.pluginAddPath(path))
pluginPath适合放一些Gizmos,dll格式的插件,或者图标。
如果是一些python脚本,放在sys.path里比较好。


课堂上推荐的一个Nuke相关网站: http://www.nukepedia.com/
这里可以找到下载一些Nuke插件或者Gizmos等。
01.png
关于用户启动脚本帮助文档里有更详细的说明:
https://learn.foundry.com/nuke/developers/11.2/pythondevguide/
title

控制Nuke菜单栏

打开Nuke的脚本编辑器,键入m = nuke.menu('Nuke')
返回了一个Menu对象: <Menu object at 0x000000000879ED20>
在帮助文档查看Menu对象的一些方法:
https://learn.foundry.com/nuke/developers/11.2/pythonreference/

  • addCommand: 添加一个按钮命令
  • addMenu: 添加一个菜单项
  • addSeparator: 添加间隔线
  • clearMenu: 清空菜单
  • findItem: 找到菜单的某一项
  • items: 返回所有项
    ...

一个创建菜单和命令的小案例:

m = nuke.menu('Nuke')
n = m.addMenu('TD')
# 第一个参数是菜单路径,第二个是菜单按钮命令,第三个是快捷键
m.addCommand('TD/Command1', "nuke.nodes.Text2()", "alt+o")
# 这里也可以用lambda函数传命令
m.addCommand('TD/Command2', lambda: nuke.message('hello nuke'))

这里讲到一个关于lambda容易遇到的问题

for i in range(3):
    m.addCommand('TD/Test{}'.format(i), lambda:nuke.message(str(i)))

当我们调用按钮命令的时候,始终返回的都是2。
这是因为lambda函数是在执行的时候才去读参数值。

控制Nuke工具架

ToolBar对象和菜单栏的方法很像,
通常来说一些python脚本命令放在菜单栏,
而Gizmo这样的节点适合放在ToolBar上。
小案例:

# ToolBar的名字为Nodes.
m = nuke.menu('Nodes')
m.addMenu('CustomGizmo')
m.addCommand('CustomGizmo/Slate', "nuke.createNode(\'slate\')")

一个Nuke脚本工具

课程的最后讲了一个th大大自己写的保存用户template的小工具。
https://github.com/TDChina/TDClass2_Nuke/tree/master/cases/lesson2

(完)


From zero to hero