diff options
author | Julien Duroure <julien.duroure@gmail.com> | 2018-12-06 00:09:48 +0300 |
---|---|---|
committer | Julien Duroure <julien.duroure@gmail.com> | 2018-12-06 00:09:48 +0300 |
commit | c850bf4fc1e167cecff3ca5711f7ef45241747f5 (patch) | |
tree | 5339cd73419a910edac834430d49cf912e073976 /io_scene_gltf2/blender | |
parent | 10e85f21856c9d7a4b6976277a7c135770155b4e (diff) |
glTF importer: Fix custom normals import
Diffstat (limited to 'io_scene_gltf2/blender')
-rwxr-xr-x | io_scene_gltf2/blender/imp/gltf2_blender_mesh.py | 12 | ||||
-rwxr-xr-x | io_scene_gltf2/blender/imp/gltf2_blender_primitive.py | 3 |
2 files changed, 13 insertions, 2 deletions
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: |