Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey@blender.org>2021-11-02 17:42:09 +0300
committerSergey Sharybin <sergey@blender.org>2021-11-02 17:42:09 +0300
commitc01b3c534be3024185f0f611d13db01e487e9c16 (patch)
tree1a4ac7c4f80188c92b709688b0c2dec868c30978 /intern/cycles/scene
parent1b2342b4d3641a5b438cba86a9378be944cec103 (diff)
parent89c9fa8b737e07c84c1ff35919d211699592e6b5 (diff)
Merge branch 'blender-v3.0-release'
Diffstat (limited to 'intern/cycles/scene')
-rw-r--r--intern/cycles/scene/geometry.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/intern/cycles/scene/geometry.cpp b/intern/cycles/scene/geometry.cpp
index 5141e1f8358..8a3fc522d22 100644
--- a/intern/cycles/scene/geometry.cpp
+++ b/intern/cycles/scene/geometry.cpp
@@ -1588,9 +1588,20 @@ void GeometryManager::device_update_displacement_images(Device *device,
set<int> bump_images;
foreach (Geometry *geom, scene->geometry) {
if (geom->is_modified()) {
+ /* Geometry-level check for hair shadow transparency.
+ * This matches the logic in the `Hair::update_shadow_transparency()`, avoiding access to
+ * possible non-loaded images. */
+ bool need_shadow_transparency = false;
+ if (geom->geometry_type == Geometry::HAIR) {
+ Hair *hair = static_cast<Hair *>(geom);
+ need_shadow_transparency = hair->need_shadow_transparency();
+ }
+
foreach (Node *node, geom->get_used_shaders()) {
Shader *shader = static_cast<Shader *>(node);
- if (!shader->has_displacement || shader->get_displacement_method() == DISPLACE_BUMP) {
+ const bool is_true_displacement = (shader->has_displacement &&
+ shader->get_displacement_method() != DISPLACE_BUMP);
+ if (!is_true_displacement && !need_shadow_transparency) {
continue;
}
foreach (ShaderNode *node, shader->graph->nodes) {