Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Duroure <julien.duroure@gmail.com>2019-06-23 10:03:51 +0300
committerJulien Duroure <julien.duroure@gmail.com>2019-06-23 10:03:51 +0300
commit800399ec0b77cece262ad884ee6e279fb22551d1 (patch)
treec5e806619ce07d530d9258636cf99ed917df5588
parenta3ebbe7309932950024d426516bbb4f4aca62270 (diff)
glTF exporter: check if object is really instanced in scene before exporting it
-rwxr-xr-xio_scene_gltf2/__init__.py2
-rwxr-xr-xio_scene_gltf2/blender/exp/gltf2_blender_gather.py4
-rwxr-xr-xio_scene_gltf2/blender/exp/gltf2_blender_gather_animation_channel_target.py2
-rwxr-xr-xio_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py23
-rwxr-xr-xio_scene_gltf2/blender/exp/gltf2_blender_gather_skins.py2
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)