特性:
1,随时查看节点的内部定义
2,类houdini的local variable/global variable功能
3,支持界面表达式paramexpression,方便引用其他节点界面值
4,随时查看节点里面的流动的attributes
5,支持用bash语法访问全局环境变量,局部变量
6,后台 支持覆盖节点参数值,支持多节点执行,支持添加环境变量
7,类Houdini bypass, current
8,暴露一部分API,方便操作graph node scene
9,完全分离运行线程,进程分离
10,快捷键大部分参考Houdini/Katana的风格来,按Y键断开链接,按e/p 显示节点参数界面,tab键创建节点
11,插件结构
12,cached network
13,plugin API超级友好
14,轻量级
LOGIC:
RELEASE 0.01:
KATANA WINDOWS:
Ubuntu:
KATANA LINUX
一个测试FFMPEG (先合成序列,转成微信支持得编码)
exrs to video
/mnt/lagrange_proj/course/WaterFlood/comp/V006
有需要我联系方式的WECHAT/QQ:617207388
--------------------------------------------- WIP ------------------------------------------------------
-----NODE BASED PROCEDURAL TASK-----
以前写过好多次,但是都没写完....主要是节点树的执行过程.这次打算好好写完。
这次目的是写一个 类似houdini sop下的 管理过程
目的是把大量流程中的杂乱比如后台处理,Arnold->Render->ffmepg合成视频等等 基于任务的东东,放到节点平台,这样可以完整的procedural the task
而且数据从左到右流动.节点树递归反向分析,等待退栈建立正确的节点执行顺序.去重建立节点缓存。
可以观看视频演示:Rlease v0.01 : https://vimeo.com/316527592
WIP_01:
WIP_02:初步实现tabview,还有点击tab键创建节点。
1,看这个tab键出来的选择创建节点的面板,完全按照Houdini的设计方式,
从Factory里读到节点的描述,真正点击的时候才创建真正的UI节点和他的delegate节点。
2,在Python中factory完全就是个list,根本就不用创建什么复杂的类型,里面直接塞N个{节点描述字典},
也可以直接全部创建为字典描述,不过 这样节点注册的完 工厂里的节点描述 是没顺序的。
支持像Nuke 一样的快捷键D: 把节点bypass/ on the fly 查看节点的所有核心属性
Sticky Node: TODO:Fix the focus event......
修复focus event, 当你在打字的时候请别影响别的选择的Node.......
WIP: dot 节点仅仅只连接
化繁去简,节点参数界面简单映射:
Production Ready:
一套自定义的command 创建模块:
比如CMDStart节点:
# A cmd start engine class CmdStart(Stream_Node): def __init__(self): super(CmdStart, self).__init__() self.outputPortColor = [30, 255, 150] self.color = [170, 255, 200] self.haveInput = False self.haveOutput = True self.appendAttributeMapping('executable') self.appendAttributeMapping('args') def cookMyNode(self): exec_path = self.evalParam('executable') self.gdp.addAttribute('executable', exec_path) self.gdp.addAttribute('args', []) Message("Create Attribute:>>%s<< in the node%s, the excutable is:%s" % ("executable",self.name, exec_path)) @staticmethod def creator(): return CmdStart() CmdStartSignal = {} CmdStartSignal['name'] = 'UniversalCommandStart' CmdStartSignal['typeName'] = 'CMDStart' CmdStartSignal['creator'] = CmdStart.creator CmdStartSignal['paramsContainer'] = CmdStartParams CmdStartSignal['flavor'] = 'Universal Command' CmdStartSignal['context'] = 0x01 # EXPORT ALL PLUGINS EXPORTS_PLUGINS = [CmdStartSignal, CmdEndSignal, BuildingArgChainSignal, BuildingDopArgChainSignal, AppendDopArgChainSignal, IOWriteTextSignal, IOReadTextSignal]
CMDEnd:
class CmdEnd(Stream_Node): def __init__(self): super(CmdEnd, self).__init__() self.outputPortColor = [30, 255, 150] self.color = [170, 255, 200] self.haveInput = True self.haveOutput = False self.appendAttributeMapping('executable') self.appendAttributeMapping('args') def cookMyNode(self): self.copyInput() exec = self.gdp.getAttributeValue('executable') args = self.gdp.getAttributeValue('args') for arg in args: exec += (" " + arg) Message("building command line is :%s"%(exec)) os.system(exec) @staticmethod def creator(): return CmdEnd() CmdEndSignal = {} CmdEndSignal['name'] = 'UniversalCommandEnd' CmdEndSignal['typeName'] = 'CMDEnd' CmdEndSignal['creator'] = CmdEnd.creator CmdEndSignal['paramsContainer'] = None CmdEndSignal['flavor'] = 'Universal Command' CmdEndSignal['context'] = 0x01
Bug Fix, QProcess replace the os.system()
描述katana后台
Add JIT Support
发现一个致命的问题,如果要在python中使用QProcess 显示正确的进程消息:因为QByteArray->不能直接decode.不如QString方便.可是python没这个玩意啊
可以使用:
def printStdOut(): readSize = self.bytesAvailable() readData = self.read(readSize)
# 也可以未decode('cp936') print(readData.data().decode('gb2312'))
直接显示正确....
Finally:
例如ping -t 127.0.0.1
无敌的后台: