Houdini的PythonScript基本使用

前言

Houdini内置了Python脚本和相应的编辑器, 很多时候想灵活的制作各种Houdini工具, 基本是必须用到 Python。Houdini官方的python提供了非常完善的接口, 比如可以创建各种节点,连接各种节点,遍历节点各种数据,遍历节点参数等等。

Houdini Python官方资料

Python scripting (sidefx.com)

hou.node (sidefx.com)

非常全面罗列了Houdini Python各种接口。 这篇文章主讲hou模块的基本使用

HoudiniPython编写工具

Python Shell运行控制台

方便用户做Python开发

Houdini里的各种节点和节点参数都可以直接从编辑器拖拽到Python shell里生成获取对象脚本

houdini

Python SourceEditor

相比python shell, 方便写多行python代码,结果也是输出python shell,也支持节点路径拖拽到Editor里

Houdini Python具体使用和概念介绍

节点基本类型

Houdini的节点基础类型为OpNode, 子类型分为ObjNode, SopNode, LopNode等.

这节主讲ObjNode, SopNode

hou.OpNode (sidefx.com)

hou.ObjNode (sidefx.com)

hou.SopNode (sidefx.com)

节点操作

获取节点

hou.node('/obj/geo1/null1')

获取节点类型, 节点类型名和节点名等

hou.node('/obj/geo1/null1').type()
hou.node('/obj/geo1/null1').type().name()
hou.node('/obj/geo1/null1').name()

 创建节点

hou.node('/obj/geo1').createNode("box")
hou.node('/obj/geo1').createNode('attribwrangle', "ttt")

这里传的"attribwrangle"为具体节点的类型名, 也就是node.type().name()

CD到某个节点路径下

作用等同于cmd的cd

hou.cd("/obj")
hou.node("geo1")

获取直接的子节点

hou.node('/obj').children()

节点参数

节点参数类型(hou.ParmTuple和hou.Parm)

hou.Parm指最简单参数元素,比如int, float, bool.

而多个(包含1个)hou.Parm一起组成了hou.ParmTuple, 比如float2, int2, color等等.

节点获取某个参数Parm

hou.parm('/obj/geo1/subnet1/Count')
hou.parmTuple('/obj/geo1/subnet1/Pos2')
hou.parmTuple('/obj/geo1/subnet1/Pos2')[0]

节点获取所有parm,parm_name, parmTemplate,parmTemplate的类型

hou.Parm (sidefx.com)

hou.ParmTemplate (sidefx.com)

hou.parmTemplateType (sidefx.com)

hou.node('/obj/geo1/subnet1').parms()

很显然数组实例化出来的"a1", "a2", 文件夹Fold0, 向量的单元素也成为了parm.

import hou
params = hou.node('/obj/geo1/subnet1').parms()
for parm in params:print(parm.name()) # 名字print("param is array instance: ", parm.isMultiParmInstance()) # 参数是否是数组的实例parm_template = parm.parmTemplate() print(parm_template) # 参数模版print(parm_template.type()) # 参数模版类型print("\n")

节点获取所有parm_tuple, parmTemplate

import hou
parm_tuples = hou.node('/obj/geo1/Test1').parmTuples()
for parm_tuple in parm_tuples:print(parm_tuple)parmTemplate = parm_tuple.parmTemplate()# 筛选数组的实例if not parm_tuple.isMultiParmInstance():print(parmTemplate)# 如果此元素为数组,获取子元素模版if parmTemplate.type() == hou.parmTemplateType.Folder:print("child element template:")print(parmTemplate.parmTemplates())print("\n")

节点设置值和获取值

设置参数值

hou.parm('/obj/geo1/Test1/ArrayName').set(3)
hou.parm('/obj/geo1/Test1/a3').set(1)
hou.parmTuple('/obj/geo1/Test1/Color').set((6, 6, 6))
hou.parm('/obj/geo1/Test1/Button').pressButton()

获取参数值

hou.parmTuple('/obj/geo1/Test1/Color').eval()
hou.parm('/obj/geo1/Test1/a1').eval()
hou.parmTuple('/obj/geo1/Test1/Pos3')[0].eval()
hou.parm('/obj/geo1/Test1/ArrayName').eval()

同类型参数的区分

下面是典型例子,在Houdini中参数的区分不能仅仅用parmTemplateType和parmTupleSize去区分,像Color和float3很明显需要look或者naming schene等信息作为区分.

节点输入输出相关

获取输入节点,输出节点,输入输出连接信息

hou.node('/obj/geo1/Test1').outputs()
hou.node('/obj/geo1/Test1').inputs()
hou.node('/obj/geo1/Test1').inputConnections()
hou.node('/obj/geo1/Test1').outputConnections()

设置节点相连

box_node = hou.node('/obj/geo1/box1')
test_node = hou.node('/obj/geo1/Test1')
null2node = hou.node('/obj/geo1/null2')test_node.setInput(2, box_node)
null2node.setInput(0, test_node)
null2node.createOutputNode("box", "box_test")

获取节点相关几何数据

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

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

相关文章

word避免画质画质模糊方法

问题描述:   近期写文档时会高频率贴图,粘图过程中发现Word会自动压缩图片画质,而且压缩得很严重,下面是一幅图被压缩前后的画质对比 (图片压缩前) (图片压缩后) 解决方案&#x…

基于JSP的九宫格日志网站

你好呀,我是学长猫哥!如果有需求可以文末加我。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:浏览器/服务器(B/S)结构 系统展示 首页 管理员功能模块 用户功能模块 摘要 本…

GPT-4o VS GPT-3.5 完胜

