def gather_image(blender_shader_sockets_or_texture_slots: typing.Union[
    typing.Tuple[bpy.types.NodeSocket], typing.Tuple[bpy.types.Texture]],
                 export_settings):
    if not __filter_image(blender_shader_sockets_or_texture_slots,
                          export_settings):
        return None

    uri = __gather_uri(blender_shader_sockets_or_texture_slots,
                       export_settings)
    buffer_view = __gather_buffer_view(blender_shader_sockets_or_texture_slots,
                                       export_settings)
    if not (uri is not None or buffer_view is not None):
        # The blender image has no data
        return None

    mime_type = __gather_mime_type(uri.filepath if uri is not None else "")

    image = gltf2_io.Image(
        buffer_view=buffer_view,
        extensions=__gather_extensions(blender_shader_sockets_or_texture_slots,
                                       export_settings),
        extras=__gather_extras(blender_shader_sockets_or_texture_slots,
                               export_settings),
        mime_type=mime_type,
        name=__gather_name(blender_shader_sockets_or_texture_slots,
                           export_settings),
        uri=uri)
    return image
Exemplo n.º 2
0
def __make_image(buffer_view, extensions, extras, mime_type, name, uri,
                 export_settings):
    return gltf2_io.Image(buffer_view=buffer_view,
                          extensions=extensions,
                          extras=extras,
                          mime_type=mime_type,
                          name=name,
                          uri=uri)
Exemplo n.º 3
0
def gather_image(
        blender_shader_sockets_or_texture_slots: typing.Union[typing.Tuple[bpy.types.NodeSocket], typing.Tuple[bpy.types.Texture]],
        export_settings):
    if not __filter_image(blender_shader_sockets_or_texture_slots, export_settings):
        return None
    image = gltf2_io.Image(
        buffer_view=__gather_buffer_view(blender_shader_sockets_or_texture_slots, export_settings),
        extensions=__gather_extensions(blender_shader_sockets_or_texture_slots, export_settings),
        extras=__gather_extras(blender_shader_sockets_or_texture_slots, export_settings),
        mime_type=__gather_mime_type(blender_shader_sockets_or_texture_slots, export_settings),
        name=__gather_name(blender_shader_sockets_or_texture_slots, export_settings),
        uri=__gather_uri(blender_shader_sockets_or_texture_slots, export_settings)
    )
    return image
Exemplo n.º 4
0
def __gather_extensions(blender_material, export_settings):
    extensions = {}

    if bpy.app.version < (2, 80, 0):
        if blender_material.use_shadeless:
            extensions["KHR_materials_unlit"] = Extension(
                "KHR_materials_unlit", {}, False)
    else:
        if gltf2_blender_get.get_socket_or_texture_slot(
                blender_material, "Background") is not None:
            extensions["KHR_materials_unlit"] = Extension(
                "KHR_materials_unlit", {}, False)

    if blender_material.get("useVideoTextureExtension", False) == "True":
        image_name = blender_material.get(
            "videoTextureExtension_DiffuseImageName")
        if image_name is not None:
            image = bpy.data.images[image_name]
            if image is not None and image.source == "MOVIE":
                data = tmp_encode_movie(image)
                mime_type = __gather_mimetype(image)
                image_base_name, _extension = path.splitext(image_name)

                if mime_type is not None:
                    # Create an image, either in a buffer view or in a separate file
                    source = gltf2_io.Image(buffer_view=__gather_buffer_view(
                        data, export_settings),
                                            extensions=None,
                                            extras=None,
                                            mime_type=mime_type,
                                            name=image_base_name,
                                            uri=__gather_uri(
                                                data, image_base_name,
                                                mime_type, export_settings))

                    # Create a texture to use the previous video image
                    texture = gltf2_io.Texture(extensions=None,
                                               extras=None,
                                               name=None,
                                               sampler=None,
                                               source=source)

                    extension = dict(diffuse=texture)
                    extensions["SVRF_video_texture"] = Extension(
                        "SVRF_video_texture", extension, False)

    # TODO specular glossiness extension

    return extensions if extensions else None