[Bf-extensions-cvs] [02ca41d4] master: glTF importer: improve node names

Julien Duroure noreply at git.blender.org
Sat Apr 11 13:43:51 CEST 2020


Commit: 02ca41d48ea388c297dcc0952a9ae8b2b93da9d7
Author: Julien Duroure
Date:   Sat Apr 11 13:38:40 2020 +0200
Branches: master
https://developer.blender.org/rBA02ca41d48ea388c297dcc0952a9ae8b2b93da9d7

glTF importer: improve node names

===================================================================

M	io_scene_gltf2/__init__.py
M	io_scene_gltf2/blender/imp/gltf2_blender_node.py
M	io_scene_gltf2/blender/imp/gltf2_blender_vnode.py

===================================================================

diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index c0fd6cd1..5d0dbe79 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, 2, 58),
+    "version": (1, 2, 59),
     'blender': (2, 82, 7),
     'location': 'File > Import-Export',
     'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_node.py b/io_scene_gltf2/blender/imp/gltf2_blender_node.py
index f6759224..4ac16805 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_node.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_node.py
@@ -29,7 +29,6 @@ class BlenderNode():
     def create_vnode(gltf, vnode_id):
         """Create VNode and all its descendants."""
         vnode = gltf.vnodes[vnode_id]
-        name = vnode.name
 
         gltf.display_current_node += 1
         if bpy.app.debug_value == 101:
@@ -56,21 +55,28 @@ class BlenderNode():
         vnode = gltf.vnodes[vnode_id]
 
         if vnode.mesh_node_idx is not None:
-            pynode = gltf.data.nodes[vnode.mesh_node_idx]
-            obj = BlenderNode.create_mesh_object(gltf, pynode, name=vnode.name)
+            obj = BlenderNode.create_mesh_object(gltf, vnode)
+
         elif vnode.camera_node_idx is not None:
             pynode = gltf.data.nodes[vnode.camera_node_idx]
             cam = BlenderCamera.create(gltf, pynode.camera)
-            obj = bpy.data.objects.new(vnode.name, cam)
+            name = vnode.name or cam.name
+            obj = bpy.data.objects.new(name, cam)
+
         elif vnode.light_node_idx is not None:
             pynode = gltf.data.nodes[vnode.light_node_idx]
             light = BlenderLight.create(gltf, pynode.extensions['KHR_lights_punctual']['light'])
-            obj = bpy.data.objects.new(vnode.name, light)
+            name = vnode.name or light.name
+            obj = bpy.data.objects.new(name, light)
+
         elif vnode.is_arma:
             armature = bpy.data.armatures.new(vnode.arma_name)
-            obj = bpy.data.objects.new(vnode.name, armature)
+            name = vnode.name or armature.name
+            obj = bpy.data.objects.new(name, armature)
+
         else:
-            obj = bpy.data.objects.new(vnode.name, None)
+            name = vnode.name or vnode.default_name
+            obj = bpy.data.objects.new(name, None)
 
         vnode.blender_object = obj
 
@@ -131,7 +137,7 @@ class BlenderNode():
 
         for id in bone_ids:
             vnode = gltf.vnodes[id]
-            editbone = armature.edit_bones.new(vnode.name)
+            editbone = armature.edit_bones.new(vnode.name or vnode.default_name)
             vnode.blender_bone_name = editbone.name
             editbone.use_connect = False  # TODO?
 
@@ -176,9 +182,9 @@ class BlenderNode():
                 set_extras(pose_bone, pynode.extras)
 
     @staticmethod
-    def create_mesh_object(gltf, pynode, name):
+    def create_mesh_object(gltf, vnode):
+        pynode = gltf.data.nodes[vnode.mesh_node_idx]
         pymesh = gltf.data.meshes[pynode.mesh]
-        name = pymesh.name or name
 
         # Key to cache the Blender mesh by.
         # Same cache key = instances of the same Blender mesh.
@@ -197,11 +203,12 @@ class BlenderNode():
         if cache_key is not None and cache_key in pymesh.blender_name:
             mesh = bpy.data.meshes[pymesh.blender_name[cache_key]]
         else:
