Merge branch 'blender-v4.0-release' into main
This commit is contained in:
commit
5bb729b155
@ -12,12 +12,12 @@ shader node_glass_bsdf(color Color = 0.8,
|
||||
normal Normal = N,
|
||||
output closure color BSDF = 0)
|
||||
{
|
||||
float f = max(IOR, 1e-5);
|
||||
float eta = backfacing() ? 1.0 / f : f;
|
||||
float roughness = Roughness * Roughness;
|
||||
float r2 = Roughness * Roughness;
|
||||
float eta = max(IOR, 1e-5);
|
||||
eta = backfacing() ? 1.0 / eta : eta;
|
||||
color F0 = F0_from_ior(eta);
|
||||
color F90 = color(1.0);
|
||||
|
||||
if (distribution == "Multiscatter GGX")
|
||||
BSDF = Color * microfacet_multi_ggx_glass(Normal, roughness, eta, Color);
|
||||
else
|
||||
BSDF = Color * microfacet(distribution, Normal, roughness, eta, 2);
|
||||
BSDF = generalized_schlick_bsdf(
|
||||
Normal, vector(0.0), Color, Color, r2, r2, F0, F90, -eta, distribution);
|
||||
}
|
||||
|
@ -552,37 +552,38 @@ ccl_device
|
||||
!kernel_data.integrator.caustics_refractive && (path_flag & PATH_RAY_DIFFUSE))
|
||||
break;
|
||||
#endif
|
||||
Spectrum weight = closure_weight * mix_weight;
|
||||
ccl_private MicrofacetBsdf *bsdf = (ccl_private MicrofacetBsdf *)bsdf_alloc(
|
||||
sd, sizeof(MicrofacetBsdf), weight);
|
||||
sd, sizeof(MicrofacetBsdf), make_spectrum(mix_weight));
|
||||
ccl_private FresnelGeneralizedSchlick *fresnel =
|
||||
(bsdf != NULL) ? (ccl_private FresnelGeneralizedSchlick *)closure_alloc_extra(
|
||||
sd, sizeof(FresnelGeneralizedSchlick)) :
|
||||
NULL;
|
||||
|
||||
if (bsdf) {
|
||||
if (bsdf && fresnel) {
|
||||
bsdf->N = maybe_ensure_valid_specular_reflection(sd, N);
|
||||
bsdf->T = zero_float3();
|
||||
bsdf->fresnel = NULL;
|
||||
|
||||
float eta = fmaxf(param2, 1e-5f);
|
||||
eta = (sd->flag & SD_BACKFACING) ? 1.0f / eta : eta;
|
||||
float ior = fmaxf(param2, 1e-5f);
|
||||
bsdf->ior = (sd->flag & SD_BACKFACING) ? 1.0f / ior : ior;
|
||||
bsdf->alpha_x = bsdf->alpha_y = sqr(param1);
|
||||
|
||||
fresnel->f0 = make_float3(F0_from_ior(ior));
|
||||
fresnel->f90 = one_spectrum();
|
||||
fresnel->exponent = -ior;
|
||||
const float3 color = stack_load_float3(stack, data_node.z);
|
||||
fresnel->reflection_tint = color;
|
||||
fresnel->transmission_tint = color;
|
||||
|
||||
/* setup bsdf */
|
||||
float roughness = sqr(param1);
|
||||
bsdf->alpha_x = roughness;
|
||||
bsdf->alpha_y = roughness;
|
||||
bsdf->ior = eta;
|
||||
|
||||
if (type == CLOSURE_BSDF_MICROFACET_BECKMANN_GLASS_ID) {
|
||||
sd->flag |= bsdf_microfacet_beckmann_glass_setup(bsdf);
|
||||
}
|
||||
else {
|
||||
sd->flag |= bsdf_microfacet_ggx_glass_setup(bsdf);
|
||||
if (type == CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID) {
|
||||
kernel_assert(stack_valid(data_node.z));
|
||||
const Spectrum color = rgb_to_spectrum(stack_load_float3(stack, data_node.z));
|
||||
bsdf_microfacet_setup_fresnel_constant(kg, bsdf, sd, color);
|
||||
}
|
||||
}
|
||||
const bool is_multiggx = (type == CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID);
|
||||
bsdf_microfacet_setup_fresnel_generalized_schlick(kg, bsdf, sd, fresnel, is_multiggx);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case CLOSURE_BSDF_ASHIKHMIN_VELVET_ID: {
|
||||
|
@ -441,8 +441,8 @@ typedef enum ClosureType {
|
||||
CLOSURE_BSDF_HAIR_TRANSMISSION_ID,
|
||||
|
||||
/* Glass */
|
||||
CLOSURE_BSDF_MICROFACET_BECKMANN_GLASS_ID,
|
||||
CLOSURE_BSDF_MICROFACET_GGX_GLASS_ID,
|
||||
CLOSURE_BSDF_MICROFACET_BECKMANN_GLASS_ID, /* virtual closure */
|
||||
CLOSURE_BSDF_MICROFACET_GGX_GLASS_ID, /* virtual closure */
|
||||
CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID, /* virtual closure */
|
||||
CLOSURE_BSDF_HAIR_CHIANG_ID,
|
||||
CLOSURE_BSDF_HAIR_HUANG_ID,
|
||||
|
@ -1179,8 +1179,11 @@ int ShaderGraph::get_num_closures()
|
||||
* for the volume steps. */
|
||||
num_closures += MAX_VOLUME_STACK_SIZE;
|
||||
}
|
||||
else if (closure_type == CLOSURE_BSDF_HAIR_CHIANG_ID ||
|
||||
closure_type == CLOSURE_BSDF_HAIR_HUANG_ID) {
|
||||
else if (closure_type == CLOSURE_BSDF_MICROFACET_BECKMANN_GLASS_ID ||
|
||||
closure_type == CLOSURE_BSDF_MICROFACET_GGX_GLASS_ID ||
|
||||
closure_type == CLOSURE_BSDF_HAIR_CHIANG_ID ||
|
||||
closure_type == CLOSURE_BSDF_HAIR_HUANG_ID)
|
||||
{
|
||||
num_closures += 2;
|
||||
}
|
||||
else {
|
||||
|
@ -2511,13 +2511,7 @@ GlassBsdfNode::GlassBsdfNode() : BsdfNode(get_node_type())
|
||||
void GlassBsdfNode::compile(SVMCompiler &compiler)
|
||||
{
|
||||
closure = distribution;
|
||||
|
||||
if (closure == CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID) {
|
||||
BsdfNode::compile(compiler, input("Roughness"), input("IOR"), input("Color"));
|
||||
}
|
||||
else {
|
||||
BsdfNode::compile(compiler, input("Roughness"), input("IOR"));
|
||||
}
|
||||
BsdfNode::compile(compiler, input("Roughness"), input("IOR"), input("Color"));
|
||||
}
|
||||
|
||||
void GlassBsdfNode::compile(OSLCompiler &compiler)
|
||||
|
@ -29,7 +29,7 @@ class SequencerCrossfadeSounds(Operator):
|
||||
scene = context.scene
|
||||
seq1 = None
|
||||
seq2 = None
|
||||
for strip in scene.sequence_editor.sequences:
|
||||
for strip in scene.sequence_editor.sequences_all:
|
||||
if strip.select and strip.type == 'SOUND':
|
||||
if seq1 is None:
|
||||
seq1 = strip
|
||||
|
Loading…
Reference in New Issue
Block a user