def __gather_scene(blender_scene, export_settings): scene = gltf2_io.Scene( extensions=None, extras=__gather_extras(blender_scene, export_settings), name=blender_scene.name, nodes=[] ) vtree = gltf2_blender_gather_tree.VExportTree(export_settings) vtree.construct(blender_scene) vtree.search_missing_armature() # In case armature are no parented correctly export_user_extensions('vtree_before_filter_hook', export_settings, vtree) # Now, we can filter tree if needed vtree.filter() export_user_extensions('vtree_after_filter_hook', export_settings, vtree) export_settings['vtree'] = vtree for r in [vtree.nodes[r] for r in vtree.roots]: node = gltf2_blender_gather_nodes.gather_node( r, export_settings) if node is not None: scene.nodes.append(node) export_user_extensions('gather_scene_hook', export_settings, scene, blender_scene) return scene
def __gather_scene(blender_scene, export_settings): scene = gltf2_io.Scene( extensions=None, extras=__gather_extras(blender_scene, export_settings), name=blender_scene.name, nodes=[] ) for blender_object in blender_scene.objects: if blender_object.parent is None: node = gltf2_blender_gather_nodes.gather_node(blender_object, blender_scene, export_settings) if node is not None: scene.nodes.append(node) return scene
def __gather_scene(blender_scene, export_settings): scene = gltf2_io.Scene( extensions=None, extras=__gather_extras(blender_scene, export_settings), name=None, nodes=[] ) for _blender_object in [obj for obj in blender_scene.objects if obj.proxy is None]: if _blender_object.type == "ARMATURE": # extract the root bone from the armature armature = _blender_object blender_object = _blender_object.proxy if _blender_object.proxy else _blender_object for bone in blender_object.pose.bones: # sometimes there can be more than one bone at root level if bone.parent is None: joint = gltf2_blender_gather_joints.gather_joint(blender_object, bone, export_settings) if joint is not None: scene.nodes.append(joint) elif _blender_object.type == "MESH": if _blender_object.parent is None: # skip if the object is not a child continue if _blender_object.parent.parent is None: # add skinned meshes and meshes with a parent bone to the scene blender_object = _blender_object.proxy if _blender_object.proxy else _blender_object modifiers = {m.type: m for m in blender_object.modifiers} if ("ARMATURE" not in modifiers or modifiers["ARMATURE"].object is None) and not blender_object.parent_bone == "": # for some reason the value for no parent bone is an empty string instead of None continue node = gltf2_blender_gather_nodes.gather_node( blender_object, blender_object.library.name if blender_object.library else None, blender_scene, None, export_settings) if node is not None: scene.nodes.append(node) elif _blender_object.type == "EMPTY": # in rare cases where there is more than one root bone, if there is an empty that is a direct child of an armature and has no parent bone, we export it if _blender_object.parent_bone == "" and _blender_object.parent.parent is None: blender_object = _blender_object.proxy if _blender_object.proxy else _blender_object node = gltf2_blender_gather_nodes.gather_node( blender_object, blender_object.library.name if blender_object.library else None, blender_scene, None, export_settings) if node is not None: scene.nodes.append(node) export_user_extensions('gather_scene_hook', export_settings, scene, blender_scene) return scene
def __gather_scene(blender_scene, export_settings): scene = gltf2_io.Scene(extensions=None, extras=None, name=blender_scene.name, nodes=[]) for blender_object in blender_scene.objects: if blender_object.parent is None: node = gltf2_blender_gather_nodes.gather_node( blender_object, export_settings) if node is not None: scene.nodes.append(node) # TODO: materials, textures, images # TODO: animations # TODO: lights # TODO: asset? return scene
def __gather_scene(blender_scene, export_settings): scene = gltf2_io.Scene( extensions=None, extras=__gather_extras(blender_scene, export_settings), name=blender_scene.name, nodes=[] ) for _blender_object in [obj for obj in blender_scene.objects if obj.proxy is None]: if _blender_object.parent is None: blender_object = _blender_object.proxy if _blender_object.proxy else _blender_object node = gltf2_blender_gather_nodes.gather_node( blender_object, blender_object.library.name if blender_object.library else None, blender_scene, None, export_settings) if node is not None: scene.nodes.append(node) export_user_extensions('gather_scene_hook', export_settings, scene, blender_scene) return scene