因项目需要,三维部门跟踪组动画组都需要一个能够快速输出nuke预合成工程的脚本。脚本已经写完,源码不便于放出来,写一个大致思路吧。

我首先分析了nuke工程,内部包含了哪些节点,这些节点有哪些属性需要在脚本的UI界面上可控。之后我查看了nuke工程的脚本,分析其结构。大部分软件工程都是类xml的结构,nuke也不例外,所以要生成这样一个nuke工程是有规律可循的,只需要把节点的属性按照这个格式一个个的追加到一个字符串变量再利用f.write()将其输出成工程文件即可。这样大致思路就得到了。

接下来就是考虑到代码的复用性了,因为输出的工程不是唯一的,用已有的nuke工程模板去套显然是一种比较低级的方法。我考虑在python构建一个Node基类,基类中有对应的操作方法,比如添加设置相关属性,设置inputnode等。然后再继承该基类,构建一些特殊节点,比如RootNode节点,在nuke中root实际上并非节点,而是工程的全局设置,它有特定的默认属性,所以需要单独再为其构建一个类RootNode(Node)。

构建完Node类了就可以考虑将Node按顺序添加到字符串变量中了。我再次构建一个类ScriptWriter用以完成这个添加的操作。类中定义了读取Node属性的方法、将属性逐一添加进字符串变量的方法。完成这个类的构建后就可以写个函数来执行这个过程了。

最后再快速的写了个maya的UI,建立好按钮来执行上述命令即可。UI的编写比较简单,无非就是框架、parent一类,我添加了一些特有的小功能在里面,比如:输入框中回车后会激活下一个输入框,就省了鼠标的点击操作;内部构建了变量并利用vars().has_key()判定是否存储上一次的输入信息;集成了输出abc文件的按钮以节约artist时间等。

上个图吧做个结尾吧:

Maya中输出nuke脚本的方法的更多相关文章

  1. Maya中输出alembic文件的方法

    Maya中输出alembic文件是有现成api调用的,与maya中大部分api一样,这个功能参数的传入是非常类似mel的,本质上讲都是kwargs类型的参数,所以我们传入的参数就需要整理成类似于mel ...

  2. Maya中提交Nuke工程到deadline中的方法

    在之前的一篇文中介绍了在maya中生成nuke工程脚本的方法,后来部门负责人希望更简单一些,能在那个功能面板里提交deadline农场渲染更好,这样就不用打开nuke手动提交了,省去了在两个软件直接来 ...

  3. 在html中添加script脚本的方法和注意事项

    在html中添加script脚本有两种方法,直接将javascript代码添加到html中与添加外部js文件,这两种方法都比较常用,大家可以根据自己需要自由选择 在html中添加<script& ...

  4. shell中引用其他脚本的方法

    在Shell中引用其他脚本的方法是source   filename.sh 或    .    filename.sh 注意:      .   和   filename.sh之间必须有空格

  5. PowerShell因为在此系统中禁止执行脚本解决方法

    PowerShell因为在此系统中禁止执行脚本解决方法   在Powershell直接脚本时会出现: 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 " ...

  6. C++中输出变量类型的方法

    C++中输出变量类型的方法 在c++中输出变量或者数据类型,使用typeid().name()的方法.如下例子: #include <iostream> #include <stri ...

  7. ASP.NET CS文件中输出JavaScript脚本的3种方法以及区别

    Response.Write 与   Page.ClientScript.RegisterStartupScript 与 Page.ClientScript.RegisterClientScriptB ...

  8. ASP.NET CS文件中输出JavaScript脚本

    ClientScript.RegisterStartupScript:http://msdn.microsoft.com/zh-cn/library/system.web.ui.clientscrip ...

  9. InstallShield在MySQL和Oracle中执行SQL脚本的方法InstallShield在MySQL和Oracle中执行SQL脚本的方法

    简述 InstallShield已经内建了对MySQL和Oracle的支持.但是这个功能是通过ODBC实现的,它对SQL脚本的格式要求非常严格,因此已经通过官方客户端测试的脚本在IS中执行时往往就会报 ...

随机推荐

  1. encodeURI和encodeURIComponent区别

    参考:https://www.jianshu.com/p/075f5567c9a1 这两个函数功能上面比较接近,但是有一些区别. encodeURI:不会进行编码的字符有82个 :!,#,$,& ...

  2. SQL注入之Sqli-labs系列第十二关

    开始挑战第十二关(Error Based- Double quotes- String) 12点半了,不困,继续,继续,继续 先看看页面,通常的使用单引号等进行操作,看看啥么情况先 咦,出现错误信息了 ...

  3. nginx php

    server { listen 443; server_name www.awkj.com; ssl on; ssl_certificate cert/214683879970617.pem; ssl ...

  4. [LeetCode&Python] Problem 283. Move Zeroes

    Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...

  5. Gym101485: NWERC 2015(队内第6次训练)

    A .Assigning Workstations 题意:给定N个人的工作时间和工作时长,我们可以假设有无数台工作机器,如果一台机器超过M时间未使用就会关闭,那么我们怎么安排机器的使用,使得需要开启机 ...

  6. java中事件驱动

    在java语言中,事件不是由事件源自己来处理的,而是交给事件监听者来处理,要将事件源(如按钮)和对事件的具体处理分离开来.这就是所谓的事件委托处理模型. 事件委托处理模型由产生事件的事件源.封装事件相 ...

  7. hdu3336 Count the string 扩展KMP

    It is well known that AekdyCoin is good at string problems as well as number theory problems. When g ...

  8. MVVM在WPF中应用(1)

    在软件行业浸润了这么多年,第一次在MES的工厂里从事软件开发. 在这里的感觉就是安静.宽松,比在那些专门以软件为主的企业中轻松自在.在这里的第一个项目是关于数据的导入和导出,还有数据的比较这些功能. ...

  9. Eclipse使用Maven时出现:Index downloads are disabled, search results may be incomplete.问题解决

    https://www.cnblogs.com/EasonJim/p/6674099.html 1.全局设置 [Windows]->[Preferences]->[Maven]->勾 ...

  10. struts2 中的数据访问servletAPI

    ActionContext包含其他数据对象,包括值栈     每次请求都会创建一个ActionContext对象 通过ActionContext访问数据 在action中读取  在jsp页面中读取 1 ...