Houdini 19.0 レンダリング

IFDファイルフォーマット

On this page

概要

IFDはHoudiniで生成されるシーン記述フォーマットであり、レンダリング画像やアニメーションシーケンスを生成するためにMantraで使用します。IFDファイルにはシーンの完全な記述とレンダリングの設定が含まれています。

IFDの構造

  1. ヘッダ情報

    通常は、コメントとray_versionコマンド

  2. 保持するオブジェクトの定義

  3. レンダリングの設定

  4. カメラの設定

  5. ローカルオブジェクトの定義(ジオメトリ、空間、ライト、大気、インスタンス)

  6. レンダリングコマンド

  7. オプション: 追加フレーム

ジオメトリを参照よりも前に宣言する限りは、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_defplaneray_planepropertyのコマンドを使って定義します。特別な画像名のnull:はフレームをレンダリングしますが、なにも画像に保存されません。これはマップ(ディープシャドウマップ、フォトンマップ、Irradianceキャッシュ)をレンダリングする時にたまに役に立ちます。

ray_defplane plane_name vex_variable vex_type

このコマンドはHoudini 9.1からray_start planeに置き換わりました。ray_defplaneの引数は今では画像平面の設定に使います:

plane_name

ray_property plane channel plane_name

vex_variable

ray_property plane variable vex_variable

vex_type

ray_property plane vextype vex_type

Hodini9.1以前のバージョンでは、ray_defplaneコマンドは ray_imageで定義した画像用の出力画像平面を定義します。任意の数の平面を設定します。出力フォーマットが複数平面をサポートしていないなら、各平面は個々のファイルに書き出されます(ファイル名にplane_nameを使用)。

任意のグローバルまたはエクスポートしたVEX変数は、vex_variableタイプとして使うことができます。また、特別な2つの変数を使うことができます:

  • Cf+Af (vector4) – CfAfの変数の組み合わで、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_geometryray_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引数はプロパティのタイプを定義し、objectgloballightgeometryplaneのどれかにします。

typefloatboolintvector2vector3vector4matrix3matrix4stringのどれかにします。

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

styleは以下のどれか:

  • min – 最小z値のサンプル値を選択します(カメラに一番近い)。

  • max – 最大z値のサンプル値を選択します(カメラから一番遠い)。

  • median – すべてのサンプルの平均のz値のサンプル値を選択します。

  • edge – ユニットボックスを使ったフィルターはオブジェクト適用範囲のサンプルを平均化するだけです。このフィルターは外部エッジアンチエイリアスを無効にする効果があります。

  • ocover – 最初に、ほとんどのピクセルを覆っているオブジェクトを選択して、そのオブジェクトのみから値を取得します。このフィルターはedgeと似ていますが、オブジェクト境界間の内部エッジアンチエイリアスを無効にします。

  • idcover – 最初に、ほとんどのピクセルを覆っているオブジェクトを選択して、ピクセルの値を得るためにそのオブジェクトから単一サンプルを選択します。このフィルターはocoverと似ていますが、サンプルを平均化しません。オブジェクトやプリミティブの識別子のような整数として解釈される平面にこのフィルターモードを使ってください。選択されるサンプルは、順番通りではありません。

  • omin – 最初に、ほとんどのピクセルを覆っているオブジェクトを選択して、ピクセルの値を得るためにそのオブジェクトから単一サンプルを選択します。最小z値のサンプルを選択します(カメラに一番近い)。

  • omax – 最初に、ほとんどのピクセルを覆っているオブジェクトを選択して、ピクセルの値を得るためにそのオブジェクトから単一サンプルを選択します。最大z値のサンプルを選択します(カメラから一番遠い)。

  • omedian – 最初に、ほとんどのピクセルを覆っているオブジェクトを選択して、ピクセルの値を得るためにそのオブジェクトから単一サンプルを選択します。平均のz値のサンプルを選択します。

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では各オブジェクトに任意でカテゴリメンバーを割り当てることができます。これらは任意のユーザトークンです。カテゴリ選択は、カテゴリ名と論理演算を使ってメンバーを決めることができます。カテゴリパターンは単純なエクスプレッションで定義します:

name

その名前を含むパターンにマッチします。

-name

その名前を含まないパターンにマッチします。

+

任意の数のエントリを持っているパターンにマッチします。

-

何も名前を持たないパターンにマッチします。

*

すべてのパターンにマッチします(+|-相当)。

-*

空っぽのセットにマッチします(+&-相当)。

|(論理和)と&(論理積)を使って複数のエクスプレッションを結合します。論理和より論理積の方が優先順位が高く、左から右にエクスプレッションを処理します。なお、括弧はサポートされていません。

つまり:

a & b & c | d & e | f | g & h

これは以下のように解釈されます:

a & b & c | d & e | f | g & h

例えば、カテゴリパターン- | fooは、カテゴリ名がfooのオブジェクト または カテゴリが設定されていないオブジェクトにマッチします。

マスクとカテゴリの両方を指定する場合、Mantraは2つのセットの論理積を使います(つまり、両方のセットにあるオブジェクトのみ)。

レンダリング

Mantraユーザガイド

基本

ライティング

次のステップ

導師レベル

他のレンダラー