FBX2glTF/demo/addons/fbx/import_fbx.gd

57 lines
1.8 KiB
GDScript

@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() + ".gltf"
var output_path_global = ProjectSettings.globalize_path(output_path)
var stdout = [].duplicate()
var temp_dir_global = ProjectSettings.globalize_path("res://.godot/imported/")
var fbx2gltf_path_global = ProjectSettings.globalize_path(fbx2gltf_path)
var ret = OS.execute(fbx2gltf_path_global, [
"--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