-            gltf.log.info("Blender create Mesh node %s", name)
+            gltf.log.info("Blender create Mesh node %s", pymesh.name or pynode.mesh)
             mesh = BlenderMesh.create(gltf, pynode.mesh, pynode.skin)
             if cache_key is not None:
                 pymesh.blender_name[cache_key] = mesh.name
 
+        name = vnode.name or mesh.name
         obj = bpy.data.objects.new(name, mesh)
 
         if pymesh.shapekey_names:
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_vnode.py b/io_scene_gltf2/blender/imp/gltf2_blender_vnode.py
index f2659d51..ade1d95d 100644
--- a/io_scene_gltf2/blender/imp/gltf2_blender_vnode.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_vnode.py
@@ -44,7 +44,8 @@ class VNode:
     DummyRoot = 2
 
     def __init__(self):
-        self.name = ''
+        self.name = None
+        self.default_name = 'Node'  # fallback when no name
         self.children = []
         self.parent = None
         self.type = VNode.Object
@@ -112,7 +113,8 @@ def init_vnodes(gltf):
     for i, pynode in enumerate(gltf.data.nodes or []):
         vnode = VNode()
         gltf.vnodes[i] = vnode
-        vnode.name = pynode.name or 'Node_%d' % i
+        vnode.name = pynode.name
+        vnode.default_name = 'Node_%d' % i
         vnode.children = list(pynode.children or [])
         vnode.base_trs = get_node_trs(gltf, pynode)
         if pynode.mesh is not None:
@@ -131,7 +133,7 @@ def init_vnodes(gltf):
     roots = [id for id in gltf.vnodes if gltf.vnodes[id].parent is None]
     gltf.vnodes['root'] = VNode()
     gltf.vnodes['root'].type = VNode.DummyRoot
-    gltf.vnodes['root'].name = 'Root'
+    gltf.vnodes['root'].default_name = 'Root'
     gltf.vnodes['root'].children = roots
     for root in roots:
         gltf.vnodes[root].parent = 'root'
@@ -238,7 +240,6 @@ def move_skinned_meshes(gltf):
         if vnode.mesh_node_idx is None:
             continue
 
-        mesh = gltf.data.nodes[vnode.mesh_node_idx].mesh
         skin = gltf.data.nodes[vnode.mesh_node_idx].skin
         if skin is None:
             continue
@@ -274,7 +275,6 @@ def move_skinned_meshes(gltf):
         # the mesh instance there, leaving the node behind.
         new_id = str(id) + '.skinned'
         gltf.vnodes[new_id] = VNode()
-        gltf.vnodes[new_id].name = gltf.data.meshes[mesh].name or 'Mesh_%d' % mesh
         gltf.vnodes[new_id].parent = arma
         gltf.vnodes[arma].children.append(new_id)
         gltf.vnodes[new_id].mesh_node_idx = vnode.mesh_node_idx
@@ -313,7 +313,6 @@ def fixup_multitype_nodes(gltf):
             if needs_move:
                 new_id = str(id) + '.mesh'
                 gltf.vnodes[new_id] = VNode()
-                gltf.vnodes[new_id].name = vnode.name + ' Mesh'
                 gltf.vnodes[new_id].mesh_node_idx = vnode.mesh_node_idx
                 gltf.vnodes[new_id].parent = id
                 vnode.children.append(new_id)
@@ -324,7 +323,6 @@ def fixup_multitype_nodes(gltf):
             if needs_move:
                 new_id = str(id) + '.camera'
                 gltf.vnodes[new_id] = VNode()
-                gltf.vnodes[new_id].name = vnode.name + ' Camera'
                 gltf.vnodes[new_id].camera_node_idx = vnode.camera_node_idx
                 gltf.vnodes[new_id].parent = id
                 vnode.children.append(new_id)
@@ -335,7 +333,6 @@ def fixup_multitype_nodes(gltf):
             if needs_move:
                 new_id = str(id) + '.light'
                 gltf.vnodes[new_id] = VNode()
-                gltf.vnodes[new_id].name = vnode.name + ' Light'
                 gltf.vnodes[new_id].light_node_idx = vnode.light_node_idx
                 gltf.vnodes[new_id].parent = id
                 vnode.children.append(new_id)



More information about the Bf-extensions-cvs mailing list