我正在尝试在表达式节点表达式中放置python函数.
以下语法可以很好地工作:
[python testMe()]
我的问题是关于如何给我的函数一些参数.
例如,如何像tcl一样给像素红色:r(x,y)
解决方法:
不幸的是,由于旋钮表达式和像素处理表达式的求值顺序,我认为您尝试做的事情是不可能的.
tl; dr:在要使用的变量实际可用之前,正在评估“表达式”节点的旋钮中的TCL表达式.
较长的版本
为了掩盖或简化原始问题,这掩盖了Nuke或简化了有关Nuke操作符评估的许多内容.
旋钮上的表达式(即方括号中的表达式,或使用右键单击->“ Add Expression …”进行设置)在运算符处理开始时(在您可以称之为“旋钮存储”阶段的过程中)进行评估任何类型的像素处理都会开始.此步骤生成内部C旋钮对象存储的实际(数字)值,以使这些值可在像素处理期间使用.大多数内置旋钮类型都可以透明地完成此扩展,因此插件开发人员不必担心自己在运算符代码中执行此操作.
了解一些情况的一种方法是在任何渲染上下文之外的以下任意一个旋钮的上下文中评估Nuke表达式:
nuke.tcl('in Expression1.expr2 {return [expression x]}')
这将使用Nuke TCL命令将表达式的评估上下文设置为像素表达式旋钮之一.然后,expression命令(不要与TCL的expr命令混淆)将给定的字符串评估为正常的Nuke旋钮表达式(旋钮表达式实质上使用的是TCL expr语法的受限子集,该子集仅对浮点值起作用,并且进行旋钮和像Grade1.blackpoint这样的字符串的可变分辨率.
您会注意到,此nuke.tcl调用实际上返回了一个值,但是不幸的是,该值是当前帧号.如果在表达式中用y替换x …,您将得到0.换句话说,在“旋钮存储”阶段(当Nuke扩展您的TCL表达式时),在旋钮的表达式上下文中像素坐标不可用. ).
当“表达式”节点实际在处理像素时,运算符会在表达式上下文中扩展每个表达式旋钮的文本值,该表达式上下文将x和y变量设置为当前正在处理的像素的坐标.
无论如何,我知道这可能有点技术性和冗长的作用,但是我希望它可以帮助解释这里的情况.