NODE BASED PROCEDURAL TASK :: VVGRAPH


特性:

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

 

無敵的后台:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM