当前位置:   article > 正文

让cgteamwork自动为Houdini载入相机,角色道具的abc文件_houdini脚本导入相机abc

houdini脚本导入相机abc

一 需求

最近接到个需求:在创建EFX文件时,自动加载动画出的缓存abc文件+相机, 不用手动一个个的载入,还容易出错
ABC文件自动导入到Houndini里

ABC文件自动导入到Houndini里

二 过程/效果

在CGTeamwork里打开对应的镜头,下面的文件列表显示相机和角色文件, 之前特效师手动一个个的参考到houdini文件上去的, 很费劲还容易漏掉,自动化工具需要自动把它们加载到houdin上去。

  1. 配置houdini启动器,在参数栏上写入houdini_open_start.py路径, win路径填houdini安装路径,其他的视情况填CGT启动器参数配置
CGT启动器参数配置
  1. 点击cgteamwork镜头任务右上角的houdini关联, 自动打开houdini软件
    CGTeamwork调用houdini
CGTeamwork调用houdini
  1. houndin相机自动载入起始帧,统一的命名。 资产abc自动放到一个组内
    abc文件载入到houdini
abc文件载入到houdini
![相机文件载入到houdini](https://img-blog.csdnimg.cn/direct/ecd864f922824f7792ac0a08fa517433.png#pic_center)
相机文件载入到houdini
![特效示意载入到houdini](https://img-blog.csdnimg.cn/direct/b58d095bf7b5478c8f24125a24730804.png#pic_center)
特效示意载入到houdini
  1. 自定义一个统一的输出节点, 以免输出路径不统一
    自动创建个输出路径
自动创建个输出路径

三 代码

原理:cgteamwork先调用start, 找到当前的镜头号,给到plugin, plugin算到路径下的abc列表,把列表文件赋给 /obj
houdini_open_start.py

import os,glob
import sys
import houdini_plugin
G_NukePlugin_Path = os.path.dirname( sys.argv[0] )
sys.path.append( G_NukePlugin_Path )
try:
    from PySide2.QtCore   import *
except:
    from PySide.QtCore   import *    
os.environ['QTWEBENGINEPROCESS_PATH'] = ''
appPath = QCoreApplication.applicationFilePath()
sys.path.append(r'C:/CgTeamWork_v7/bin/base')
import cgtw2
t_tw = cgtw2.tw()

def mina():       
    db    = sys.argv[1]
    module        = sys.argv[2]
    taskname      = sys.argv[3]
    taskid        = sys.argv[4]
    taskid        = taskid.split(":")[1]

    module="shot"
    field_sign_list=t_tw.task.fields(db,module)[:50]
    filter_list=[]
    id_list=[taskid]
    tasks = t_tw.task.get(db, module, id_list, field_sign_list, limit='5000', order_sign_list=[])
    if tasks:
        task = tasks[0]
        # print(122323,task)
        houdini_plugin.create_alembic_node(task["eps.entity"], task['shot.entity'])#source_name

        
mina()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

houdini_plugin.py

import os,glob
import sys
import hou

def create_alembic_node(ep, shot):
    alembic_dir = "S:/Projects/NL/QHMX/{}/Shot/{}/Animation/approve/cache/".format(ep, shot)
    if not os.path.exists(alembic_dir):
        return
    folder = glob.glob(alembic_dir+r"alembic/*.abc")
    geoNode = hou.node("/obj/").createNode("geo", "abc")
    geoNode.setColor(hou.Color(1,0,0))
    geoNode.setPosition([3,0])
    # geoNode.setDisplayFlag(False)
    # geoNode.setSelectableInViewport(False)

    scaleNode = hou.node("obj").createNode("null", "Scale")
    scaleNode.setColor(hou.Color(1,0,0))
    scaleNode.setPosition([0,2])

    for file in folder:
        file = file.replace("\\","/")
        filename = os.path.basename(file).replace(".abc","")
        if filename!="light":
            abcNode = geoNode.createNode("alembic", filename)
            abcNode.parm("fileName").set(file)  
            abcNode.moveToGoodPosition()
            # abcNode.layoutChildren()
        else:
            lightNode = hou.node("/obj/").createNode("geo", "light")
            lightNode.setColor(hou.Color(1,0,0))
            lightNode.setPosition([1,0])
            abcNode = lightNode.createNode("alembic", filename)
            abcNode.parm("fileName").set(file)  
            abcNode.moveToGoodPosition()
            lightNode.setFirstInput(scaleNode)  
      
    geoNode.setFirstInput(scaleNode)   

    folder = glob.glob(alembic_dir+r"camera/*.abc")
    file = folder[0].replace("\\","/")
    filename = os.path.basename(file).replace(".abc","")
    node = hou.node('obj')
    camnode = node.createNode('alembicarchive',filename)
    camnode.setColor(hou.Color(1,0,0))
    camnode.parm('fileName').set(file)
    camnode.setPosition([-3,0])
    camnode.setFirstInput(scaleNode)
    camnode.parm('buildHierarchy').pressButton()

    parent = camnode.parent()
    box = parent.createNetworkBox()
    box.addItem(camnode)
    box.addItem(geoNode)
    box.addItem(scaleNode)
    node = hou.node('/obj/NL_{ep}_{shot}_Cam/NL_{ep}_{shot}_Cam/NL_{ep}_{shot}_CamShape'.format(ep=ep, shot=shot))
    node.parm("resx").set(1920)
    node.parm("resy").set(1080)

    
    fileNode = hou.node('/obj/').createNode('geo', 'filecache')
    fileNode.moveToGoodPosition()
    fileNode.setColor(hou.Color(0,0,1))
    # fileNode.setPosition([0,3])
    filecache = fileNode.createNode('filecache', 'filecache1')
    filecache.parm('filemethod').set(1)
    path = 'S:/Cache/NL/QHMX/{}/{}/`opname("..")`/$OS/$OS.$F4.bgeo.sc'.format(ep, shot)
    filecache.parm('file').set(path)
    box.addItem(fileNode)


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

四 最终效果

在这里插入图片描述
大大降低手工操作,完成!

link q :  316853809
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/119066
推荐阅读
相关标签
  

闽ICP备14008679号