因项目需要,三维部门跟踪组动画组都需要一个能够快速输出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. web前端优化

    在谈到Web优化之前,我们回到一个更原始的问题,Web前端的本质是什么.我的理解是: 将信息快速并友好的展示给用户并能够与用户进行交互.快速的意思就是在尽可能短的时间内完成页面的加载,试想一下当你在淘 ...

  2. 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central

    参考链接: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0623/3097.html

  3. asp.net 后台执行js

    1. 用Response.Write方法 代码如下: Response.Write("<script type='text/javascript'>alert("XXX ...

  4. Anaconda 的基本使用

    Anaconda常用的Python版本管理工具和Python包管理软件,conda是Anaconda中的具体管理工具,下载地址为: https://www.anaconda.com/distribut ...

  5. saliency 2015-2016的论文、代码

    https://github.com/ArcherFMY/Paper_Reading_List 另外2013年之前的见chengmingming的benchmark主页.

  6. tomcat:利用tomcat部署war包格式的项目

    配置jdk环境变量, 配置TOMCAT_HOME 变量, 将war包放入webapps中. 运行tomcar-bin文件夹中的startup.bat. tomcat会自动解压war包. 进入项目:

  7. difference among String,StringBuilder,StringBuffer

    difference among String,StringBuilder,StringBuffer String常用构造函数 String(byte[] bytes) String(byte[] b ...

  8. Elasticsearch Docker环境下安装

    Elasticsearch Docker环境下安装 Daemon镜像配置的是https://registry.docker-cn.com Linux:vi /etc/docker/daemon.jso ...

  9. 【git】一台机器上使用不同的git账号

    1.生成一个新的自定义名称的公钥: ssh-keygen -t rsa -C "shangxiaofei3@163.com" -f ~/.ssh/sxfself 一直点击回车 执行 ...

  10. OpenGL编程-OpenGL框架-win32项目

    在win32项目中开发的程序 小知识: 控制台应用程序运行就是dos的界面 项目一般采用了可视化开发 开发出来的东西就像QQ之类的 是有窗口界面的 程序运行结果是这样的 源代码:对第45行进行覆盖 # ...