特性:
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
無敵的后台: