diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-03-23 10:48:33 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-03-24 17:47:49 +0300 |
commit | 01ee21ffb930d1e75c8501da44b06d63b6d46704 (patch) | |
tree | ab6edd376e672b7e69098290e6f835f3a941f9fa | |
parent | 3cf120be6764e4c7bb04a84f19cd0806a9cdeec0 (diff) |
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().
-rw-r--r-- | intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h | 1 | ||||
-rw-r--r-- | intern/cycles/kernel/closure/bsdf_diffuse.h | 4 | ||||
-rw-r--r-- | intern/cycles/kernel/closure/bsdf_diffuse_ramp.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/closure/bsdf_phong_ramp.h | 4 | ||||
-rw-r--r-- | intern/cycles/kernel/closure/bsdf_reflection.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/closure/bsdf_refraction.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/closure/bsdf_transparent.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/closure/bssrdf.h | 1 | ||||
-rw-r--r-- | intern/cycles/kernel/closure/volume.h | 1 |
9 files changed, 17 insertions, 2 deletions
diff --git a/intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h b/intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h index 580f50d5dd6..98c1159948a 100644 --- a/intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h +++ b/intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h @@ -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; diff --git a/intern/cycles/kernel/closure/bsdf_diffuse.h b/intern/cycles/kernel/closure/bsdf_diffuse.h index 4b29bb096d1..29725c5b5da 100644 --- a/intern/cycles/kernel/closure/bsdf_diffuse.h +++ b/intern/cycles/kernel/closure/bsdf_diffuse.h @@ -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; } diff --git a/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h b/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h index cdaf84f1750..e0287e7655a 100644 --- a/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h +++ b/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h @@ -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; } diff --git a/intern/cycles/kernel/closure/bsdf_phong_ramp.h b/intern/cycles/kernel/closure/bsdf_phong_ramp.h index f9f263719e9..1ab15eee954 100644 --- a/intern/cycles/kernel/closure/bsdf_phong_ramp.h +++ b/intern/cycles/kernel/closure/bsdf_phong_ramp.h @@ -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; } diff --git a/intern/cycles/kernel/closure/bsdf_reflection.h b/intern/cycles/kernel/closure/bsdf_reflection.h index 303f4c9ce34..d635e734188 100644 --- a/intern/cycles/kernel/closure/bsdf_reflection.h +++ b/intern/cycles/kernel/closure/bsdf_reflection.h @@ -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; } diff --git a/intern/cycles/kernel/closure/bsdf_refraction.h b/intern/cycles/kernel/closure/bsdf_refraction.h index c78a4b67134..e339778d7d0 100644 --- a/intern/cycles/kernel/closure/bsdf_refraction.h +++ b/intern/cycles/kernel/closure/bsdf_refraction.h @@ -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; } diff --git a/intern/cycles/kernel/closure/bsdf_transparent.h b/intern/cycles/kernel/closure/bsdf_transparent.h index 3c2fd8004df..78580190f6a 100644 --- a/intern/cycles/kernel/closure/bsdf_transparent.h +++ b/intern/cycles/kernel/closure/bsdf_transparent.h @@ -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; } diff --git a/intern/cycles/kernel/closure/bssrdf.h b/intern/cycles/kernel/closure/bssrdf.h index b6de2da8c71..43de6e529ee 100644 --- a/intern/cycles/kernel/closure/bssrdf.h +++ b/intern/cycles/kernel/closure/bssrdf.h @@ -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; diff --git a/intern/cycles/kernel/closure/volume.h b/intern/cycles/kernel/closure/volume.h index 439610546e5..4143980f2cd 100644 --- a/intern/cycles/kernel/closure/volume.h +++ b/intern/cycles/kernel/closure/volume.h @@ -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; } |