diff options
author | Julien Duroure <julien.duroure@gmail.com> | 2019-06-23 10:03:51 +0300 |
---|---|---|
committer | Julien Duroure <julien.duroure@gmail.com> | 2019-06-23 10:03:51 +0300 |
commit | 800399ec0b77cece262ad884ee6e279fb22551d1 (patch) | |
tree | c5e806619ce07d530d9258636cf99ed917df5588 | |
parent | a3ebbe7309932950024d426516bbb4f4aca62270 (diff) |
glTF exporter: check if object is really instanced in scene before exporting it
5 files changed, 20 insertions, 13 deletions
diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py index 2b999b50..3b90cc15 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": (0, 9, 30), + "version": (0, 9, 31), 'blender': (2, 80, 0), 'location': 'File > Import-Export', 'description': 'Import-Export as glTF 2.0', diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather.py index 63254899..013debdc 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather.py @@ -49,7 +49,7 @@ def __gather_scene(blender_scene, export_settings): for blender_object in blender_scene.objects: if blender_object.parent is None: - node = gltf2_blender_gather_nodes.gather_node(blender_object, export_settings) + node = gltf2_blender_gather_nodes.gather_node(blender_object, blender_scene, export_settings) if node is not None: scene.nodes.append(node) @@ -60,7 +60,7 @@ def __gather_animations(blender_scene, export_settings): animations = [] for blender_object in blender_scene.objects: # First check if this object is exported or not. Do not export animation of not exported object - obj_node = gltf2_blender_gather_nodes.gather_node(blender_object, export_settings) + obj_node = gltf2_blender_gather_nodes.gather_node(blender_object, blender_scene, export_settings) if obj_node is not None: animations += gltf2_blender_gather_animations.gather_animations(blender_object, export_settings) return animations diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_channel_target.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_channel_target.py index 5b2f28e8..2c458742 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_channel_target.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_animation_channel_target.py @@ -68,7 +68,7 @@ def __gather_node(channels: typing.Tuple[bpy.types.FCurve], if isinstance(blender_bone, bpy.types.PoseBone): return gltf2_blender_gather_joints.gather_joint(blender_bone, export_settings) - return gltf2_blender_gather_nodes.gather_node(blender_object, export_settings) + return gltf2_blender_gather_nodes.gather_node(blender_object, None, export_settings) def __gather_path(channels: typing.Tuple[bpy.types.FCurve], diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py index ae228eb9..dcc1d7ad 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py @@ -31,13 +31,16 @@ from io_scene_gltf2.io.com import gltf2_io_extensions @cached -def gather_node(blender_object, export_settings): - if not __filter_node(blender_object, export_settings): +def gather_node(blender_object, blender_scene, export_settings): + # If blender_scene is None, we are coming from animation export + # Check to know if object is exported is already done, so we don't check + # again if object is instanced in scene : this check was already done when exporting object itself + if not __filter_node(blender_object, blender_scene, export_settings): return None node = gltf2_io.Node( camera=__gather_camera(blender_object, export_settings), - children=__gather_children(blender_object, export_settings), + children=__gather_children(blender_object, blender_scene, export_settings), extensions=__gather_extensions(blender_object, export_settings), extras=__gather_extras(blender_object, export_settings), matrix=__gather_matrix(blender_object, export_settings), @@ -66,11 +69,15 @@ def gather_node(blender_object, export_settings): return node -def __filter_node(blender_object, export_settings): +def __filter_node(blender_object, blender_scene, export_settings): if blender_object.users == 0: return False if export_settings[gltf2_blender_export_keys.SELECTED] and blender_object.select_get() is False: return False + if blender_scene is not None: + instanced = any([blender_object.name in layer.objects for layer in blender_scene.view_layers]) + if instanced is False: + return False return True @@ -82,7 +89,7 @@ def __gather_camera(blender_object, export_settings): return gltf2_blender_gather_cameras.gather_camera(blender_object.data, export_settings) -def __gather_children(blender_object, export_settings): +def __gather_children(blender_object, blender_scene, export_settings): children = [] # standard children for child_object in blender_object.children: @@ -91,13 +98,13 @@ def __gather_children(blender_object, export_settings): # as the object should be a child of the specific bone, # not the Armature object continue - node = gather_node(child_object, export_settings) + node = gather_node(child_object, blender_scene, export_settings) if node is not None: children.append(node) # blender dupli objects if blender_object.instance_type == 'COLLECTION' and blender_object.instance_collection: for dupli_object in blender_object.instance_collection.objects: - node = gather_node(dupli_object, export_settings) + node = gather_node(dupli_object, blender_scene, export_settings) if node is not None: children.append(node) @@ -124,7 +131,7 @@ def __gather_children(blender_object, export_settings): parent_joint = find_parent_joint(root_joints, child.parent_bone) if not parent_joint: continue - child_node = gather_node(child, export_settings) + child_node = gather_node(child, None, export_settings) if child_node is None: continue blender_bone = blender_object.pose.bones[parent_joint.name] diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_skins.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_skins.py index 3d2741bd..71682e94 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_skins.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_skins.py @@ -140,5 +140,5 @@ def __gather_name(blender_object, export_settings): def __gather_skeleton(blender_object, export_settings): # In the future support the result of https://github.com/KhronosGroup/glTF/pull/1195 - return None # gltf2_blender_gather_nodes.gather_node(blender_object, export_settings) + return None # gltf2_blender_gather_nodes.gather_node(blender_object, blender_scene, export_settings) |