glTF exporter: fix normal export when normals are modified by modifier(s)

This commit is contained in:
Julien Duroure 2019-08-23 07:26:40 +02:00
parent 4a66c4e0b8
commit 3c3c2243db
3 changed files with 8 additions and 3 deletions

View File

@ -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": (0, 9, 47),
"version": (0, 9, 48),
'blender': (2, 80, 0),
'location': 'File > Import-Export',
'description': 'Import-Export as glTF 2.0',

View File

@ -588,7 +588,7 @@ def extract_primitives(glTF, blender_mesh, blender_vertex_groups, modifiers, exp
vertex = blender_mesh.vertices[vertex_index]
v = convert_swizzle_location(vertex.co, export_settings)
if blender_polygon.use_smooth:
if blender_polygon.use_smooth or blender_mesh.use_auto_smooth:
if blender_mesh.has_custom_normals:
n = convert_swizzle_location(blender_mesh.loops[loop_index].normal, export_settings)
else:

View File

@ -224,6 +224,11 @@ def __gather_mesh(blender_object, export_settings):
if blender_object.type != "MESH":
return None
modifier_normal_types = [
"NORMAL_EDIT",
"WEIGHTED_NORMAL"
]
# If not using vertex group, they are irrelevant for caching --> ensure that they do not trigger a cache miss
vertex_groups = blender_object.vertex_groups
modifiers = blender_object.modifiers
@ -239,7 +244,7 @@ def __gather_mesh(blender_object, export_settings):
edge_split = blender_object.modifiers.new('Temporary_Auto_Smooth', 'EDGE_SPLIT')
edge_split.split_angle = blender_object.data.auto_smooth_angle
edge_split.use_edge_angle = not blender_object.data.has_custom_normals
blender_object.data.use_auto_smooth = False
blender_object.data.use_auto_smooth = any([m in modifier_normal_types for m in [mod.type for mod in blender_object.modifiers]])
bpy.context.view_layer.update()
armature_modifiers = {}