让cgteamwork自动为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_namemina()

houdini_plugin.py

import os,glob
import sys
import houdef 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):returnfolder = 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)

四 最终效果

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

link q :  316853809

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/453284.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RFID技术在哪些领域能够实现智能化应用

近年来,随着数字化转型和智能制造的不断推进,工业自动化程度不断提高,在这一过程中,RFID作为一项重要的自动识别和数据采集技术,被广泛应用于工业领域,并与企业的数字化系统(如ERP、MES、WMS等&…

【数据分享】1929-2023年全球站点的逐日平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,说到常用的降水数据,最详细的降水数据是具体到气象监测站点的降水数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全…

[linux] kolla-ansible 部署的openstack 修改mariadb默认端口号

kolla-ansible 部署前修改global.yml #freezer_database_backend: "mariadb" database_port: 9306 mariadb_port: 9306如果已经部署成功,直接修改配置文件里的端口号重启是没有用的,怀疑内部做了缓存,查看openstack 使用的memcach…

MySQL 架构和性能优化

重点: 视图,函数,存储过程,触发器,事件( 了解 ) 用户管理,密码管理 grant revoke 权限管理 MySQL 架构( 了解 ) 存储引擎:MyISAM 和 InnoDB …

Web html

目录 1 前言2 HTML2.1 元素(Element)2.1.1 块级元素和内联(行级)元素2.1.2 空元素 2.2 html页面的文档结构2.3 常见标签使用2.3.1 注释2.3.2 标题2.3.3 段落2.3.4 列表2.3.5 超链接2.3.6 图片2.3.7 内联(行级)标签2.3.8 换行 2.4 属性2.4.1 布尔属性 2.5 实体引用2.6 空格2.7 D…

Zookeeper相关面试准备问题

Zookeeper介绍 Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生了变化,Zookeeper就负责通知已经在Zoo…

nodejs express中使用连接池或者MySQL链接数据库出现Cannot read property ‘query‘ of undefined报错

1.如果你已经排除了数据库的启动状态原因和本地服务是否启动的原因 2.不妨看看你是否没有排查其他的数据库,我就是一直在排查第一个主数据库,却忘了我还连接了第二个数据库,就是第二个数据库的原因,出现这个错误。 3.我们可以通…

mac如何实现升级node版本、切换node版本

一、 查看node所有版本(前提:安装了nodejs) npm view node versions二、安装指定node版本 sudo n 版本号三、检查目前安装了哪些版本的node,会出现已安装的node版本 n四、切换已安装的node版本 sudo n 版本号其他命令 1、sudo npm cache…

学习ArtTs -- 初见ArkTs

作者:Uncle_Tom 原文链接:学习ArtTs -- 初见ArkTs-云社区-华为云 1. 前言 需要静态分析去检查一个语言,必须对这个语言有深刻的认识,才能有效的对这个语言进行有效的检查。 我常说:“作为一个程序分析员需要比一般的程序员考虑…

如何让虚拟机拥有愉快网络环境,vmware,ubuntu,centos

博客原文 文章目录 前言拥有愉快网络环境步骤:测试网关连接 Ubuntu修改 http 与 sock 代理地址修改 /etc/resolv.conf配置 apt 使用代理测试连接 Centos设置代理地址修改 NetworkManager最后重启网卡:测试代理 前言 相信计算机专业的同学在学习 linux 时, 一定会被无…

深度学习(7)---Diffusion Model概念讲解

文章目录 一、基本概括1.1 概念讲解1.2 Denoise模块 二、Stable Diffusion2.1 概念讲解2.2 FID2.3 CLIP 一、基本概括 1.1 概念讲解 1. Diffusion Model是一种生成模型,通过连续添加高斯噪声来破坏训练数据,然后学习反转的去噪过程来恢复数据。它分为正…

Spark 依赖包加载方式

1 Spark 依赖包来源 我们知道Spark application运行加载依赖有三个地方: systemClasspath:Spark安装时候提供的依赖包,${SPARK_HOME}/jars下的包。spark-submit --jars 提交的依赖包spark-submit --config "spark.{driver/executor}.e…