写了一个RenderInBackground的脚本
某主管希望write节点有多线程渲染的功能,而nuke中的render in background功能恰恰可以多个渲染任务同时执行,于是我考虑使用这个方法来实现。
node = nuke.thisNode()
if node.knob('User'):
print 'exist'
else:
knob_tk = nuke.Tab_Knob('User','RenderInBackground')
node.addKnob(knob_tk)
if node.knob('information'):
print 'exist'
else:
knob_tk2 = nuke.Text_Knob('information','Info:')
knob_tk2.setValue("Please make sure your setting didn't overflow available memory,so enough memory is necessary.")
node.addKnob(knob_tk2)
if node.knob('firstframe_1'):
print 'exist'
else:
knob_ff = nuke.Int_Knob('firstframe_1','FirstFrame')
knob_ff.setValue(1001)
node.addKnob(knob_ff)
knob_ff.setTooltip('entry first frame of render range')
if node.knob('lastframe_1'):
print 'exist'
else:
knob_lf = nuke.Int_Knob('lastframe_1','LastFrame')
knob_lf.setValue(1100)
node.addKnob(knob_lf)
knob_lf.setTooltip('entry last frame of render range')
if node.knob('splitNum'):
print 'exist'
else:
knob_sn = nuke.Int_Knob('splitNum','splitNum')
knob_sn.setValue(2)
node.addKnob(knob_sn)
knob_sn.setTooltip('entry number of splited framerange')
if node.knob('maxThreads'):
print 'exist'
else:
knob_mt = nuke.Int_Knob('maxThreads','maxThreads')
knob_mt.setValue(4)
node.addKnob(knob_mt)
if node.knob('maxCache'):
print 'exist'
else:
knob_mc = nuke.Int_Knob('maxCache','maxCache')
knob_mc.setValue(2000)
node.addKnob(knob_mc)
if node.knob('unnamed'):
print 'exist'
else:
knob_tt = nuke.Text_Knob('unnamed','')
node.addKnob(knob_tt)
if node.knob('renderinbackground'):
print 'exist'
else:
knob_py = nuke.PyScript_Knob('renderinbackground','RenderInBackground')
node.addKnob(knob_py)
knob_py.setCommand('''import time
if nuke.thisNode().knob('file').value().find(':/') == -1:
nuke.message('file is empty')
else:
if os.path.exists(os.path.dirname(nuke.thisNode().knob('file').value()))==True:
print nuke.thisNode().knob('file').value()
else:
os.makedirs(os.path.dirname(nuke.thisNode().knob('file').value()))
firstframe_2 = int(nuke.thisNode().knob('firstframe_1').value())
lastframe_2 = int(nuke.thisNode().knob('lastframe_1').value())
splitnum_2 = int(nuke.thisNode().knob('splitNum').value())
subrange = int((lastframe_2 + 1 - firstframe_2)/splitnum_2)
maxthreads = nuke.thisNode().knob('maxThreads').value()
maxcache = nuke.thisNode().knob('maxCache').value()
view = nuke.views()
limits = {'maxThreads':maxthreads,'maxCache':'%dM'%maxcache}
for i in range(splitnum_2+1):
framerange = nuke.FrameRange()
frameranges = nuke.FrameRanges()
if firstframe_2 - 1 + subrange * (i+1) >= lastframe_2:
framerange.setLast(lastframe_2)
else:
framerange.setLast(firstframe_2 - 1 + subrange * (i+1))
if lastframe_2 >= firstframe_2 + subrange * i:
framerange.setFirst(firstframe_2 + subrange * i)
framerange.setIncrement(1)
frameranges.add(framerange)
time.sleep(0.1)
print frameranges
nuke.executeBackgroundNuke(nuke.EXE_PATH,[nuke.thisNode()],frameranges,view,limits)
else:
pass
inputx = nuke.thisNode()['xpos'].value()
inputy = nuke.thisNode()['ypos'].value()
newnode = nuke.nodes.Read(file=nuke.thisNode().knob('file').value(),first=firstframe_2,last=lastframe_2,)
newnode.setXYpos(int(inputx),int(inputy)+50)'''
)
nuke.addOnCreate(RenderInBackground,nodeClass = 'Write')
写了一个RenderInBackground的脚本的更多相关文章
- 自己写的一个tomcat发布脚本
闲来无事,就自己写一个shell脚本,方便自己以后在服务器上部署tomcat下的项目.我本地用maven打包,然后每次都要人工去切换一堆堆目录,有点繁琐,所以我写了下面的shell脚本. #! /bi ...
- 基于七牛Python SDK写的一个批量下载脚本
前言 上一篇基于七牛Python SDK写的一个同步脚本所写的脚本只支持上传,不支持文件下载. 虽然这个需求不太强烈,但有可能有人(在备份.迁移时)需要,而官方有没提供对应的工具,所以我就把这个功能也 ...
- 把登录和退出功能单独写到一个公共.py脚本,其它用例test1,test2调用公共登录,退出函数
公共登录/退出函数模块(login_exit.py): #coding:utf-8import timedef login(driver, username, password):#此处的driver ...
- python3 写的一个压测脚本(有待开发)
import requests import queue import threading import time status_code_list = [] exec_time = 0 class ...
- python+imageMagick写的一个压缩图片脚本
!/usr/bin/python import os import cPickle as p import re import Image def imageCompre(imagedir = '.' ...
- 写了一个常规性生成merge 的小脚本
现在使用数据库来写存储过程,动不动参数就会用到xml ,当然罗,优势也很明显,参数相对固定,而且灵活,如果要修改或者什么的,中间接口层也不需要做变化,只需要修改封装的存储过程以及程序传参就ok了. 随 ...
- 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助
初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: var fs = require('f ...
- 手把手用Monkey写一个压测脚本
版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 允许有条件转载,转载请附带底部二维码. 一.为什么需要一个测试脚本? 昨天讲解了Android Monkey命 ...
- 写了一个hiero中添加自定义Token的脚本
Hiero自带Token往往不够用,shotname中自带版本号的情况下要升级版本会很麻烦,比如Shot_0001_v001这样一个序列名,要升级为Shot_0001_v002就必须把_v001之前的 ...
随机推荐
- Spring Web Flow
Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序.Spring Web Flow是Spring MVC的扩展,它支持开发基于流程的应用程序.它将流程的定义与实现流程行为 ...
- Redis持久化--RDB+AOF(转)
1.Redis两种持久化方式 RDB 执行机制:快照,直接将databases中的key-value的二进制形式存储在了rdb文件中 优点:性能较高(因为是快照,且执行频率比aof低,而且rdb文件中 ...
- Python网络爬虫之requests模块(1)
引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...
- day04之流程控制
if语句: if 条件1: pass elif 条件2: pass elif 条件3: pass else: pass if 条件语句中,先判断条件1,如果满足条件1,则执行第二行代码,第二行执行完后 ...
- pytonn04day
参考: https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions 一列表 它是以[ ]括起来, 每个元素⽤用 ...
- npm常规命令行集合
最近在摸索vue-cli脚手架的安装,中间用到了一些node的npm命令行,进行了一些整理,并且这个会一直搜集整理更新! 1,常规文件操作命令 cd.. 返回当前文 ...
- java-Random类
1.Random类的概述和方法使用 * A:Random类的概述 * 此类用于产生随机数 * 如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数 ...
- rest-framework之响应器(渲染器)
rest-framework之响应器(渲染器) 本文目录 一 作用 二 内置渲染器 三 局部使用 四 全局使用 五 自定义显示模版 回到目录 一 作用 根据 用户请求URL 或 用户可接受的类型,筛选 ...
- [codeforces][Educational Codeforces Round 53 (Rated for Div. 2)D. Berland Fair]
http://codeforces.com/problemset/problem/1073/D 题目大意:有n个物品(n<2e5)围成一个圈,你有t(t<1e18)元,每次经过物品i,如果 ...
- python基础-函数基本特性和用法
函数: 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数.自变量x的取值 ...