Merge branch 'blender-v4.0-release' into main
This commit is contained in:
@@ -91,7 +91,7 @@ ccl_device int bsdf_sheen_sample(ccl_private const ShaderClosure *sc,
|
||||
|
||||
float2 disk = sample_uniform_disk(rand);
|
||||
float diskZ = safe_sqrtf(1.0f - dot(disk, disk));
|
||||
float3 localO = normalize(make_float3((disk.x - diskZ * b) / a, disk.y / a, diskZ));
|
||||
float3 localO = normalize(make_float3((disk.x - diskZ * b), disk.y, diskZ * a));
|
||||
|
||||
*wo = localO.x * T + localO.y * B + localO.z * N;
|
||||
|
||||
|
||||
@@ -638,10 +638,14 @@ ccl_device void osl_closure_sheen_setup(KernelGlobals kg,
|
||||
bsdf->N = maybe_ensure_valid_specular_reflection(sd, closure->N);
|
||||
bsdf->roughness = closure->roughness;
|
||||
|
||||
sd->flag |= bsdf_sheen_setup(kg, sd, bsdf);
|
||||
const int sheen_flag = bsdf_sheen_setup(kg, sd, bsdf);
|
||||
|
||||
if (layer_albedo != NULL) {
|
||||
*layer_albedo = bsdf->weight;
|
||||
if (sheen_flag) {
|
||||
sd->flag |= sheen_flag;
|
||||
|
||||
if (layer_albedo != NULL) {
|
||||
*layer_albedo = bsdf->weight;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -194,11 +194,15 @@ ccl_device
|
||||
bsdf->roughness = sheen_roughness;
|
||||
|
||||
/* setup bsdf */
|
||||
sd->flag |= bsdf_sheen_setup(kg, sd, bsdf);
|
||||
const int sheen_flag = bsdf_sheen_setup(kg, sd, bsdf);
|
||||
|
||||
/* Attenuate lower layers */
|
||||
Spectrum albedo = bsdf_albedo(kg, sd, (ccl_private ShaderClosure *)bsdf, true, false);
|
||||
weight *= 1.0f - reduce_max(safe_divide_color(albedo, weight));
|
||||
if (sheen_flag) {
|
||||
sd->flag |= sheen_flag;
|
||||
|
||||
/* Attenuate lower layers */
|
||||
Spectrum albedo = bsdf_albedo(kg, sd, (ccl_private ShaderClosure *)bsdf, true, false);
|
||||
weight *= 1.0f - reduce_max(safe_divide_color(albedo, weight));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user