投稿

action buttonを使ってジオメトリをattributeベースで選択するコード

イメージ
以下のコードをparameter descriptionを使ってaction buttonに貼り付ける。 import soputils #get current viewport p = hou.ui.paneTabOfType(hou.paneTabType.SceneViewer) #set group mask #set an attribute you need to use as a group p.setGroupListMask("@_test *") #enable group selection mode p.setGroupPicking(True) #show the list of the groups p.setGroupListVisible(True) #execute mesh selection kwargs['geometrytype'] = (hou.geometryType.Primitives,) kwargs['inputindex'] = 0 soputils.selectGroupParm(kwargs) #turinig off the group list p.setGroupListVisible(False) こんな感じで同じ値のアトリビュートを持ったジオメトリをグループとして選択できる。
選択したsopノードから、object merge nodeを作成するスクリプト import hou #get current selection sel = hou.selectedNodes() #create object merge nodes from selected nodes def create_om(): #check if node is selected if not len(sel)>0: msg = hou.ui.displayMessage("please chose a node", buttons=('OK',), severity=hou.severityType.Warning) return col = hou.Color(0.75,0.15,0.5) for i in sel: cat = hou.nodeType(i.path()).category().name() if(cat=="Sop"): pos = i.position() + hou.Vector2(0,-1) parent_path = i.parent().path() om = hou.node(parent_path).createNode("object_merge") om.setPosition(pos) om.setName("IN_"+i.name(),unique_name=True) om.setColor(col) hou.node(om.path()).parm("objpath1").set("../"+i.name()) else: pass #create single object merge node from selected nodes def create_om_combine(): #check if node is selected if not len(sel)>0: msg = hou.ui.displayMessage("please chos...

Toggle update mode

update modeを切り替えるスクリプト import hou #modes manual = hou.updateMode.Manual mouseup = hou.updateMode.OnMouseUp auto = hou.updateMode.AutoUpdate modes = [manual,mouseup,auto] #get current mode current_mode = hou.updateModeSetting() #find next mode for i,mode in enumerate(modes): if mode.name() == current_mode.name(): #print(i,mode) idx = (i+1)%3 #set the next mode hou.setUpdateMode(modes[idx]) break

Houdini起動時にcustomのscript/HDA用pathを設定するには?

Houdini起動時にcustomのscript/HDA用pathを設定するには、以下のスクリプトを123.pyとして、$HOME/houdiniX.Y/scriptsに保存する。 Houdiniは起動時にこの $HOME/houdiniX.Y/scripts を毎回チェックし、123.pyがあれば自動的に実行する。 まずスクリプト環境変数について: sys.path.append()で、まずスクリプト用のOS環境変数を設定している。これを実行するこどで、Houdiniでのpython scriptから、importでこの中にあるスクリプトを読み込むことができる。 次にHDA用のhoudini環境変数について: hou.putenv('HOUDINI_OTLSCAN_PATH',hda_path)の部分で、既存のHDAパスにさらにカスタムのHDAパスを加えている。これにより、特定のフォルダに保存したHDAを自動的に読み込ませることができる。 import sys import hou def set_custom_script_path(): #add custom script path #you can put any path in the array as much as you want. import_list = [ r'C:/hoge/hoge/scripts', ] #add the path ti the system environment path for i in import_list: sys.path.append(i) print('extra path is {}'.format(i)) def add_custom_HDA(): #add custom HDA path #$HH/otls/ is the path Houdini uses to load the default HDA #We need to keep that as it is, in addtion, we can add custom path. hda_paths =...

PDG variables

PDG上で予め指定されている変数について https://www.sidefx.com/docs/houdini/tops/attributes.html 以下の変数は、@pdg_index, @pdg_name のように、接頭詞として@pdg_を加えてexpressionに利用できる。 index 各ワークアイテムに与えられるID name 各ワークアイテムの名前 frame ワークアイテムが処理を行ったフレーム input ワークアイテムに接続されているジオメトリーや画像ファイルのリスト output ワークアイテムが出力しているジオメトリーや画像ファイルのリスト fileノードのpathに`@pdg_output`と与えれば、選択中のワークアイテム内のジオメトリをfileノードを通して確認することができる。

PDG FFmpeg and ImageMagick

wedgeの結果をレンダリングし、コンタクトシートを作成するには? 1.Image MagickとFFmpeg のインストールを下記サイトから行う。 https://imagemagick.org/script/download.php Houdini Evnファイルで環境変数を設定する。 windowsなら以下の場所にhoudini.envが配置されている。 C:\Users\Name\Documents\houdini18.0 ※"Name"の部分はユーザー名 envファイルを開いたら、以下のコマンドを追加する。 PDG_IMAGEMAGICK = "C:\Program Files\ImageMagick-7.0.9-Q16\magick.exe" PDG_FFMPEG = "C:\Program Files\ImageMagick-7.0.9-Q16\ffmpeg.exe" これで使用可能なはず。(ちなみに自分の環境では、image magickは環境変数の設定をしなくても作動した。) ※FFmpegの起動エラー ちなみにFFmpegEncodevideoノードを使用した際、以下のようなエラーが発生した。 "ValueError: path is on drive D:, start on drive C: " 私はhoudiniをCドライブ、作業用HipファイルをDドライブに保存している。 このため、作業中のhipファイルとHoudiniが自動的に生成するtempファイルの保存ドライブが異なってしまい、このことによっておこるエラーのようである。 このような環境では、FrameListFileとOutputFilenameのパスが、異なるドライブに指定されてしまうようである。 初期設定では、各パスには以下のようなHoudini変数が利用されていると思う。 $PDG_TEMP/path -- FrameListFile $PDG_DIR/path -- OutputFlikename これを解消するには、Local SchedulerのTempDirectory>Locationをworking Directoryと...

Use external Python script from shelf tool

#set script path import sys path = r'D:\Houdini\sw\saveUI' sys.path.append(path) #import loadUI import saveUI_001 as saveUI reload(saveUI) saveUI.run()