2015-03-24

Houdini Startup Scripts

Houdini起動時に実行される pythonrc.py, 123.{cmd|py}, 456.{cmd|py} に関して紹介。




Houdini にはおおざっぱに言って以下の3種類の起動ファイルがある。

ファイル名 種類 役割
pythonrc.py Python Houdini起動時に実行される
123.{cmd|py} Hscript/Python Houdini FX でファイル名を指定せずに起動した時に実行される。Houdini Core の場合、houdinicore.py というファイル名にする。
456.{cmd|py} Hscript/Python File->New および File->Open 実行後に実行される
これら三種類のファイルが存在する場合、上からこの順に実行される。

以下 Houdini FX 19.5 を使った場合の詳細。

pythonrc.py

  • Houdini 起動時に実行される。
  • デフォルトでは存在しない。
  • ~/houdini19.5/scripts/python (要作成)以下に置く。
  • ~/houdini19.5/scripts/ においた場合実行されない。
  • 上記以外の *.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
  1. 上記の 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
    と表示される。
  2. 123.py をパスから外し、上記の 123.cmd ~/houdini19.5/scripts/ に配置し Houdini を起動すると、起動したシェルまたは Houdini Console に、
    python/pythonrc.py loaded
    456.py loaded
    
    と表示され、シーンには赤く色づけされた /obj/geo1 が出来ている。 File->Newを行えば、
    456.py loaded
    と表示される。
  3. 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 の実行

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(), " -> ")`\'')

おまけ

  • "~" はホームディレクトリの意味。ここでの 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 ファイルのテキスト保存および差分表示
  • *.py 配置位置
  • スタートアップスクリプト (Houdini ドキュメント)
  • HScript言語のガイド (Houdini ドキュメント)

最終更新: 2023-06-22

0 件のコメント:

コメントを投稿