On this page | |
Context(s) | shading |
void refractlight(vector &cf, vector &of, float &af, vector P, vector D, float bias, float max_contrib, ...)
void refractlight(vector &cf, vector &of, float &af, vector P, vector N, vector I, float eta, float bias, float max_contrib, ...)
現在のサーフェスで屈折されるサーフェスの照明を計算します。 出力カラー(cf)、不透明度(of)、アルファ(af)を計算して出力します。 不透明度 vs. アルファを参照してください。
自己屈折を軽減するためのbiasは通常では小さい数値(例えば、0.005)を使います。
max_contribはレンダラーに屈折光がピクセルの最終的なカラーにどれだけ寄与するのかを伝えます。 これは、結果のカラーには影響を与えません。
1番目の形式のrefractlight()関数は、ポジション、方向を受け取り、通常では、refractまたはfresnel関数で計算されます。
レンダラーが標準の透明度(つまり、屈折しない透明度)を計算しないようにするために、Of変数を{1,1,1}に設定して、サーフェスを“不透明”にしなければなりません。 Af変数は、任意の値に設定することができます。
ライトの包含/除外オプション ¶
"categories
",
string
="*"
“category”タグによって包含/除外するライトを指定します。
これによって決まる包含/除外するライトは、lightmask
キーワード引数でパターンマッチングしたライト名よりも優先度が高いです。
例:
diff = diffuse(nml, "lightmask", "hero | fill");
詳細は、ライトカテゴリを参照してください。
"lightmask
",
string
="*"
lightとshadowのシェーダを評価する時、オブジェクトはライトマスクを事前定義します。 このマスクは、通常ではジオメトリオブジェクトで指定し、surfaceやfogのシェーダを照明するために使用するライトのリストを指定します。 “lightmask”引数を指定することで、デフォルトのライトマスクを上書きすることができます。
例:
diff = diffuse(nml, "lightmask", "light*,^light2");
…これは、名前が“light”で始まる“light2”以外のライトすべてが拡散反射光の照明で考慮されます。
すべてのHoudiniスコープのパターン(グループ展開を除く)がサポートされています:
-
*
- ワイルドカードに一致。 -
?
- 任意の1文字に一致。 -
^
- 一致するものを排除。 -
[list]
- 文字リストに一致。
領域サンプリングオプション ¶
領域サンプリングをするには、角度とサンプルの可変パラメータの両方を指定しなければなりません。例:
surface blurry_mirror(float angle = 3; int samples = 16; float bias=0.05) { Cf = reflectlight(bias, 1, "angle", angle, "samples", samples); }
光線オプション ¶
Tip
テクスチャを指定する時に例えばenvironment
キーワードと同様に、
画像フィルタリングキーワード引数を使用することもできます。
画像フィルタキーワード引数のリストは、environmentを参照してください。
"scope
",
string
光線に当たることができるオブジェクトのリスト。これを指定すると、scope
は、指定したraystyle
が選択されるようになっていたデフォルトのスコープを上書きします。
scope:default
値は、scope
引数が現在のコンテキストのデフォルトのスコープを使用するようにします。つまり、この引数を指定しなかった時の挙動になります。
光線の交差に対してスコープの上書きが可能になります。
特別なスコープ引数のscope:self
は、現在シェーディングされているオブジェクトにマッチします。
"currentobject
",
material
現行シェーディングオブジェクトがどれなのかを指定するために使用します。例えば、scope引数を使ったscope:self
は、この引数によって渡されたオブジェクトと同じ意味になります。
"maxdist
",
float
=-1
オブジェクトを検索する最大距離。これは、オブジェクトの検索を、その近くにあるオブジェクトだけに制限するために使います。指定したmaxdist
がマイナスなら、最大距離が指定されていないと見なされます。
交差をテストする時に光線が移動できる最大距離を上書きすることができます。 いくつかの関数(例えばfastshadow)には、(光線の長さによって)暗黙的に最大距離が定義されているものがあり、おそらくこのオプションを使用することができません。 しかし、反射、グローバルイルミネーション、屈折などの計算をする時には、このオプションを効果的に使用することができます。
"variancevar
",
string
分散アンチエイリアスで使用するVEXエクスポート変数の名前。レンダラーは、マイクロポリゴンレンダリングでこの値と隣接するマイクロポリゴンを比較し、さらにサンプルを必要とするシェーディングポイントを判断します(閾値としてvm_variance
propertyを使用)。もっとサンプルが必要なら、アルゴリズムは指定した最大光線サンプル数までサンプルを引き上げます。
この変数は、ヒットサーフェスからインポートされなければならないので、この変数はインポートする名前のリストになければなりません(以下の“光線から情報をインポートする”を参照)。名前を付けた変数がインポートされなければ、このオプションは無視されます。
分散アンチエイリアスは、高い分散値を持つ画像の領域内(例えば、シャープなシャドウエッジ)により多くのサンプルを配置します。これはvm_dorayvariance
が有効な時だけに使われます。そうでない場合は、最小光線サンプル(または明示的に指定したsamples
の値)のみがgatherループのアンチエイリアスで使われます。
グローバルのVarianceコントロール(Mantraの-vオプション)を上書きします。 このコントロールは、レイトレーシングのアンチエイリアス品質の決定に使用されます。 詳細は、Mantraのドキュメントを参照してください。
"angle
",
float
=0
分布角度(ラジアンで指定)。gather()に関しては、光線はこのアングル内で分布します。trace()に関しては、この角度は、交差距離が長くなるにつれてフィルタ幅が広がる速さを示すために使用されます。 角度が大きいほど、より遠くにあるヒットサーフェスほど、より大きい微分を使用するので、テクスチャリングとディスプレイスメントのパフォーマンスが良くなります。
効果を出すには、samplesパラメータも指定してください。
"samples
",
int|float
=1
フィルタ光線に送信されるサンプル数。イラディアンスとオクルージョンの関数に関しては、samplesパラメータを指定することで、デフォルトのイラディアンスサンプリングが上書きされます。
"environment
",
string
シーンに送信された光線がどこにも当たらなかった場合に評価される環境マップを指定することができます。
光線の方向を使用すると、指定した環境マップが評価されて、その結果のカラーが返されます。 ほとんどの場合、環境マップを評価するには、トランスフォーム空間を指定する必要があります。
refractlightとtraceの場合では、指定した背景カラーに関係なくOfとAfの変数に0が設定されます。
環境マップを指定する時、texture()のフィルタオプションにも対応しています。
環境/反射マップを作成する方法を参照してください。
"envobject
",
string
環境マップが使用されている場合、光線をシーン内の他のオブジェクト、ライトオブジェクト、フォグオブジェクトの空間に変換することで、その環境マップの向きを指定することができます。 Houdiniでは、Nullオブジェクトを使用して、その向きを指定することができます。例:
Cf = R*reflectlight(bias, max(R), "environment", "map.rat", "envobject", "null_object_name");
"envlight
",
string
環境マップが使用されている場合、光線をシーン内のライトの空間に変換することで、その環境マップの向きを指定することができます。
"envtint
",
vector
環境マップが使用されている場合、このカラーを使って環境マップに色味を付けます。
"background
",
vector
光線がどのオブジェクトにも当たらなかった場合、これをシーンの背景カラーとして使用します。 refractlightとtraceの場合では、指定した背景カラーに関係なくOfとAfの変数に0が設定されます。
"distribution
",
string
関数: irradiance, occlusion
イラディアンスの計算をするための分布。デフォルトでは、コサイン分布(ディフューズ照明)を使用します。
スタイルに指定可能な値は、均一なサンプリングをするnonweighted
、コサインウェイトのサンプリングをするcosine
です。
Examples ¶
surface glass(float eta=1.3, bias = 0.005) { float Kr, Kt; vector R, T; vector cf, of; float af; frensel(normalize(I), normalize(N), eta, Kr, Kt, R, T); Cf = Kr * reflectlight(P, R, bias, Kr); refractlight(cf, of, af, P, T, bias, Kt); Cf += Kt * cf; Af = clamp(Kr + af*Kt, 0, 1); Of = 1; }
See also | |
surface |