On this page |
概要 ¶
IFDはHoudiniで生成されるシーン記述フォーマットであり、レンダリング画像やアニメーションシーケンスを生成するためにMantraで使用します。IFDファイルにはシーンの完全な記述とレンダリングの設定が含まれています。
IFDの構造 ¶
-
ヘッダ情報
通常は、コメントとray_versionコマンド
-
保持するオブジェクトの定義
-
レンダリングの設定
-
カメラの設定
-
ローカルオブジェクトの定義(ジオメトリ、空間、ライト、大気、インスタンス)
-
レンダリングコマンド
-
オプション: 追加フレーム
ジオメトリを参照よりも前に宣言する限りは、IFDのどこにでも宣言することができます。
MantraはHScript言語のサブセットを使ってIFDを処理します。そのため、変数展開のような構成、if
ステートメント、ループ構成、エクスプレッション評価がIDFで利用可能です。
コマンド ¶
ray_loadotl path
パスに指定したOTLを読み込みます。これにより、OTL内のアセットを適切にMantraで参照することができます。
ray_start object_type
オブジェクトの定義を開始します。object_typeは次のどれかを指定します:
material
shop_materialpath
アトリビュートを使って、バインド可能なプロパティを保存します。
geo
レンダリングに使うジオメトリを定義します。
light
光源を定義します。
fog
霧/大気オブジェクトを定義します。
object/instance
ジオメトリオブジェクトのインスタンスを定義します。
plane
画像内に平面を定義します。
Houdini9.1の新機能です。以前のバージョンではray_defplane
コマンドを使用していました。
各オブジェクトには、レンダリングの動作に関係するプロパティがあります。
ray_detail
Mantraでジオメトリを指定する方法が2通りあります。
ray_detail [-T] name filename
geometry:name
プロパティに、指定した名前を設定して、指定したファイル名からジオメトリを読み込みます。ファイル名には、インラインでジオメトリを指定できるstdin
がよく使われます。
filename
に一時ファイルを指定するには-T
オプションを使用します。
Mantraはジオメトリを読み込んだ後に、その一時ファイルを削除します。stdin
から読み込む時は、このオプションを使用することができず、ネットワークレンダリングで適切に動作させることができません。
ray_detail [-v postblur| -V preblur postblur] name sourcename
ファイルからジオメトリを読み込むのではなく、既存のジオメトリを使って(ソース名で指定)、v
(Velocity)アトリビュートに基づいて位置をオフセットします。
Mantraは、geometry:name
プロパティをnameに設定します。
ray_end
オブジェクトの終わりの宣言。
ray_property style token value...
グローバルまたはオブジェクトプロパティを設定します。各オブジェクトには、このコマンドを使って設定できる別々のプロパティがあります。
ray_image image [optional settings]
単一フレームのレンダリングで出力する画像を定義します。画像平面は、ray_defplane
とray_planeproperty
のコマンドを使って定義します。特別な画像名のnull:
はフレームをレンダリングしますが、なにも画像に保存されません。これはマップ(ディープシャドウマップ、フォトンマップ、Irradianceキャッシュ)をレンダリングする時にたまに役に立ちます。
ray_defplane plane_name vex_variable vex_type
このコマンドはHoudini 9.1からray_start plane
に置き換わりました。ray_defplane
の引数は今では画像平面の設定に使います:
|
|
|
|
|
|
Hodini9.1以前のバージョンでは、ray_defplane
コマンドは ray_image
で定義した画像用の出力画像平面を定義します。任意の数の平面を設定します。出力フォーマットが複数平面をサポートしていないなら、各平面は個々のファイルに書き出されます(ファイル名にplane_name
を使用)。
任意のグローバルまたはエクスポートしたVEX変数は、vex_variableタイプとして使うことができます。また、特別な2つの変数を使うことができます:
-
Cf+Af
(vector4) –Cf
とAf
の変数の組み合わで、RGBA画像を出力します。 -
Z-Far
(float) –Pz
変数は単一チャンネルの画像を出力します。
ray_planeproperty token value
Note
このコマンドはHoudini 9.1からray_property plane
に置き換わりました。例:
ray_property plane pfilter "sinc 3 3" ray_property plane gamma 1.7
Houdini9.1以前のバージョンでは、ray_defplane
で定義される画像平面の値を設定します。知られている平面のプロパティは以下を参照してください。
ray_transform matrix4
変換行列を指定します。
このステートメントの後に、任意の数のray_mtransform
が続きます。各ray_mtransform
ステートメントでは追加モーションセグメントのトランスフォームを指定します。
ray_geometry geometry_object
インスタンスオブジェクトのジオメトリを指定します。これはインスタンスでレンダリングするジオメトリのことです。geometry_objectパラメータはIFDで既に定義されているはずのジオメトリオブジェクトを参照します。
ray_geometry
やray_procedural
のどれか1つのみをインスタンスの定義で指定するべきです。
ray_procedural (-m xmin ymin zmin -M xmax ymax zmax) procedural (arguments)
ジオメトリの生成に使うプロシージャル関数を定義します。-m/-Mオプションはプロシージャルジオメトリの境界ボックスを定義するのに使い、レンダリングを最適化するために使う場合もあります(境界ボックスをレンダリングしないならば、Mantraはまったくプロシージャルジオメトリを生成する必要はありません)。プロシージャルはHDKを使ってユーザが記述することができます。
ray_declare (-v array_size) style type name value...
ユーザ定義プロパティを宣言します。
style
引数はプロパティのタイプを定義し、object
、global
、light
、geometry
、plane
のどれかにします。
type
はfloat
、bool
、int
、vector2
、vector3
、vector4
、matrix3
、matrix4
、string
のどれかにします。
name
はプロパティの名前です。この名前を使って値を照会することができます。
例:
ray_declare object int my_property 42
my_property
はrenderstate()VEX関数またはPythonフィルタリングで照会することができます。
ray_time value
このフレームの時間を秒で指定します。これはimage:samplelock
がfalseの時、乱数のシードに使います。
ray_raytrace
レンダリングを実行します。
ray_reset [-l] [-o] [-f]
オブジェクト定義をクリアします。現在では、:
-
-l
– ライト -
-o
– インスタンスオブジェクト -
-f
– フォグオブジェクト
のみがクリアされます。フレームをレンダリングした後は、ray_reset
は通常は全オプショをコールするべきです。
ray_deviceoption type name value
平面設定で出力デバイスのオプションを設定します。
ray_deviceoption int JPEG.quality 75
このコマンドは、事前定義済のimage output propertiesを使った時の出力結果です。またIFDの中にこのコマンドを使えば、カスタムデバイス上のオプションのように任意のオプションを設定することができます:
ray_deviceoption float MYFORMAT.Option value
コマンドラインからiconvert
ユーティリティを実行すると、TIFFとJPEGのような組み込みフォーマットデバイスで利用可能なオプションのリストを見ることができます。
画像平面コマンド ¶
Note
Houdini 9.1では、これらのコマンドはもはや画像平面設定を定義するのに好ましいメソッドではありません。好ましいメソッドは、今ではray_property plane
コマンドを使ってプロパティを設定することです。プロパティのドキュメントの画像平面のプロパティを参照してください。
これらのコマンドは上位互換のためにサポートしています。
gamma value
画像のガンマ補正を指定します(デフォルトが1)。
gain value
量子化する前に各カラーの値がゲインによって乗算されます。
dither fraction_of_quantization
適用されるディザ量。ディザは量子化ステップの割合として指定します(例えば、0.5は量子化ステップの半分になります)。オプションは、浮動小数点出力では無視されます。
whitepoint value
量子化中に使われる画像のホワイトポイント。
quantize value
出力する保存タイプ。値は以下のどれかです:
byte
8ビット符号なし整数。
short
16ビット符号なし整数。
int
32ビット符号なし整数。
half
16ビット浮動小数点。
float
32ビット浮動小数点。
Half
16ビット浮動小数点(非正規化)。
Float
32ビット浮動小数点(非正規化)。
浮動小数点を非正規化すると、0.4999999や0.5000001のような浮動小数点の最小値を丸めることができます。
sfilter type [arguments]
サブピクセルサンプルを合成するのに使うサンプリングフィルターを指定します。これは、どのような方法で個々のサーフェスサンプルを合成して単一のサブピクセルサンプルを生成するのか決めます。利用可能なタイプは以下の通り:
-
alpha
– Ofを使って合成の不透明度を決めます。 -
closest
– 近接サーフェスから値を取得します。 -
min
– 任意のサンプルから最小値を取得します。 -
max
– 任意のサンプルから最大値を取得します。
pfilter type [arguments]
サブピクセルサンプルを合成して単一ピクセルの値を生成するのに使うピクセルフィルターを指定します。利用可能なピクセルフィルターがいくつかあります。
minmax style
point
ピクセルの中心に一番近いサブピクセルを選択してください。
box [width height]
ボックスフィルターを使って指定した幅/高さのフィルターサイズでサブピクセルを結合します。
gauss [width height]
Gaussianフィルターを使って指定した幅/高さのフィルターサイズでサブピクセルを結合します。
bartlett [width height]
Bartlett(円錐)フィルターを使って指定した幅/高さのサイズ幅でサブピクセルを結合します。
blackman [width height]
Blackmanフィルターを使って指定した幅/高さのフィルターサイズでサブピクセルを結合します。
catrom [width height]
Catmull-Romフィルターを使って指定した幅/高さのサイズ幅でサブピクセルを結合します。
hanning [width height]
Hanningフィルターを使って指定した幅/高さのフィルターサイズでサブピクセルを結合します。
mitchell [width height]
Mitchellフィルターを使って指定した幅/高さのフィルターサイズでサブピクセルを結合します。
lightexport light_name
この出力変数の値は、指定したライトのilluminance Loopの評価中に生成されるはずです。これは、個々のライトで作成した特定の範囲のキャプチャーが可能です(これがサポートできるようにシェーダをセットアップしている場合)。
IFDのプロパティを指定する ¶
プロパティはIFDのどこかに設定します。オブジェクトプロパティをオブジェクトブロックの外側に設定すると、オブジェクトプロパティはその変更の後で宣言したオブジェクトすべてのデフォルト値を変更します。例:
ray_property object shadingrate 2 ray_start object # shadingrateが"2"になります。 ray_end ray_start object # shadingrateを1に変更します。 ray_property object shadingrate 1 ray_end
IFDプロパティへのマッピングは、Houdiniレンダリングプロパティのリストを参照してください。
カテゴリ vs. マスク ¶
カテゴリとマスクは、オブジェクトやライトをまとめて指定することができます。
マスク はオブジェクト名を使ってメンバーを決めますが、さらにHoudiniでは、オブジェクトを一括で指定できる構文が使えます。例えば、/obj/geo*,^/obj/geo1
です。
Mantraでは各オブジェクトに任意でカテゴリメンバーを割り当てることができます。これらは任意のユーザトークンです。カテゴリ選択は、カテゴリ名と論理演算を使ってメンバーを決めることができます。カテゴリパターンは単純なエクスプレッションで定義します:
|
その名前を含むパターンにマッチします。 |
|
その名前を含まないパターンにマッチします。 |
|
任意の数のエントリを持っているパターンにマッチします。 |
|
何も名前を持たないパターンにマッチします。 |
|
すべてのパターンにマッチします( |
|
空っぽのセットにマッチします( |
|(論理和)と&(論理積)を使って複数のエクスプレッションを結合します。論理和より論理積の方が優先順位が高く、左から右にエクスプレッションを処理します。なお、括弧はサポートされていません。
つまり:
a & b & c | d & e | f | g & h
これは以下のように解釈されます:
a & b & c |
d & e |
f |
g & h
例えば、カテゴリパターン- | foo
は、カテゴリ名がfoo
のオブジェクト または カテゴリが設定されていないオブジェクトにマッチします。
マスクとカテゴリの両方を指定する場合、Mantraは2つのセットの論理積を使います(つまり、両方のセットにあるオブジェクトのみ)。