On this page |
概要 ¶
プロパティは、カメラのパラメータ、ライトの位置とパラメータ、シェーダ名などのようなオプションをレンダラーに追加することができます。
プロパティのほとんどは特定のレンダラーに設定するものですが、カメラの焦点距離のように全てのレンダラーに共通するプロパティのいくつかは、全てのレンダラーで同じであり、プロパティシステムによって自動的に適切なレンダラーオプションに変換されます。基本的にプロパティシステムは、レンダラーが対応するプロパティのリスト、Houdiniで定義されているプロパティのリスト、それらのプロパティ間のマッピングを維持します。
新しいプロパティを認識するMantra、RenderMan、Alfred、他のレンダードライバノードは、レンダリング時にPythonスクリプトを使ってHoudiniから送られるシーンデータとプロパティをIFD(Mantra用)またはRIB(RenderMan用)に変換します。プロパティの継承とスクリプトを組み合わせることでプロパティシステムが非常に柔軟になります。
継承 ¶
プロパティの主な特徴が、 継承 です。いくつかのレベルのプロパティ、特定のレベルのプロパティが一般のレベルのプロパティを上書きします。
継承の順番は以下の通りです:
-
レンダラーデフォルト – プロパティを指定しない場合、レンダラーは、組み込み(設定された)のデフォルト値を使います。
-
出力ドライバ
-
マテリアル
-
オブジェクト
-
プリミティブ – 以下のプリミティブ単位のプロパティを参照してください。
各レベルでは、そのレベルに固有のプロパティを指定することができます。より低いレベルのプロパティは、より高いレベルで定義したプロパティを継承します。つまり、出力ドライバレベルでデフォルトのシェーダを指定することができます。シェーダを出力ドライバで定義するのは意味がなくても、そのドライバでレンダリングするオブジェクトすべてがデフォルトとして、そのシェーダを引き継ぎます。
より低いレベルのプロパティは、より高いレベルのプロパティを上書きします。例えば、オブジェクトにサーフェスシェーダを設定して、次にプリミティブ単位でそのプロパティを上書きすることができます。
実際には、継承は便宜上Houdiniが自動的にLight Maskとデフォルトシェーダのような共通プロパティを作成した各オブジェクトに追加するという事実があるので少し制限されています。つまり、すべてのオブジェクトは任意のLight Maskやチェーンの上位(例えば、カメラや出力ドライバ)に追加したデフォルトシェーダを上書きします。とはいえ、テクニカルディレクタは、新しいオブジェクトに追加されたデフォルトのプロパティのリストを編集することができます。以下の高度な使い方を参照してください。
プロパティの編集、追加、削除 ¶
技術的には、プロパティとはユーザパラメータのことです。Edit Parameter Interfaceウィンドウを使ってプロパティをノードに追加することができます。
プロパティを追加する“レベル”の違いは上記の継承の章を参照してください。
-
編集したいノードを選択します。
-
パラメータエディタで、ギアメニューを開き、 Edit Rendering Parameters を選択します。
プロパティの追加と削除の詳細は、Edit Parameter Interfaceウィンドウを参照してください。
レンダリングプロパティを一度追加してしまえば、パラメータエディタで値を編集することができます。
レンダリング可能なノード(例えば、オブジェクト)にレンダリングプロパティを追加することができます。また、Properties SHOPを使えば、プロパティを保持して、レンダリング可能なオブジェクトからプロパティを参照することができます。
Houdiniは、新しいオブジェクトに何のデフォルトプロパティ を作成するのか決めます。通常は、デフォルトよりも利用可能なプロパティがたくさんあります。プロパティを追加したり、またはインターフェースを整理するためにプロパティを削除することで、継承を許可したり、メモリを節約することができます。
プリミティブ単位のプロパティ ¶
-
Propertiesシェーダは、任意のプロパティを追加することができます。Houdiniはシェーダのプロパティを、シェーダを使用するオブジェクトまたは プリミティブ に適用します。
-
Material Paletteを使って、プリミティブ毎にシェーダを適用します。Materialノードは古いShaderサーフェスノードを置き換えます。
使い方 ¶
プロパティシステムは、便利で強力な使い方がたくさんあります:
-
プリミティブレベルでオブジェクトシェーダを上書きします。
-
プロパティをプリミティブに設定するには、Properties SHOPで必要なプロパティを作成して、影響を与えたいプリミティブに割り当てます。他のプリミティブはオブジェクトのプロパティを継承します。
-
プリミティブ単位のシェーダとLight Mask
-
プリミティブ単位でのディスプレイスメント境界!これは、すごいパフォーマンスの向上が可能です。その理由は、大きく変位するプリミティブ上のディスプレイスメント境界プロパティの値を大きくするだけで済むからです。
-
-
-
プロパティをポイントにバインドすることができます。ジオメトリをポイント上にインスタンス化すると、インスタンス化されたジオメトリがポイントのプロパティを継承します。
-
小惑星フィールドとしてインスタンス化されるScatterポイント。これは、個々のポイントにプロパティを設定してインスタンス化されたジオメトリの見た目を制御することができます。
-
プロシージャルシェーダを使ってジオメトリをポイント上にインスタンス化することができます。これは、ポイント上のプロパティがシェーダのオペレーションを制御することができます。
-
役立つ情報 ¶
-
実用的なプロパティは最上位レベルで定義してください。プロパティを下位のレベルで設定するほど、何か変更したい時に編集しなければならない箇所が増えます。
高度な使い方 ¶
-
opparm HScriptコマンドのフラグを使ってプロパティをバイパス(要は、Houdiniがそのノード上にプロパティがないとみなす)にすることができます。
-
IFD/RIBを生成する役割を持つPythonスクリプトは、
$HFS/Houdini/soho
にあります。 -
$HFS/Houdini/soho/parameters
にあるダイアログスクリプトは、利用可能なプロパティすべてのリスト、さらには何のプロパティを新しいオブジェクトに追加するのか制御します。各ファイルは、
parameters/scriptname.user.ds
ファイルをinclude
しています。Houdiniパスにそのようなファイルがあれば、インポートされます。そのファイルは、親のスクリプトの操作を制御するパラメータ定義とdefine
シンボルを上書きすることができます。