概要
プライベートで使ってるけど、訳あって他のところでも使いたかったのでどこからでもアクセスできるようにメモとして残していきます。先人たちのおススメもネットの海にたくさんあるので、参考にしていきたいと思います。
今後、追加更新していく予定です。
環境
Houdini 20.5.550 Py3.11
1.Out_Null
Out_Null
import hou
# 選択ノードを取得
sel = hou.selectedNodes()
if not sel:
hou.ui.displayMessage("ノードを選択してください")
else:
node = sel[0]
parent = node.parent()
# Nullノードを作成
null_node = parent.createNode("null")
# 名前を "OUT_元ノード名" に
new_name = "OUT_" + node.name()
null_node.setName(new_name, unique_name=True)
# 色を黒に設定
null_node.setColor(hou.Color((0, 0, 0)))
# 接続(node → null)
null_node.setInput(0, node)
# 少し右下に配置
null_node.setPosition(node.position() + hou.Vector2(1, -1))
# 表示/レンダーフラグをONにする
null_node.setDisplayFlag(True)
null_node.setRenderFlag(True)
# ノードの形を丸型に設定("circle")
null_node.setUserData("nodeshape", "circle")
選択したノードの名前を参照した、「OUT_XXX」Nullノードを生成します
2.FileCache to Null
FileCache to Null
import hou
sel = hou.selectedNodes()
if not sel:
hou.ui.displayMessage("ノードを選択してください")
else:
node = sel[0]
parent = node.parent()
# 元ノード名を大文字に変換
base_name = node.name().upper()
# --- FileCacheノードを作成 ---
cache_node = parent.createNode("filecache")
# 名前 "_XXX_CACHE"
cache_name = f"_{base_name}_CACHE"
cache_node.setName(cache_name, unique_name=True)
# 薄紫色
cache_node.setColor(hou.Color((0.7, 0.5, 0.9)))
# 接続(node → cache)
cache_node.setInput(0, node)
# 配置を少し右下に
cache_node.setPosition(node.position() + hou.Vector2(1, -1))
# キャッシュパスを設定($JOBベース)
cache_path = f"$JOB/cache/{base_name}/$F.bgeo.sc"
cache_node.parm("file").set(cache_path)
# デフォルトで「Load from Disk」ON
cache_node.parm("loadfromdisk").set(True)
# --- OUT用Nullを作成 ---
null_node = parent.createNode("null")
# 名前 "OUT_XXX"
null_name = f"OUT_{base_name}"
null_node.setName(null_name, unique_name=True)
# 黒色
null_node.setColor(hou.Color((0, 0, 0)))
# 丸型アイコン
null_node.setUserData("nodeshape", "circle")
# 接続(cache → null)
null_node.setInput(0, cache_node)
# 配置をさらに右下に
null_node.setPosition(cache_node.position() + hou.Vector2(1, -1))
# 表示/レンダーフラグをON
null_node.setDisplayFlag(True)
null_node.setRenderFlag(True)
選択したノードの名前を参照した、FileChcheとNullノードを生成します。
3.Start Work
Start to work
import hou
parent = hou.node("/obj")
# --- Geometryノード作成 ---
geo_node = parent.createNode("geo")
geo_node.setName("WORK", unique_name=True)
geo_node.setDisplayFlag(True)
# Geometryノード内に潜る
parent = geo_node
# --- CTRL用Null作成 ---
ctrl_node = parent.createNode("null")
ctrl_node.setName("CTRL", unique_name=True)
ctrl_node.setColor(hou.Color((1, 0, 0))) # 赤
ctrl_node.setUserData("nodeshape", "cloud") # 雲っぽい形状
ctrl_node.setDisplayFlag(False)
ctrl_node.setRenderFlag(False)
# --- パラメータ作成 ---
parm_group = ctrl_node.parmTemplateGroup()
# Floatパラメータ用フォルダ
float_folder = hou.FolderParmTemplate("float_folder", "Float Params")
for i in range(1, 6):
parm = hou.FloatParmTemplate(f"float{i}", f"Float {i}", 1, default_value=(0.0,))
float_folder.addParmTemplate(parm)
parm_group.append(float_folder)
# Integerパラメータ用フォルダ
int_folder = hou.FolderParmTemplate("int_folder", "Integer Params")
for i in range(1, 6):
parm = hou.IntParmTemplate(f"int{i}", f"Int {i}", 1, default_value=(0,))
int_folder.addParmTemplate(parm)
parm_group.append(int_folder)
# Vectorパラメータ用フォルダ
vector_folder = hou.FolderParmTemplate("vector_folder", "Vector Params")
for i in range(1, 6):
parm = hou.FloatParmTemplate(f"vec{i}", f"Vector {i}", 3, default_value=(0.0, 0.0, 0.0))
vector_folder.addParmTemplate(parm)
parm_group.append(vector_folder)
# --- パラメータグループを反映 ---
ctrl_node.setParmTemplateGroup(parm_group)
「Work」という名前のGeometeryを生成して、「CTRL」Nullノードも生成します。
---随時更新予定---