因项目需要,三维部门跟踪组动画组都需要一个能够快速输出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. 用Synoptic Panel自定义基于图形的可视化控件--制作一张剧场售票统计报表

    数据可视化的一大特点就是能给报表使用者带来感官上的享受.不再是枯燥的数字,而变成一个一个亮丽的图形.之前业界大神公布过一个统计Car Accidents的报表,这个Power BI Report的特点 ...

  2. advanced ip scanner —— 局域网下 ip 及设备的扫描

    advanced ip scanner 下载地址:Advanced IP Scanner - Download Free Network Scanner. 用于扫描当前局域网下全部设备及其 ip,构建 ...

  3. 通过修改源码,免插件实现wordpress去除链接中的category

    将以下代码加在主题目录的functions.php /** * 去除category */ add_action('load-themes.php', 'no_category_base_refres ...

  4. [err]multiple definition of `***'

    err CMakeFiles/dsm.dir/src/main_stateEstimation.cpp.o: In function `align_mean(cv::Mat, cv::Rect_< ...

  5. [Data Structure] Stack Implementation in Python

    We can realize a Stack as an adaptation of a Python List. S.push(e)=L.append(e) S.pop()=L.pop() S.to ...

  6. 如何让jpa 持久化时不校验指定字段

    源文:https://www.toocruel.net/jpa-validate/ 怎么让jpa 持久化时不校验指定字段 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥 ...

  7. web服务器和数据库服务器分离的优势

    一般我们服务器都是分开的,网页服务器.数据服务器单独配置. web服务器不掉,那么就可以正常使用,data服务器掉了,那么web还可以坚持一会. 如果是web服务器掉了,那么就上不去了,不过有一些设置 ...

  8. JPI中常使用的类介绍:

    Math类: java.lang包下的 final,不可被继承, 其中的方法和属性都是静态的 其构造方法私有化了,其他类不可以使用构造方法. 向上取整:Math.ceil(double d); 向下取 ...

  9. LeetCode - Merge Two Binary Trees

    Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...

  10. nodejs-hook 开发

    nodejs require hook 功能很强大,我们可以用来将不支持的数据文件,直接使用require 进行加载,同时 我们可以方便的进行代码的预编译(比如babel 的组件) 为了方便使用npm ...