Fix T43926: Volume scatter: intersecting objects GPU rendering artifacts
Fix T44007: Cycles Volumetrics: block artifacts with overlapping volumes The issue was caused by uninitialized parameters of some closures, which lead to unpredictable behavior of shader_merge_closures().
This commit is contained in:
parent
572489ec89
commit
ed7e593a4b
Notes:
blender-bot
2023-02-14 09:23:51 +01:00
Referenced by issue #44007, Cycles Volumetrics: block artifacts with overlapping volumes Referenced by issue #43926, Volume scatter: intersecting objects GPU rendering artifacts
|
@ -39,6 +39,7 @@ 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,6 +40,8 @@ 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;
|
||||
}
|
||||
|
||||
|
@ -83,6 +85,8 @@ 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;
|
||||
}
|
||||
|
||||
|
|
|
@ -52,6 +52,8 @@ ccl_device float3 bsdf_diffuse_ramp_get_color(const ShaderClosure *sc, const flo
|
|||
ccl_device int bsdf_diffuse_ramp_setup(ShaderClosure *sc)
|
||||
{
|
||||
sc->type = CLOSURE_BSDF_DIFFUSE_RAMP_ID;
|
||||
sc->data0 = 0.0f;
|
||||
sc->data1 = 0.0f;
|
||||
return SD_BSDF|SD_BSDF_HAS_EVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -51,9 +51,9 @@ ccl_device float3 bsdf_phong_ramp_get_color(const ShaderClosure *sc, const float
|
|||
|
||||
ccl_device int bsdf_phong_ramp_setup(ShaderClosure *sc)
|
||||
{
|
||||
sc->data0 = max(sc->data0, 0.0f);
|
||||
|
||||
sc->type = CLOSURE_BSDF_PHONG_RAMP_ID;
|
||||
sc->data0 = max(sc->data0, 0.0f);
|
||||
sc->data1 = 0.0f;
|
||||
return SD_BSDF|SD_BSDF_HAS_EVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,6 +40,8 @@ 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,6 +40,8 @@ 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,6 +38,8 @@ 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,6 +30,7 @@ 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,6 +35,7 @@ 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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue