[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