On this page | |
Context(s) | shading |
int objectstate(string query, <type>&value)
int objectstate(string query, <type>&value[])
成功するとゼロ以外の値を返してvalueを設定し、レンダラーがその照会を評価できなかった場合は0
を返します。
照会可能なIFDプロパティのリストを参照してください。
プロパティ名にはHoudini名(例えば、vm_samples
)ではなくて IFD 名(例えば、image:samples
)を使用してください。
便利なプロパティ ¶
以下がよく使用されるプロパティで、ここでは便宜的にそれらを載せていますが、IFDプロパティの全リストのどのプロパティも照会することができます。
image:name
(string) レンダリングされる画像の名前。
image:pixelaspect
(float) 画像のピクセルアスペクト比(X/Y)。
image:resolution
(vector) 解像度が{x_res, y_res, samples_per_pixel}で設定されます。
image:samples
(vector) サンプル数が{x_samples, y_samples, 0}で設定されます。
image:raysamples
(vector) レイトレースサンプル数が{x_samples, y_samples, 0}で設定されます。
light:name
(string) illuminanceループで現在アクティブなライトオブジェクトの名前。
light:shadowscope
(string) ライトからシャドウを落とすオブジェクトのリスト。
object:name
(string) シェーディングされるオブジェクトの名前。 これは、ライトシェーダとシャドウシェーダで有効で、それらのシェーダが光源によって照明する(またはシャドウを落とす)オブジェクトを照会することができます。
object:reflectscope
(string) シェーディングされるオブジェクトのデフォルトの反射スコープパターン。
object:refractscope
(string) シェーディングされるオブジェクトのデフォルトの屈折スコープパターン。
object:reflectlimit
(float または int) シェーディングされるオブジェクトの最大屈折バウンスの上限。
object:shadingquality
(float) シェーディングされるオブジェクトのシェーディング品質。
object:lightmask
(string) オブジェクトのライトマスクの文字列。
object:area
(float) オブジェクトの表面積。
object:materialname
(string) シェーディングされるオブジェクトに割り当てられているマテリアルのパス。
Note
これは、情報を取得するだけの用途であり、マテリアルの割り当てや見た目に何も影響を与えません。
renderer:name
(string) レンダラーの名前。
renderer:version
文字列として指定した場合は、レンダラーバージョンが“major.minor.build”として設定されます。 ベクトルとして指定した場合は、レンダラーバージョンが{major, minor, build}として設定されます。
renderer:renderengine
(string) micropoly
またはraytrace
などの使用されているレンダーメソッド。
設定可能な値の全リストはプロパティのリストを参照してください。
shader:name
(string) 現在実行されているシェーダの名前。
パックプリミティブ ¶
Mantraは、パックプリミティブをレンダリングする時、レンダリング前にそのジオメトリをアンパックします。 つまり、パックプリミティブ上のPrimitiveアトリビュートは(アンパックされたジオメトリにはそれらのアトリビュートが渡らないので)シェーダで利用できないことを意味します。
Mantraは、アンパックの前に自動的にそれらのPrimitiveアトリビュートをカスタムオブジェクトプロパティに変換します(IFDファイルフォーマットのページのray_declare
を参照してください)。
そのプロパティの名前はpacked:ATTRIBNAME
のようになります(ATTRIBNAME
はアトリビュートの名前です)。
objectstate()
関数を使用することで、まさに他のオブジェクトプロパティと同様にこれらのプロパティにアクセスすることができます。
例:
vector Cd; if (!objectstate("packed:Cd", Cd)) Cd = 1; // パックジオメトリ上にCdアトリビュートが存在しなかった場合の処理
Examples ¶
surface showversion() { string rname, rversion; if (!objectstate("renderer:name", rname)) rname = "Unknown renderer"; if (!objectstate("renderer:version", rversion)) rversion = "Unknown version"; printf("Image rendered by %s (%s)\n", rname, rversion); } vector mapToScreen(vector NDC_P) { // NDC空間のポイントが指定されたら、そのポイントに呼応するピクセルを見つけます。 vector result; if (!objectstate("image:resolution", result)) result = {640, 486, 0}; return result * NDC_P; }
properties | |
shading |
|