Houdini にはおおざっぱに言って以下の4種類の起動ファイルがある。
ファイル名 | 種類 | 役割 |
pythonrc.py | Python | Houdini起動時、HDA ロード前に実行される |
ready.py | Python | Houdini起動時、HDA ロード後に実行される |
123.{cmd|py} | Hscript/Python | Houdini FX でファイル名を指定せずに起動した時に実行される。Houdini Core の場合、houdinicore.py というファイル名にする。 |
456.{cmd|py} | Hscript/Python | File->New および File->Open 実行後に実行される |
以下 Houdini FX 20.0 を使った場合の詳細。
pythonrc.py
- Houdini 起動時、 HDA ロード前に実行される。
- デフォルトでは存在しない。
- H18.0 まで
- ~/houdini18.0/scripts/python (要作成)以下に置く。
- ~/houdini18.0/scripts/ においた場合実行されない。
- H18.5 以降
- ~/houdini20.0/pythonX.ylibs (要作成)以下に置く。
- ~/houdini20.0/scripts/ においた場合実行されない。
- H20.0 Python 3.10 ビルドを使っている場合は、~/houdini20.0/python3.10libs/pythonrc.py とする。
- 上記以外の *.py ファイルの配置位置はこちらを参照。
NEW: ready.py
- H20.0 から追加された。Houdini 起動時、 HDA ロード後に実行される。
- デフォルトでは存在しない。
- ~/houdini20.0/pythonX.ylibs (要作成)以下に置く。
- H20.0 Python 3.10 ビルドを使っている場合は、~/houdini20.0/python3.10libs/ready.py とする。
- サンプルはこちら。
123.{cmd|py}
- ファイル名を指定せずに Houdini FX を起動した時に実行される。
- Houdini Core の場合、houdinicore.py というファイル名にする。
- デフォルトでは $HH/scripts/123.cmd として存在する。
- ~/houdini19.5/scripts/ (要作成) 以下に 123.{cmd|py}として配置すると、こちらが実行され、 $HH/scripts/123.cmd は実行されない。
- 123.cmd と123.py が共に ~/houdini19.5/scripts/ に存在する場合、123.py が実行され、123.cmd は実行されない。
- 123.py を ~/houdini19.5/scripts/python/ に配置した場合、実行されない。
456.{cmd|py}
- File->NewまたはFile->Open実行後に実行される。
- つまり、Houdini起動後にも実行される。
- デフォルトでは存在せず、 ~/houdini19.5/scripts/ (要作成)以下に置く。
- 456.cmd と456.py が共に ~/houdini19.5/scripts/ に存在する場合、456.py が実行され、456.cmd は実行されない。
- 456.py を ~/houdini19.5/scripts/python/ に配置した場合、実行されない。
- 例えば、デフォルトでは保持されない Edit->Auto Save を起動時およびシーンを新しくするたびに常にオンにしたい場合、
import hou hou.appendSessionModuleSource('''hou.hscript("autosave on")''') print("autosave on 456");
などと 456.py に記述する。
例
pythonrc.py
print ("python/pythonrc.py loaded")
123.py
print ("123.py loaded")
123.cmd
opcd /obj opadd geo opcolor -c 1 0 0 /obj/geo1
456.py
print ("456.py loaded")
456.cmd
opcd /obj opadd geo opcolor -c 0 0 1 /obj/geo1
- 上記の pythonrc.py を ~/houdini19.5/scripts/python/ に、123.py, 456.py を ~/houdini19.5/scripts/ に配置し Houdini を起動すると、起動したシェルまたは Houdini Console に、
python/pythonrc.py loaded 123.py loaded 456.py loaded
と表示され、File->Newを繰り返すたびに、456.py loaded
と表示される。 -
123.py をパスから外し、上記の 123.cmd を ~/houdini19.5/scripts/ に配置し Houdini を起動すると、起動したシェルまたは Houdini Console に、
python/pythonrc.py loaded 456.py loaded
と表示され、シーンには赤く色づけされた /obj/geo1 が出来ている。 File->Newを行えば、456.py loaded
と表示される。 -
456.py をパスから外し、上記の 456.cmd を ~/houdini19.5/scripts/ に配置し Houdini を起動すると、起動したシェルまたは Houdini Console に、
python/pythonrc.py loaded
と表示され、シーンには青く色づけされた /obj/geo1 と色の付いていない/obj/geo2 が出来ている。
File->Newを行えば、青く色付けされた /obj/geo1 だけが残る。
123.py で起動時間を計測
~/houdini19.5/scripts/123.py を以下のように記述。
import hdefereval import time start_time=time.time() last_time = start_time print("beginning at", start_time, "-", time.ctime()) def print_since_start(msg): global start_time global last_time now = time.time() print(msg, "-", now - start_time, "-", now - last_time, "-", time.ctime()) last_time = now print_since_start("NOW") hdefereval.executeDeferredAfterWaiting(print_since_start, 1, "STARTUP TIME")とすれば、Houdini 起動したターミナルまたはコンソールに起動時間が表示される。
456.py で $JOB のリセット
他人が作った .hip ファイルの中にその作者の使っている $JOB 設定が埋め込まれていて、そのディレクトリが自分のところに存在しない時は非常に煩わしかったりする。この手のファイルを開いた時に、自分の環境に強制的にリセットするには、456.py にimport os hou.allowEnvironmentToOverwriteVariable("JOB", True) os.environ["JOB"] = "//dell-m4700/share/HoudiniFiles/projects"とする。実際の変更先ディレクトリは自分の環境に合わせて変える必要あり。
複数ある 456.py の実行
456.py が ~/houdini19.5/scripts と $HSITE/houdini19.5/scripts の両方にある場合、Houdini は ~/houdini19.5/scripts 以下の 456.py のみを実行し、$HSITE 以下のは実行しない。両方を実行するには、ホーム以下 (~/houdini19.5/scripts/) の 456.py の最後に以下のようなコマンドを追加。
print("456 in ~/houdini19.5/scripts"); post_load_files = hou.findFiles("scripts/456.py") n = len(post_load_files) for i in range(1, n): post_load_file = post_load_files[i] with open(post_load_file, "r") as f: exec(f.read())とすると、hou.findFiles が自身を含む HOUDINI_PATH にあるすべての 456.py を探すが、range を 0 からではなく 1 から始めているので、自身の再実行は行わない。
Hscript Texport での現在ディレクトリ表示
123.cmd に
prompt '`strcat(oppwf(), " -> ")`'と記述すると、Hscript Textport のプロンプトが現在のディレクトリを表示する。 これを Python で記述するには、
hou.hscript( 'prompt \'`strcat(oppwf(), " -> ")`\'')
古いノードの復活
H19.5 以降 TAB メニューから消えた Copy Stamp ノードを復活させたい場合には、
- Hscript Editor に
opunhide Sop copy
とするか、 - 123.cmd に同じコマンドを仕込むか、
- 123.py または ready.py に
hou.hscript('opunhide Sop copy')
旧 Mountain ノードの復活についてはこちら。
デフォルトシーンの設定
Entagma のこのチュートリアル (Setting Up A Default Scene In Houdini, 2022年10月) で、ロード時のファイル設定に関しての説明がある。ここでは、 hou.hipFile.merge を使って、Houdini 起動時に指定したファイルを読み込む設定をしている。 現時点 (20.0) では、 123.py では問題なく動くが、456.py に指定するとうまくいかない。456.py の問題が解決しているのは 20.5.227 以降で、なおかつ ignore_load_warnings=True を以下のように指定する必要がある。
hou.hipFile.merge("C:/tmp/test_startup.hip", ignore_load_warnings=True)
ただし 456.py に設定すると、File->New しても同じファイルが読み込まるだけで、クリアするすべがなくなるので、必要なノードをネットワークエディタで選択して、シェルフにドラッグ&ドロップで登録しておき、必要に応じてクリックして呼び出す方が便利だと思う。
なお、インストールディレクトリ (C:/Program Files/ 以下) のファイルを変更するのは、個人的な好みかもしれないが、お勧めしない。 自分の環境で設定すれば、ビルドごとの編集が不要。
おまけ
- "~" はホームディレクトリの意味。ここでの Houdini の実行は環境変数 HOME を設定して行っている。
- $HH は、Houdiniのインストールパス以下の houdini ディレクトリ。(例: /Program Files/Side Effects Software/Houdini 19.5.534/houdini) つまり、 $HFS/houdini/ 。
- Python (pythonrc.py, 123.py, 456.py) であれば print により起動したシェルなり Consoleウィンドウに文字列をプリントすることが出来るが、Hscript (123.cmd, 456.cmd) では同じことは出来ない。一番近いのは echo コマンドで、これを使うと Hscript Textport (Window->Hscript Textport)に起動時に表示される。
- Houdini 環境変数設定
- Hip ファイルのテキスト保存および差分表示
- opunhide
- *.py 配置位置
- スタートアップスクリプト (Houdini ドキュメント)
- HScript言語のガイド (Houdini ドキュメント)
- Setting Up A Default Scene In Houdini (Entagma on YouTube)
最終更新: 2024-05-06
0 件のコメント:
コメントを投稿