Context(s) | displace fog light shadow surface |
int scatter(vector ipoint, vector inormal, vector idirection, vector idistribution, float time, float maxdist, vector &opoint, vector &onormal, vector &odirection)
ジオメトリを通過した単一散乱イベントを評価します。1の戻り値は、その散乱が成功したことを意味します。
ipoint
散乱させる入射ポイント。
inormal
その入射ポイントにおけるサーフェス法線(表面のみ)。散乱平面の向きを変更する必要があります。
idirection
入射ポイントにおける第一散乱方向。散乱平面の向きを変更する必要があります。
idistribution
入射ポイントにおける初期散乱分布。ゼロ値のベクトルを渡すと、ランダムな散乱分布が使用されます。
maxdist
散乱する最大距離。
opoint
散乱した出射ポイント。
onormal
散乱した出射ポイントにおける法線(表面のみ)。
odirection
散乱した出射ポイントにおける出射方向(表面のみ)。
// シーン内の交差を追跡します。 vector hitP = 0; vector hitN = 0; int hit = trace(P, I, Time, "P", hitP, "N", hitN); // その交差からランダムな距離を散乱させます。 vector idistribution = 0; int sid = israytrace ? SID : newsampler(); vector s; nextsample(sid, s.x, s.y, "mode", "nextpixel"); float maxdist = 2.0 * s.x; vector opoint = 0; vector onormal = 0; vector odirection = 0; hit = scatter(hitP, hitN, I, idistribution, Time, maxdist, opoint, onormal, odirection); // 散乱した出射ポイントから再度追跡します。 hit = trace(opoint, odirection, Time, "P", hitP, "N", hitN);
See also | |
shading raytracing |
|