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")

获取节点相关几何数据

  • 28
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值