From 422c47c5f79ed0e693d6b876b232736d34af83d9 Mon Sep 17 00:00:00 2001 From: Julien Duroure <julien.duroure@gmail.com> Date: Tue, 21 Jul 2020 20:27:00 +0200 Subject: [PATCH] glTF exporter: use split normals when exporting morph targets Thanks scurest! --- io_scene_gltf2/__init__.py | 2 +- .../blender/exp/gltf2_blender_extract.py | 33 +++++-------------- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py index 7e64f1812..02fc114f4 100755 --- a/io_scene_gltf2/__init__.py +++ b/io_scene_gltf2/__init__.py @@ -15,7 +15,7 @@ bl_info = { 'name': 'glTF 2.0 format', 'author': 'Julien Duroure, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors', - "version": (1, 3, 36), + "version": (1, 3, 37), 'blender': (2, 90, 0), 'location': 'File > Import-Export', 'description': 'Import-Export as glTF 2.0', diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_extract.py b/io_scene_gltf2/blender/exp/gltf2_blender_extract.py index 704a7b4ee..c28fddf96 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_extract.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_extract.py @@ -34,10 +34,9 @@ class Prim: self.indices = [] class ShapeKey: - def __init__(self, shape_key, vertex_normals, polygon_normals): + def __init__(self, shape_key, split_normals): self.shape_key = shape_key - self.vertex_normals = vertex_normals - self.polygon_normals = polygon_normals + self.split_normals = split_normals # @@ -210,16 +209,14 @@ def extract_primitives(glTF, blender_mesh, library, blender_object, blender_vert for blender_shape_key in blender_mesh.shape_keys.key_blocks: if blender_shape_key == blender_shape_key.relative_key or blender_shape_key.mute: continue + + split_normals = None if use_morph_normals: - vertex_normals = blender_shape_key.normals_vertex_get() - polygon_normals = blender_shape_key.normals_polygon_get() - else: - vertex_normals = None - polygon_normals = None + split_normals = blender_shape_key.normals_split_get() + shape_keys.append(ShapeKey( blender_shape_key, - vertex_normals, - polygon_normals, + split_normals, )) @@ -330,20 +327,8 @@ def extract_primitives(glTF, blender_mesh, library, blender_object, blender_vert vert += ((v_morph[0], v_morph[1], v_morph[2]),) if use_morph_normals: - if blender_polygon.use_smooth: - normals = shape_key.vertex_normals - n_morph = Vector(( - normals[vertex_index * 3 + 0], - normals[vertex_index * 3 + 1], - normals[vertex_index * 3 + 2], - )) - else: - normals = shape_key.polygon_normals - n_morph = Vector(( - normals[blender_polygon.index * 3 + 0], - normals[blender_polygon.index * 3 + 1], - normals[blender_polygon.index * 3 + 2], - )) + normals = shape_key.split_normals + n_morph = Vector(normals[loop_index * 3 : loop_index * 3 + 3]) n_morph = n_morph - n # store delta vert += ((n_morph[0], n_morph[1], n_morph[2]),) -- GitLab