前言: 最近,GPT-4o已经限时免费开放了,试了一下,然后,说我的时间到了,然后,有给我转到3.5,正好遇到一个问题做一下对吧,感觉4O完胜啊。3.5还是很好胡诌,也就…

[Algorithm][动态规划][子序列问题][最长定差子序列][最长的斐波那契子序列的长度]详细讲解

目录 1.最长定差子序列1.题目链接2.算法原理详解3.代码实现 2.最长的斐波那契子序列的长度1.题目链接2.算法原理详解3.代码实现 1.最长定差子序列 1.题目链接 最长定差子序列 2.算法原理详解 思路: 确定状态表示 -> dp[i]的含义 以i位置元素为结尾的所有子序列…

11.2 选择排序

目录 11.2 选择排序 11.2.1 算法特性 11.2 选择排序 选择排序(selection sort)的工作原理非常简单:开启一个循环,每轮从未排序区间选择最小的元素,将其放到已排序区间的末尾。 设数组的长度为 𝑛…

华东师范大学研究团队《Ecology Letters 》揭示植物如何改变其物候以响应全球变化

自工业革命以来,人类活动导致多种环境因子同时发生变化,包括气候变暖、降水模式改变、氮沉降增加和大气CO2升高。这些变化预计会影响植物生命周期事件的季节时序—植物物候(Nature Reviews Earth & Environment | 傅伯杰院士团队发文阐述…

[C][栈帧]详细讲解

目录 1.栈帧1.进程地址空间2.栈帧说明 2.认识相关寄存器3.认识相关汇编命令4.过程理解5.栈帧总结6.补充 1.栈帧 1.进程地址空间 .进程地址空间 2.栈帧说明 调用函数,形成栈帧函数返回,释放栈帧局部变量是存放在栈区上的栈区内存的使用习惯是&#xff…

BPTT算法详解:深入探究循环神经网络(RNN)中的梯度计算【原理理解】

引言 在深度学习领域中,我们经常处理的是独立同分布(i.i.d)的数据,比如图像分类、文本生成等任务,其中每个样本之间相互独立。然而,在现实生活中,许多数据具有时序结构,例如语言模型…

什么是PLAB?

接上文PLAB---》 可以看到和TLAB很像,PLAB即 Promotion Local Allocation Buffers。用在年轻代对象晋升到老年代时。 在多线程并行执行YGC时,可能有很多对象需要晋升到老年代,此时老年代的指针就"热"起来了,于是搞了个…

函数的创建和调用

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 提到函数,大家会想到数学函数吧,函数是数学最重要的一个模块,贯穿整个数学学习过程。在Python中,函数…

深入解析 YOLOv8 中的 `conv.py`(代码图文全解析-下)

😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun 🎈 本文专栏:本文收录于《yolov8》系列专栏&…

【linux软件基础知识】与调度相关的进程描述符

进程描述符 每个进程描述符都包括几个与调度相关的字段,如下代码所示: //include/asm-arm/thread_info.h /** low level task data that entry.S needs immediate access to.* __switch_to() assumes cpu_context follows immediately after cpu_domain.*/ struct thread_in…

6.1Java方法

1、方法定义: 方法是一种语法结构,它可以把一段代码封装成一个功能,以便重复调用 方法的完整格式: 修饰符 返回类型 方法名(形参列表){ 方法体代码(需要执行的功能代码) return 返回值; } package com.define;public class …

面向对象编程 (OOP):深入理解继承、多态和抽象

1. 简介 面向对象编程 (OOP) 是一种强大的编程范式,它通过将程序组织成对象的集合来简化软件设计和开发。与传统的程序设计方法相比,OOP 提供了一种更自然、更易于理解和维护的方式来构建复杂的软件系统。OOP 的核心概念包括:对象、类、继承、…

Java进阶学习笔记31——日期时间

Date: 代表的是日期和时间。 分配Date对象并初始化它以表示自标准基准时间(称为纪元)以来的指定毫秒数,即1970年1月1日00:00:00。 有参构造器。 package cn.ensource.d3_time;import java.util.Date;public class Test1Date {pu…

Java—异常处理

异常的结构图 异常知识点 异常分类: 按照在程序编译阶段是否被检查,异常分为编译时异常(Checked Exception)和运行时异常(Unchecked Exception)。编译时异常是指必须进行显式处理的异常,例如IOE…

【Linux】写一个日志类

文章目录 1. 源代码2. 函数功能概览3. 代码详细解释3.1 头文件和宏定义3.2 Log类定义3.3 打印日志的方法3.4 操作符重载和析构函数3.5 可变参数函数的原理 4. 测试用例 1. 源代码 下面代码定义了一个 Log 类,用于记录日志信息。这个类支持将日志信息输出到屏幕、单…

Java扩展机制:SPI与Spring.factories详解

一、SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制图如下: Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 系统设计的各个抽象,往往有很多不…

戴尔科技:一盆冷水浇醒了AIPC

这年头,只要沾上英伟达的公司,不论美股还是大A,都跟着鸡犬升天几轮过,但昨晚英伟达蒸发1064亿美元, 跟着遭罪的也不少,有没有一夜惊魂梦醒的感觉? 今天我们来说说——戴尔科技。 昨晚戴尔科技大跌5.18%&a…

5G无线标准演进综述及新技术引入

摘 要 随着经济和社会的发展,5G业务越来越丰富多彩,1080P高清视频、裸眼3D、网联汽车、云手机等新业务、新终端对网络的要求也越来越高;另一方面,5G标准持续演进,在MIMO、载波聚合、移动性管理、uRLLC、切片、定位等方…