On this page | |
Context(s) | shading |
int renderstate(string query, <type>&value)
int renderstate(string query, <type>&value[])
int renderstate(material mat, string query, <type>&value)
レンダラーが名前でプロパティの値を検索します。
成功すれば、ゼロ以外の値が返され、valueを設定します。レンダラーが検索できなかったら0
を返します。
2つの引数のバリエーションは、現行オブジェクトのプロパティを検索します。
1番目の引数にmaterial
を渡すと、この関数は、現行オブジェクトではなく、そのマテリアルのプロパティを検索します。
検索可能なプロパティは、IFDプロパティのリストを参照してください。
検索には、 IFD の名前(例えば、image:samples
)を使い、Houdiniの名前(例えば、vm_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) シェーディングされているオブジェクトの名前。これは、light/shadowシェーダ内で有効で、これを使って光源が照らしている(影を落としている)オブジェクトを検索することができます。
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
(string) レンダラーのバージョンを表現した“major.minor.build”の文字列。
(vector) レンダラーのバージョンを表現した{major, minor,build}のベクトル。
renderer:renderengine
(string) 使用中のレンダーメソッド(例えば、micropoly
、raytrace
)。設定可能な値の完全リストは、プロパティのリストを参照してください。
shader:name
(string) 実行されている現在のシェーダの名前。
パックプリミティブ ¶
Mantraがパックプリミティブをレンダリングする時、レンダリング前にそのジオメトリをアンパックします。 つまり、パックプリミティブ上のPrimitiveアトリビュートは、(それらのアトリビュートはアンパックされたジオメトリに渡らないので)シェーダで利用できません。
アンパックする前に、Mantraは自動的にPrimitiveアトリビュートをカスタムオブジェクトプロパティ(IFDファイルフォーマットのページのray_declare
を参照してください)に変換します。
そのプロパティ名はpacked:ATTRIBNAME
(ATTRIBNAME
はアトリビュート名)になります。
renderstate()
関数を使用することで、まさに他のオブジェクトプロパティのように、それらのプロパティにアクセスすることができます。
例:
vector Cd; if (!renderstate("packed:Cd", Cd)) Cd = 1; // パックジオメトリ上にCdアトリビュートがなかった場合
Examples ¶
surface showversion() { string rname, rversion; if (!renderstate("renderer:name", rname)) rname = "Unknown renderer"; if (!renderstate("renderer:version", rversion)) rversion = "Unknown version"; printf("Image rendered by %s (%s)\n", rname, rversion); } vector mapToScreen(vector NDC_P) { // NDC空間内のポイントを指定し、そのポイントがマップしているピクセルを見つけ出します。 vector result; if (!renderstate("image:resolution", result)) result = {640, 486, 0}; return result * NDC_P; }
properties | |
shading |
|