让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.mzph.cn/news/668064.shtml

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

相关文章

C# 更改系统的屏保设置

C# 更改系统的屏保设置 一、如果你想更改系统的屏保设置,可以使用P/Invoke调用SystemParametersInfo函数。 以下演示如何设置屏幕保护程序的等待时间(也就是启动屏保前无操作的时间间隔), 示例代码: using System;…

C# 怎么判断屏幕是第几屏幕?屏幕是垂直还是水平?屏幕的分辨率?

一、怎么判断屏幕是第几屏幕? 可以使用System.Windows.Forms.Screen.AllScreens属性来获取所有已连接的屏幕,并根据鼠标位置或窗口的位置来判断它所在的屏幕索引。 using System; using System.Windows.Forms;// 获取鼠标当前位置所在的屏幕 Point cur…

OpenGL统一变量 Uniform Variables

OpenGL统一变量 Uniform Variables 在OpenGL着色器编程中,uniform变量是一种特殊的全局变量,它们的作用是在图形渲染管线的不同阶段(如顶点着色器、片段着色器等)共享常量数据。uniform变量的值由CPU端的应用程序设置&#xff0c…

格式化日期注解@JsonFormat的使用和TimeZone时区问题

JsonFormat的使用 目的 为了便于date类型字段的序列化和反序列化,需要在数据结构的Date、Timestamp、DateTime类型的字段上用JsonFormat注解进行注解 使用 JsonFormat注解是一个时间格式化注解,比如我们存储在mysql中的数据是date类型的,当…

自学Java的第58,59天

网络通信 网络通信三要素:ip地址,端口号,协议 ip地址 常用方法 写法 端口号 协议 UDP通信 快速入门 写法(客户端) (服务端) UDP通信 多发多收 TCP通信 写法(客户端) …

车载充电器(OBC)氮化镓(GaN)驱动(高压高功率)设计(第四篇)

上图来自于网络 1、GaN FET概念 GaN FET,全称为Gallium Nitride Field-Effect Transistor(氮化镓场效应晶体管),是一种采用氮化镓(Gallium Nitride, GaN)材料制作的新型功率半导体器件。相较于传统的硅基…

前端常见30个bug以及解决方法

页面加载慢:可以通过优化代码、减少HTTP请求、使用CDN等方式来解决。 页面布局错乱:可以通过检查CSS样式、使用浏览器开发者工具进行调试来解决。 图片加载失败:可以通过检查图片路径、图片格式、网络连接等来解决。 点击事件无效&#xf…

物联网与智慧景区的未来:机遇与挑战并存

随着科技的不断发展,物联网技术在智慧景区中的应用越来越广泛,为旅游业带来了巨大的变革。然而,在物联网与智慧景区的未来发展中,机遇与挑战并存。本文将探讨物联网与智慧景区面临的机遇和挑战,并提出应对措施&#xf…

《幻兽帕鲁》解锁基地和工作帕鲁数量上限

帕鲁私服的游戏参数通常可通过配置文件 PalWorldSettings.ini 来进行修改,然而这个配置文件有个别参数对游戏不生效,让人很是头疼。没错!我说的就是终端最大的帕鲁数量! 其实还有另外一种更加高级的参数修改方式,那就…

使用Python和HTTP代理进行API请求

Python,这个简单易学又功能强大的编程语言,在网络爬虫、数据分析、自动化任务等领域都有着广泛的应用。而当我们需要从外部网站获取数据时,API(应用程序接口)就成了我们的得力助手。但有时候,某些网站会对A…

vscode 无法远程连接waiting the server log

使用版本 报错信息 相关日志 [17:32:59.765] > Waiting for server log... [17:32:59.801] > Waiting for server log... [17:32:59.831] > > * > * Visual Studio Code Server > * > * By using the software, you agree to > * the Visual Studio…

ip网络的三类地址及其相互关系

随着互联网的普及和发展,IP网络已成为全球范围内最重要的信息交换平台。在IP网络中,IP地址是每个设备在网络中的唯一标识,是实现网络通信的关键。虎观代理小二二将详细介绍IP网络中的三类地址,即A类、B类和C类地址,以及…

C++进阶--C++11线程库

目录 一、线程库(thread)1.1 线程对象的构造方式1.1.1 调用无参的构造函数1.1.2 调用带参的构造函数1.1.3 调用移动构造函数 1.2 thread提供的成员函数1.3 获取线程的id方式1.4 线程函数的参数问题1.5 join与detach1.5.1 join方式1.5.2 detach方式 二、互…

【C/C++ 12】C++98特性

目录 一、命名空间 二、缺省参数 三、函数重载 四、引用 五、内联函数 六、异常处理 一、命名空间 在C/C项目中,存在着大量的变量、函数和类,这些变量、函数和类都存在于全局作用域中,可能会导致命名冲突。 使用命名空间的目的就是对…

13.从桥接模式细品人生的几座桥

“物理学不存在了,今后也不会存在。”——《三体》 在《三体》中,有这样一个桥段,顶级的物理学家杨冬在三体文明超级计算机“智子”的干扰和误导下,得出了物理实验的结果在实验之前就会被某种力量确定的结论,导致自己…

2024牛客寒假算法基础集训营1(视频讲解全部题目)

2024牛客寒假算法基础集训营1&#xff08;题目全解&#xff09; ABCDEFGHIJKLM 2024牛客寒假算法基础集训营1&#xff08;视频讲解全部题目&#xff09; A #include<bits/stdc.h> #define endl \n #define deb(x) cout << #x << " " << …

springboot(ssm交友系统 在线社交论坛网站系统Java系统

springboot(ssm交友系统 在线社交论坛网站系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#…

elasticsearch重置密码操作

安装es的时候需要测试这个url&#xff1a;http://127.0.0.1:9200/ 出现弹窗让我输入账号和密码。我第一次登录&#xff0c;没有设置过账号和密码&#xff0c; 解决方法是&#xff1a;在es的bin目录下打开cmd窗口&#xff0c;敲命令&#xff1a;.\elasticsearch-reset-password…

AI新宠Arc浏览器真可以取代Chrome吗?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

使用Vue+ ECharts进行动态图表展示

文章目录 一、Vue项目引入ECharts二、CDH搭建,为动态图提供数据三、Vue+ ECharts常见问题四、热门文章一、Vue项目引入ECharts Vue是一个用于构建用户界面的渐进式JavaScript框架,可以轻松构建单页面应用程序(SPA)。ECharts是一个基于JavaScript的数据可视化库,可以通过简单…