Houdini 18.5 レンダリング

ファイル名のエクスプレッション

ファイルパスフィールドに変数とエクスプレッションを使用して、番号が振られた固有のファイル名を生成する方法。

On this page

概要

ファイル名のパラメータにエクスプレッションを挿入しておけば、ファイルの入出力時にHoudiniがそのエクスプレッションを評価します。よく使われるエクスプレッションは、$Fで、レンダリング出力ファイルに設定しておけば、ファイル名にフレーム番号が付けられるので、お互いにファイルを上書きすることはありません。

例えば、mine$F.picは、ファイル名がmine1.picmine2.picmine3.picなどのように評価されます。

前後の文字から変数名を"保護"する必要があれば、${F}のような形式を使うことができます。例えば、フレーム番号の後にFという文字が必要なとき、frame$FF.picと記述してはいけません。なぜなら、$FFは変数名だからです。このケースでは、frame${F}F.picと記述すれば、frame1F.picframe2F.picなどのように評価されます。

役に立つ変数

$F

現在のフレーム番号。

$FF

現在の浮動小数点フレーム番号。この値は、Houdiniがモーションブラーのサブフレームモーションを計算している時に再生します。 もっと良い結果を得るには、代わりに$T(浮動小数点時間)を使用してください。

$N

入出力ファイルカウンターの数。この値はフレーム番号とはまったく関係なくて、複数のファイルを処理するときに、Houdiniがこれまでに読み込んだ/書き込んだ/レンダリングしたフレームの数です。

例えば、フレーム番号10から15までをレンダリングすると、$Nは、1、2、3、4、5のように変わっていきます。

$T

現在の時間。

$SF

現在のシミュレーションタイムステップの数。ダイナミクスシミュレーションでファイルを保存するときは$Fの代わりに$SFを使います。シミュレーションはサブステップ単位で計算をしているので、$Fを使うとサブフレームの数だけ同じファイルを上書きしてしまいます。$SF$ST(シミュレーション時間)を$TIMESTEP(シミュレーション時間ステップサイズ)で割った値です。

$ST

現在のシミュレーション時間。

$OS

現在のノード名。

$HIPNAME

現在のシーンファイルのベース名。

fields をレンダリングする時、フレーム5.0と5.5の整数のフレーム番号($F)は5になります。そのため、固有のファイル名を使うなら、$Nまたは$FFを使います。$FFを使うデメリットには、 $FFが31.99999のように2進数の小数点変換で算術誤差が発生する可能性があることです。$Nを使うデメリットは、それがフレーム番号と関係なくて、レンダリングするフレーム数を数えるだけなので、フレーム1から10までレンダリングしてから、続けてフレーム11から20までレンダリングするバッチがあるとすると、 2回目のバッチが最初のバッチを上書きしてしまうことです。

頭のゼロ

フレーム番号の前に頭のゼロを生成するには、$Fの後に0以外の桁数を記述します。これにより桁数の多いフレーム番号が生成されます。例えば、mine$F3.picでは、ファイル名がmine001.picmine002.picmine003.pic、…などになります。

padzeroエクスプレッション関数を使用することもできます。以下を参照してください。

VEXにはpadzero関数はないので、フレーム番号を含んだ文字列を書式化したいのであれば代わりにsprintfを使用することになります。

安定した小数点フレームのファイル名

小数点フレーム番号でファイルを書き出す時に、そのファイル名を生成する最適な方法は以下のとおりです:

例:

$HIP/geo/$HIPNAME.$OS.`pythonexprs("'%.2f'%"+($T*$FPS+1))`.bgeo.sc

このエクスプレッションの%.2fの部分は、フレーム番号を小数点以下2桁で書式化します。

高度なエクスプレッション

単純な変数の置き換えよりも高度なことをするためには、バッククォート(\`)でエクスプレッション全体を囲みます。

例えば、ファイル名をフレーム番号に合わせて増やしていきたいけれど、ある数だけ番号をオフセットしたいときがあります。その場合、バッククォートの内側でファイル名に組み込みエクスプレッションを使うことができます。

MyImage`$F+12`.pic.

これはファイルに現行フレーム番号に12を足して番号をつけています。これによって、ファイル名がMyImage13.picMyImage14.picMyImage15.pic、…となります。

バッククォート内側でpadzeroのようなエクスプレッション関数を使うことができます。

frame`padzero(5, $F)`.pic

これは、ファイル名が、frame00001.picframe00002.picframe00003.picなどになります。

役立つ情報

  • 画像を解像度別のディレクトリに保存するには、Pics${W}x${H}/$F.picのようなパスを使います。

  • ファイル名に現在のオペレータの名前を含める(例えば、ファイル名にライトの名前を含めたい場合)には、$OSを使います。例えば、$OS_$F.picでは、ファイル名がlight1_1.piclight1_2.piclight1_3.pic、…などになります。

  • 名前とフレーム番号を区別するのにハイフン(例えば、frame-$F.pic)を使わないでください。MPlayではそのようなファイル名(frame-1.picframe-2.picframe-3.picなど)は マイナスのフレーム番号 (-1、-2、-3、…)を含んでいるものとみなします。

  • ファイル名にスペースを使うことを避けてください。たいていのOSではスペースはサポートされていますが、多くのソフトウェア・パッケージ(Houdini含む)では、ファイル名にスペースをサポートしていない時があるのでトラブルがたくさん発生する可能性があります。スペースの代わりにキャメルケース(複数単語をスペースなしで綴り、単語の頭文字を大文字、他は小文字)を使うか、アンダースコア(_)を使ってください。

レンダリング

Mantraユーザガイド

基本

ライティング

次のステップ

導師レベル

他のレンダラー