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
예제 #2
0
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
예제 #3
0
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