Fix T44123: Cycles SSS renders black in recent builds
Issue was introduced in 01ee21f
where i didn't notice *_setup()
function only doing partial initialization, and some of parameters
are expected to be initialized by callee function.
This was hitting only some setups, so tests with benchmark scenes
didn't unleash issues. Now it should all be fine.
This is to go to the 2.74 branch and we actually might re-AHOY.
This commit is contained in:
parent
8804e6493c
commit
f1f797599f
Notes:
blender-bot
2023-02-14 09:20:13 +01:00
Referenced by issue #44123, Cycles SSS completely broken in recent builds, renders as black
|
@ -39,7 +39,6 @@ ccl_device int bsdf_ashikhmin_velvet_setup(ShaderClosure *sc)
|
|||
{
|
||||
float sigma = fmaxf(sc->data0, 0.01f);
|
||||
sc->data0 = 1.0f/(sigma * sigma); /* m_invsigma2 */
|
||||
sc->data1 = 0.0f;
|
||||
|
||||
sc->type = CLOSURE_BSDF_ASHIKHMIN_VELVET_ID;
|
||||
|
||||
|
|
|
@ -40,8 +40,6 @@ CCL_NAMESPACE_BEGIN
|
|||
ccl_device int bsdf_diffuse_setup(ShaderClosure *sc)
|
||||
{
|
||||
sc->type = CLOSURE_BSDF_DIFFUSE_ID;
|
||||
sc->data0 = 0.0f;
|
||||
sc->data1 = 0.0f;
|
||||
return SD_BSDF|SD_BSDF_HAS_EVAL;
|
||||
}
|
||||
|
||||
|
@ -85,8 +83,6 @@ ccl_device int bsdf_diffuse_sample(const ShaderClosure *sc, float3 Ng, float3 I,
|
|||
ccl_device int bsdf_translucent_setup(ShaderClosure *sc)
|
||||
{
|
||||
sc->type = CLOSURE_BSDF_TRANSLUCENT_ID;
|
||||
sc->data0 = 0.0f;
|
||||
sc->data1 = 0.0f;
|
||||
return SD_BSDF|SD_BSDF_HAS_EVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,8 +40,6 @@ CCL_NAMESPACE_BEGIN
|
|||
ccl_device int bsdf_reflection_setup(ShaderClosure *sc)
|
||||
{
|
||||
sc->type = CLOSURE_BSDF_REFLECTION_ID;
|
||||
sc->data0 = 0.0f;
|
||||
sc->data1 = 0.0f;
|
||||
return SD_BSDF;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,8 +40,6 @@ CCL_NAMESPACE_BEGIN
|
|||
ccl_device int bsdf_refraction_setup(ShaderClosure *sc)
|
||||
{
|
||||
sc->type = CLOSURE_BSDF_REFRACTION_ID;
|
||||
sc->data0 = 0.0f;
|
||||
sc->data1 = 0.0f;
|
||||
return SD_BSDF;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,8 +38,6 @@ CCL_NAMESPACE_BEGIN
|
|||
ccl_device int bsdf_transparent_setup(ShaderClosure *sc)
|
||||
{
|
||||
sc->type = CLOSURE_BSDF_TRANSPARENT_ID;
|
||||
sc->data0 = 0.0f;
|
||||
sc->data1 = 0.0f;
|
||||
return SD_BSDF|SD_TRANSPARENT;
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,6 @@ ccl_device int bssrdf_setup(ShaderClosure *sc, ClosureType type)
|
|||
return flag;
|
||||
}
|
||||
else {
|
||||
sc->data0 = 0.0f;
|
||||
sc->data1 = clamp(sc->data1, 0.0f, 1.0f); /* texture blur */
|
||||
sc->T.x = clamp(sc->T.x, 0.0f, 1.0f); /* sharpness */
|
||||
sc->type = type;
|
||||
|
|
|
@ -35,7 +35,6 @@ ccl_device int volume_henyey_greenstein_setup(ShaderClosure *sc)
|
|||
|
||||
/* clamp anisotropy to avoid delta function */
|
||||
sc->data0 = signf(sc->data0) * min(fabsf(sc->data0), 1.0f - 1e-3f);
|
||||
sc->data1 = 0.0f;
|
||||
|
||||
return SD_SCATTER;
|
||||
}
|
||||
|
|
|
@ -800,6 +800,8 @@ ccl_device void shader_eval_surface(KernelGlobals *kg, ShaderData *sd,
|
|||
#else
|
||||
sd->closure->weight = make_float3(0.8f, 0.8f, 0.8f);
|
||||
sd->closure->N = sd->N;
|
||||
sd->closyre->data0 = 0.0f;
|
||||
sd->closyre->data1 = 0.0f;
|
||||
sd->flag |= bsdf_diffuse_setup(&sd->closure);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -267,6 +267,7 @@ static void flatten_surface_closure_tree(ShaderData *sd, int path_flag,
|
|||
if(fabsf(weight.x) > 0.0f) {
|
||||
sc.weight = make_float3(weight.x, 0.0f, 0.0f);
|
||||
sc.data0 = bssrdf->radius.x;
|
||||
sc.data1 = 0.0f;
|
||||
sd->flag |= bssrdf_setup(&sc, sc.type);
|
||||
sd->closure[sd->num_closure++] = sc;
|
||||
}
|
||||
|
@ -274,6 +275,7 @@ static void flatten_surface_closure_tree(ShaderData *sd, int path_flag,
|
|||
if(fabsf(weight.y) > 0.0f) {
|
||||
sc.weight = make_float3(0.0f, weight.y, 0.0f);
|
||||
sc.data0 = bssrdf->radius.y;
|
||||
sc.data1 = 0.0f;
|
||||
sd->flag |= bssrdf_setup(&sc, sc.type);
|
||||
sd->closure[sd->num_closure++] = sc;
|
||||
}
|
||||
|
@ -281,6 +283,7 @@ static void flatten_surface_closure_tree(ShaderData *sd, int path_flag,
|
|||
if(fabsf(weight.z) > 0.0f) {
|
||||
sc.weight = make_float3(0.0f, 0.0f, weight.z);
|
||||
sc.data0 = bssrdf->radius.z;
|
||||
sc.data1 = 0.0f;
|
||||
sd->flag |= bssrdf_setup(&sc, sc.type);
|
||||
sd->closure[sd->num_closure++] = sc;
|
||||
}
|
||||
|
|
|
@ -27,8 +27,11 @@ ccl_device void svm_node_glass_setup(ShaderData *sd, ShaderClosure *sc, int type
|
|||
sc->data2 = 0.0f;
|
||||
sd->flag |= bsdf_refraction_setup(sc);
|
||||
}
|
||||
else
|
||||
else {
|
||||
sc->data0 = 0.0f;
|
||||
sc->data1 = 0.0f;
|
||||
sd->flag |= bsdf_reflection_setup(sc);
|
||||
}
|
||||
}
|
||||
else if(type == CLOSURE_BSDF_MICROFACET_BECKMANN_GLASS_ID) {
|
||||
sc->data0 = roughness;
|
||||
|
@ -384,6 +387,8 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
|
|||
* spawned by transmission from the front */
|
||||
sc->weight = make_float3(1.0f, 1.0f, 1.0f);
|
||||
sc->N = N;
|
||||
sc->data0 = 0.0f;
|
||||
sc->data1 = 0.0f;
|
||||
sd->flag |= bsdf_transparent_setup(sc);
|
||||
}
|
||||
}
|
||||
|
@ -529,6 +534,7 @@ ccl_device void svm_node_closure_volume(KernelGlobals *kg, ShaderData *sd, float
|
|||
|
||||
if(sc) {
|
||||
sc->data0 = param2; /* g */
|
||||
sc->data1 = 0.0f;
|
||||
sd->flag |= volume_henyey_greenstein_setup(sc);
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue