@tool extends EditorSceneFormatImporter var settings = ProjectSettings const settings_fbx2gltf_path = "filesystem/import/fbx/fbx2gltf_path" var fbx2gltf_path : String func _get_extensions(): return ["fbx"] func _get_import_flags(): return EditorSceneFormatImporter.IMPORT_SCENE func _import_scene(path: String, flags: int, bake_fps: int): if not ProjectSettings.has_setting(settings_fbx2gltf_path): ProjectSettings.set_initial_value(settings_fbx2gltf_path, "fbx2gltf") ProjectSettings.set_setting(settings_fbx2gltf_path, "fbx2gltf") else: fbx2gltf_path = ProjectSettings.get_setting(settings_fbx2gltf_path) if fbx2gltf_path.is_empty(): return null var property_info = { "name": settings_fbx2gltf_path, "type": TYPE_STRING, "hint": PROPERTY_HINT_GLOBAL_FILE, "hint_string": "" } ProjectSettings.add_property_info(property_info) var user_path_base = OS.get_user_data_dir() var path_global : String = ProjectSettings.globalize_path(path) var output_path : String = "res://.godot/imported/" + path.get_file().get_basename() + "-" + path.md5_text() + ".glb" var output_path_global = ProjectSettings.globalize_path(output_path) var stdout = [].duplicate() var temp_dir_global = ProjectSettings.globalize_path("res://.godot/imported/") var ret = OS.execute(fbx2gltf_path, [ "--fbx-temp-dir", temp_dir_global, "-i", path_global, "-o", output_path_global], stdout, true) for line in stdout: print(line) if ret != 0: print("FBX2glTF returned " + str(ret)) return null var gstate : GLTFState = GLTFState.new() var gltf : GLTFDocument = GLTFDocument.new() var root_node : Node = gltf.import_scene(output_path, 0, 1000.0, gstate) root_node.name = path.get_basename().get_file() return root_node