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.pswp.cn/bicheng/20741.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20741.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20741.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring中Bean的生命周期詳解

目錄 Bean的定義和作用Bean的生命周期概述Bean實例化階段依賴注入階段初始化階段Bean的使用銷毀階段完整的Bean生命周期流程示例代碼總結 Bean的定義和作用 在Spring框架中,Bean是指由Spring IoC容器管理的Java對象。Bean是構建Spring應用程序的基本單元&#xf…

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位置元素為結尾的所有子序列…

Python知識點3---條件判斷語句

提前說一點:如果你是專注于Python開發,那么本系列知識點只是帶你入個門再詳細的開發點就要去看其他資料了,而如果你和作者一樣只是操作其他技術的Python API那就足夠了。 Python的條件判斷語句和其他的語言有些不一樣,它只有if語…

【從加載數據庫驅動包,理解java SPI】

SPI&#xff08;Service Provider Interface&#xff09; 從1.6引入&#xff0c;基于ClassLoader 來加載并發現服務的機制 對于msyql驅動 引入依賴 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><v…

11.2 選擇排序

目錄 11.2 選擇排序 11.2.1 算法特性 11.2 選擇排序 選擇排序&#xff08;selection sort&#xff09;的工作原理非常簡單&#xff1a;開啟一個循環&#xff0c;每輪從未排序區間選擇最小的元素&#xff0c;將其放到已排序區間的末尾。 設數組的長度為 &#x1d45b;…

華東師范大學研究團隊《Ecology Letters 》揭示植物如何改變其物候以響應全球變化

自工業革命以來&#xff0c;人類活動導致多種環境因子同時發生變化&#xff0c;包括氣候變暖、降水模式改變、氮沉降增加和大氣CO2升高。這些變化預計會影響植物生命周期事件的季節時序—植物物候&#xff08;Nature Reviews Earth & Environment | 傅伯杰院士團隊發文闡述…

[C][棧幀]詳細講解

目錄 1.棧幀1.進程地址空間2.棧幀說明 2.認識相關寄存器3.認識相關匯編命令4.過程理解5.棧幀總結6.補充 1.棧幀 1.進程地址空間 .進程地址空間 2.棧幀說明 調用函數&#xff0c;形成棧幀函數返回&#xff0c;釋放棧幀局部變量是存放在棧區上的棧區內存的使用習慣是&#xff…

BPTT算法詳解:深入探究循環神經網絡(RNN)中的梯度計算【原理理解】

引言 在深度學習領域中&#xff0c;我們經常處理的是獨立同分布&#xff08;i.i.d&#xff09;的數據&#xff0c;比如圖像分類、文本生成等任務&#xff0c;其中每個樣本之間相互獨立。然而&#xff0c;在現實生活中&#xff0c;許多數據具有時序結構&#xff0c;例如語言模型…

什么是PLAB?

接上文PLAB---》 可以看到和TLAB很像&#xff0c;PLAB即 Promotion Local Allocation Buffers。用在年輕代對象晉升到老年代時。 在多線程并行執行YGC時&#xff0c;可能有很多對象需要晉升到老年代&#xff0c;此時老年代的指針就"熱"起來了&#xff0c;于是搞了個…

Google Cloudbuild yaml file 中 entrypoint 和 args 的寫法

編寫cloudbuild.yaml 時有幾個關鍵參數 entrypoint 和 args 的基本介紹 id: 顯示在 cloud build logs 里的item 名字 name: docker 鏡像名字 - 下面的命令會在這個鏡像的1個容器instance 內執行 entrypoint: 執行的命令入口 &#xff0c; 只能有1個對象 args&#xff1a; 命名…

函數的創建和調用

自學python如何成為大佬(目錄):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 提到函數&#xff0c;大家會想到數學函數吧&#xff0c;函數是數學最重要的一個模塊&#xff0c;貫穿整個數學學習過程。在Python中&#xff0c;函數…

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

&#x1f60e; 作者介紹&#xff1a;我是程序員行者孫&#xff0c;一個熱愛分享技術的制能工人。計算機本碩&#xff0c;人工制能研究生。公眾號&#xff1a;AI Sun&#xff0c;視頻號&#xff1a;AI-行者Sun &#x1f388; 本文專欄&#xff1a;本文收錄于《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…

vite為什么速度快

原因 vite快的原因是因為 vite在開發環境中是使用的 esbuild&#xff0c;esbuild 是 go 寫的&#xff0c;go 編譯型語言、多線程&#xff0c;nodejs 解釋型語言、單線程&#xff0c;并且 vite 使用了原生 esm 導入的&#xff0c;所以快一點&#xff0c;當然&#xff0c;這也…

6.1Java方法

1、方法定義&#xff1a; 方法是一種語法結構&#xff0c;它可以把一段代碼封裝成一個功能&#xff0c;以便重復調用 方法的完整格式&#xff1a; 修飾符 返回類型 方法名(形參列表){ 方法體代碼(需要執行的功能代碼) return 返回值; } package com.define;public class …

【緩存】框架層常見問題和對策

緩存是為了加快讀寫速度&#xff0c;再了解redis這類框架層的緩存應用之前&#xff0c;我們不妨先思考下操作系統層面的緩存解決方案&#xff0c;這樣有助于我們更深的理解緩存&#xff0c;哪些是系統層面的&#xff0c;哪些是服務層面。 以下是一些常見的緩存問題及其解決方案…

面向對象編程 (OOP):深入理解繼承、多態和抽象

1. 簡介 面向對象編程 (OOP) 是一種強大的編程范式&#xff0c;它通過將程序組織成對象的集合來簡化軟件設計和開發。與傳統的程序設計方法相比&#xff0c;OOP 提供了一種更自然、更易于理解和維護的方式來構建復雜的軟件系統。OOP 的核心概念包括&#xff1a;對象、類、繼承、…