投稿

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

Choose and set current camera from list

import hou import nodesearch import toolutils #set current viewport def setViewport(cam): scene_view = toolutils.sceneViewer() viewport = scene_view.curViewport() viewport.setCamera(cam) # find cameras in scene matcher = nodesearch.NodeType("cam") network = hou.node("/obj/") cams = matcher.nodes(network, recursive=True) camList = [] #make list of camera name for UI for i in cams: camList.append(i.name()) #set UI if not len(camList)==0: cam = hou.ui.selectFromList(camList,message="Choose Camera") idx = cam[0] setViewport(cams[idx]) else: hou.ui.displayMessage("No Camera in Scene",buttons=("OK",))

Qt Designer with Houdini

Qt Designer を使って作成したUIを、Shelfなどから呼び出す。 import sys from hutil.Qt import QtCore, QtUiTools, QtWidgets class MyDialog(QtWidgets.QDialog): def __init__(self, *args, **kwargs): #set parent super(MyDialog,self).__init__(*args, **kwargs) #import ui file ui_file = r'D:\Houdini\sw\saveUI\saveUI002.ui' self.ui = QtUiTools.QUiLoader().load(ui_file, parentWidget=self) self.setParent(hou.ui.mainQtWindow(), QtCore.Qt.Window) #connect dialog button dialog_btn = self.findChild(QtWidgets.QDialogButtonBox, "buttonBox") dialog_btn.accepted.connect(self.ok) dialog_btn.rejected.connect(self.close) #connect push button print_btn = self.findChild(QtWidgets.QPushButton, "pushButton") print_btn.clicked.connect(self.hello) #accpet def ok(self): self.accepted() hou.ui.displayMessage("ok") ...

op シンタックス

Fileタイプの入力を求めてくるインプットにたいして、ネットワーク上のオブジェクトを設定したい場合はopシンタックスを利用する opシンタックスは絶対パス表記でなければいけない op:/obj/geo1/vdbfrompolygon1 相対パスを利用したい場合は、相対パスを絶対パスに変換するファンクションと組み合わせる op:`opfullpath(../vdbfrompolygon1)` ファイルパスなどを設定するString型のインプットでは、基本的に文字型のデータしか受け付けない。しかし`expression`とすることで、エクスプレッションを実行することが出来る。 接続されているノードから直接パスを取りたい場合は以下のようにしてもよい op:`opinputpath(".",1)`

Houdini Path 表記法

Houdiniのパスの表記はUNIXのルールに倣っている。 / から始まるものは絶対パス 例>>> /obj/geo1/dopnet1/smokesolver1 . から始まるものは相対パス 例>>> .  >>>自オブジェクトを指す 活用例>>> opinputpath(".",0) ..は自ノードを内包している一階層上のオブジェクトを指す 例>>> ../smokesolver --この場合だと自ノードのあるネットワークにあがってから、さらに”/”で、そのネットワークの中にある、smokesolverを参照することになっている ../somethingは、自ノードが存在するネットワークと同じネットワークに存在するノードを参照する時に利用するので、利用頻度は最も高いと思う 活用例>>> opinputpath("..",0) >>>自ノードが内包されているオブジェクトに接続されているノードを参照する ../.. >> この場合だと二階層上になる