[Bf-extensions-cvs] [c850bf4f] blender2.8: glTF importer: Fix custom normals import

Julien Duroure noreply at git.blender.org
Wed Dec 5 22:11:09 CET 2018


Commit: c850bf4fc1e167cecff3ca5711f7ef45241747f5
Author: Julien Duroure
Date:   Wed Dec 5 22:09:48 2018 +0100
Branches: blender2.8
https://developer.blender.org/rBAc850bf4fc1e167cecff3ca5711f7ef45241747f5

glTF importer: Fix custom normals import

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

M	io_scene_gltf2/blender/imp/gltf2_blender_mesh.py
M	io_scene_gltf2/blender/imp/gltf2_blender_primitive.py

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

diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py b/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py
index aafb9498..f0d0af2a 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_mesh.py
@@ -55,8 +55,13 @@ class BlenderMesh():
         """Set all data after mesh creation."""
         # Normals
         offset = 0
+        custom_normals = [[0.0, 0.0, 0.0]] * len(mesh.vertices)
+
+        if gltf.import_settings['import_shading'] == "NORMALS":
+            mesh.create_normals_split()
+
         for prim in pymesh.primitives:
-            offset = BlenderPrimitive.set_normals(gltf, prim, mesh, offset)
+            offset = BlenderPrimitive.set_normals(gltf, prim, mesh, offset, custom_normals)
 
         mesh.update()
 
@@ -67,6 +72,11 @@ class BlenderMesh():
 
         mesh.update()
 
+        # Normals, now that every update is done
+        if gltf.import_settings['import_shading'] == "NORMALS":
+            mesh.normals_split_custom_set_from_vertices(custom_normals)
+            mesh.use_auto_smooth = True
+
         # Object and UV are now created, we can set UVMap into material
         for prim in pymesh.primitives:
             BlenderPrimitive.set_UV_in_mat(gltf, prim, obj)
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py b/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py
index bc12f437..52987383 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_primitive.py
@@ -67,7 +67,7 @@ class BlenderPrimitive():
 
         return verts, edges, faces
 
-    def set_normals(gltf, pyprimitive, mesh, offset):
+    def set_normals(gltf, pyprimitive, mesh, offset, custom_normals):
         """Set Normal."""
         if 'NORMAL' in pyprimitive.attributes.keys():
             normal_data = BinaryData.get_data_from_accessor(gltf, pyprimitive.attributes['NORMAL'])
@@ -79,6 +79,7 @@ class BlenderPrimitive():
                         if vert_idx in range(offset, offset + pyprimitive.vertices_length):
                             cpt_vert = vert_idx - offset
                             mesh.vertices[vert_idx].normal = normal_data[cpt_vert]
+                            custom_normals[vert_idx] = list(normal_data[cpt_vert])
                             calc_norm_vertices.append(vert_idx)
 
                         if len(calc_norm_vertices) == 3:



More information about the Bf-extensions-cvs mailing list