[Bf-blender-cvs] [1bacd09abb6] blender-v3.4-release: Fix: Mishandled creases in Cycles adaptive subdivision

Hans Goudey noreply at git.blender.org
Mon Nov 28 21:11:12 CET 2022


Commit: 1bacd09abb60a4b3febb6d8c78c784ce86f50e3e
Author: Hans Goudey
Date:   Mon Nov 28 13:49:55 2022 -0600
Branches: blender-v3.4-release
https://developer.blender.org/rB1bacd09abb60a4b3febb6d8c78c784ce86f50e3e

Fix: Mishandled creases in Cycles adaptive subdivision

Caused by a8a454287a27 which assumed it was possible
to access the raw data of the edge creases layer. Also allow
processing vertex creases even if there aren't any edge creases.

===================================================================

M	intern/cycles/blender/mesh.cpp

===================================================================

diff --git a/intern/cycles/blender/mesh.cpp b/intern/cycles/blender/mesh.cpp
index fbc470cada4..1887440bc67 100644
--- a/intern/cycles/blender/mesh.cpp
+++ b/intern/cycles/blender/mesh.cpp
@@ -1085,11 +1085,11 @@ static void create_subd_mesh(Scene *scene,
   const int edges_num = b_mesh.edges.length();
 
   if (edges_num != 0 && b_mesh.edge_creases.length() > 0) {
-    size_t num_creases = 0;
-    const float *creases = static_cast<float *>(b_mesh.edge_creases[0].ptr.data);
+    BL::MeshEdgeCreaseLayer creases = b_mesh.edge_creases[0];
 
+    size_t num_creases = 0;
     for (int i = 0; i < edges_num; i++) {
-      if (creases[i] != 0.0f) {
+      if (creases.data[i].value() != 0.0f) {
         num_creases++;
       }
     }
@@ -1098,17 +1098,18 @@ static void create_subd_mesh(Scene *scene,
 
     const MEdge *edges = static_cast<MEdge *>(b_mesh.edges[0].ptr.data);
     for (int i = 0; i < edges_num; i++) {
-      if (creases[i] != 0.0f) {
+      const float crease = creases.data[i].value();
+      if (crease != 0.0f) {
         const MEdge &b_edge = edges[i];
-        mesh->add_edge_crease(b_edge.v1, b_edge.v2, creases[i]);
+        mesh->add_edge_crease(b_edge.v1, b_edge.v2, crease);
       }
     }
+  }
 
-    for (BL::MeshVertexCreaseLayer &c : b_mesh.vertex_creases) {
-      for (int i = 0; i < c.data.length(); ++i) {
-        if (c.data[i].value() != 0.0f) {
-          mesh->add_vertex_crease(i, c.data[i].value());
-        }
+  for (BL::MeshVertexCreaseLayer &c : b_mesh.vertex_creases) {
+    for (int i = 0; i < c.data.length(); ++i) {
+      if (c.data[i].value() != 0.0f) {
+        mesh->add_vertex_crease(i, c.data[i].value());
       }
     }
   }



More information about the Bf-blender-cvs mailing list