forked from bartvdbraak/blender
Fix part of cycles/osl light pass rendering, transmission still not correct.
This commit is contained in:
parent
292e8e7e00
commit
e23b202693
@ -139,15 +139,27 @@ static void flatten_surface_closure_tree(ShaderData *sd, bool no_glossy,
|
||||
float sample_weight = fabsf(average(weight)) * albedo;
|
||||
|
||||
sc.sample_weight = sample_weight;
|
||||
sc.type = CLOSURE_BSDF_ID;
|
||||
|
||||
/* scattering flags */
|
||||
if (scattering == OSL::Labels::DIFFUSE)
|
||||
if (scattering == OSL::Labels::DIFFUSE) {
|
||||
sd->flag |= SD_BSDF | SD_BSDF_HAS_EVAL;
|
||||
else if (scattering == OSL::Labels::GLOSSY)
|
||||
sc.type = CLOSURE_BSDF_DIFFUSE_ID;
|
||||
}
|
||||
else if (scattering == OSL::Labels::GLOSSY) {
|
||||
sd->flag |= SD_BSDF | SD_BSDF_HAS_EVAL | SD_BSDF_GLOSSY;
|
||||
else
|
||||
sc.type = CLOSURE_BSDF_GLOSSY_ID;
|
||||
}
|
||||
else if (scattering == OSL::Labels::STRAIGHT) {
|
||||
sd->flag |= SD_BSDF;
|
||||
sc.type = CLOSURE_BSDF_TRANSPARENT_ID;
|
||||
}
|
||||
else {
|
||||
/* todo: we don't actually have a way to determine if
|
||||
* this closure will reflect/transmit. could add our own
|
||||
* own scattering flag that do give this info */
|
||||
sd->flag |= SD_BSDF;
|
||||
sc.type = CLOSURE_BSDF_GLOSSY_ID;
|
||||
}
|
||||
|
||||
/* add */
|
||||
sd->closure[sd->num_closure++] = sc;
|
||||
|
@ -287,16 +287,18 @@ typedef enum ClosureType {
|
||||
CLOSURE_BSDF_DIFFUSE_ID,
|
||||
CLOSURE_BSDF_OREN_NAYAR_ID,
|
||||
|
||||
CLOSURE_BSDF_GLOSSY_ID,
|
||||
CLOSURE_BSDF_REFLECTION_ID,
|
||||
CLOSURE_BSDF_MICROFACET_GGX_ID,
|
||||
CLOSURE_BSDF_MICROFACET_BECKMANN_ID,
|
||||
CLOSURE_BSDF_WARD_ID,
|
||||
CLOSURE_BSDF_ASHIKHMIN_VELVET_ID,
|
||||
CLOSURE_BSDF_WESTIN_SHEEN_ID,
|
||||
|
||||
CLOSURE_BSDF_TRANSMISSION_ID,
|
||||
CLOSURE_BSDF_TRANSLUCENT_ID,
|
||||
CLOSURE_BSDF_REFRACTION_ID,
|
||||
CLOSURE_BSDF_WESTIN_BACKSCATTER_ID,
|
||||
CLOSURE_BSDF_ASHIKHMIN_VELVET_ID,
|
||||
CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID,
|
||||
CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID,
|
||||
CLOSURE_BSDF_GLASS_ID,
|
||||
@ -320,8 +322,8 @@ typedef enum ClosureType {
|
||||
/* watch this, being lazy with memory usage */
|
||||
#define CLOSURE_IS_BSDF(type) (type <= CLOSURE_BSDF_TRANSPARENT_ID)
|
||||
#define CLOSURE_IS_BSDF_DIFFUSE(type) (type >= CLOSURE_BSDF_DIFFUSE_ID && type <= CLOSURE_BSDF_OREN_NAYAR_ID)
|
||||
#define CLOSURE_IS_BSDF_GLOSSY(type) (type >= CLOSURE_BSDF_REFLECTION_ID && type <= CLOSURE_BSDF_WESTIN_SHEEN_ID)
|
||||
#define CLOSURE_IS_BSDF_TRANSMISSION(type) (type >= CLOSURE_BSDF_TRANSLUCENT_ID && type <= CLOSURE_BSDF_GLASS_ID)
|
||||
#define CLOSURE_IS_BSDF_GLOSSY(type) (type >= CLOSURE_BSDF_GLOSSY_ID && type <= CLOSURE_BSDF_WESTIN_SHEEN_ID)
|
||||
#define CLOSURE_IS_BSDF_TRANSMISSION(type) (type >= CLOSURE_BSDF_TRANSMISSION_ID && type <= CLOSURE_BSDF_GLASS_ID)
|
||||
#define CLOSURE_IS_VOLUME(type) (type >= CLOSURE_VOLUME_ID && type <= CLOSURE_VOLUME_ISOTROPIC_ID)
|
||||
#define CLOSURE_IS_EMISSION(type) (type == CLOSURE_EMISSION_ID)
|
||||
#define CLOSURE_IS_HOLDOUT(type) (type == CLOSURE_HOLDOUT_ID)
|
||||
|
Loading…
Reference in New Issue
Block a user