bsdf diffuse(...)
bsdf diffuse(float roughness, ...)
bsdf diffuse(vector nml, ...)
bsdf diffuse(vector nml, float roughness, ...)
bsdf diffuse(vector nml, vector geo_normal, ...)
bsdf diffuse(vector nml, vector geo_normal, float roughness, ...)
ディフューズ反射。このBSDFのアルベドは0.5です。
シェーダまたはジオメトリの法線が滑らかになっている(NとNgが異なっている)場合、diffuse(vector nml)シグネチャを使用しないでください。
その理由は、そのシグネチャはシェーディング法線とジオメトリ法線が同じであると想定しているからです。
BSDFの詳細は、PBRシェーダの記述を参照してください。
vector diffuse(vector nml, ...)
vector diffuse(vector nml, vector V, float roughness, ...)
この形式は、Oren-Nayarライティングモデルを使って、サーフェスのdiffuse照明を計算します。
Oren-Nayarライティングモデルは、ランバート反射よりも洗練されたライティングモデルです。
Vベクトルは、サーフェスから目の方向のベクトルを意味します(つまり、-normalize(I))。
roughnessを0にすると、Oren-Nayarライティングモデルはランバート反射モデルと同じになります。
roughnessを1まで上げると、照明が、よりでこぼこした材質(粘土のような)を模倣します。
diffuse()のOren-Nayar形式は、ランバートよりも負荷が大きいです。
ライトの包含/除外オプション ¶
"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]- 文字リストに一致。
| See also | |
| bsdf |
|
| pbr |
|
| shading |
|