diff options
Diffstat (limited to 'godot/addons/blend')
| -rw-r--r-- | godot/addons/blend/import_blend.gd | 104 | ||||
| -rw-r--r-- | godot/addons/blend/plugin.cfg | 7 | ||||
| -rw-r--r-- | godot/addons/blend/plugin.gd | 35 |
3 files changed, 146 insertions, 0 deletions
diff --git a/godot/addons/blend/import_blend.gd b/godot/addons/blend/import_blend.gd new file mode 100644 index 0000000..102b1fc --- /dev/null +++ b/godot/addons/blend/import_blend.gd @@ -0,0 +1,104 @@ +# Copyright (c) 2021 K. S. Ernest (iFire) Lee and V-Sekai Contributors. +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +tool +extends EditorSceneImporter + +const settings_blender_path = "filesystem/import/blend/blender_path" + +var blender_path : String + +func _init(): + if not ProjectSettings.has_setting(settings_blender_path): + ProjectSettings.set_setting(settings_blender_path, "blender") + ProjectSettings.set_initial_value(settings_blender_path, "blender") + else: + blender_path = ProjectSettings.get_setting(settings_blender_path) + var property_info = { + "name": settings_blender_path, + "type": TYPE_STRING, + "hint": PROPERTY_HINT_GLOBAL_FILE, + "hint_string": "" + } + ProjectSettings.add_property_info(property_info) + + +func _get_extensions(): + return ["blend"] + + +func _get_import_flags(): + return EditorSceneImporter.IMPORT_SCENE + + +func _import_scene(path: String, flags: int, bake_fps: int): + var import_config_file = ConfigFile.new() + import_config_file.load(path + ".import") + var compression_flags: int = import_config_file.get_value("params", "meshes/compress", 0) + # ARRAY_COMPRESS_BASE = (ARRAY_INDEX + 1) + compression_flags = compression_flags << (VisualServer.ARRAY_INDEX + 1) + if import_config_file.get_value("params", "meshes/octahedral_compression", false): + compression_flags |= VisualServer.ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION + + var path_global : String = ProjectSettings.globalize_path(path) + path_global = path_global.c_escape() + var output_path : String = "res://.import/" + path.get_file() + "-" + path.md5_text() + ".glb" + var output_path_global = ProjectSettings.globalize_path(output_path) + output_path_global = output_path_global.c_escape() + var stdout = [].duplicate() + var addon_path : String = blender_path + var addon_path_global = ProjectSettings.globalize_path(addon_path) + var params: PoolStringArray = [ + "filepath='%s'" % output_path_global, + "export_format='GLB'", + "export_colors=True", + "export_all_influences=False", + "export_extras=True", + "export_cameras=True", + "export_lights=True", + "export_apply=(len(bpy.data.shape_keys)==0)" + ] + var script : String = "import bpy; bpy.ops.export_scene.gltf(%s)" % params.join(",") + path_global = path_global.c_escape() + var args = PoolStringArray([ + path_global, + "--background", + "--python-expr", + script + ]) + var ret = OS.execute(addon_path_global, args, true, stdout, true) + if ret != OK: + push_error( + "Blender import failed with code=%d.\nCommand: %s\nOutput: %s" % [ + ret, + args.join(" "), + PoolStringArray(stdout).join("\n") + ] + ) + return null + + var root_node: Spatial = null + if Engine.get_version_info()["major"] <= 3 and Engine.get_version_info()["minor"] <= 3: + root_node = call("import_scene_from_other_importer", output_path, flags, bake_fps) + else: + root_node = call("import_scene_from_other_importer", output_path, flags, bake_fps, compression_flags) + return root_node diff --git a/godot/addons/blend/plugin.cfg b/godot/addons/blend/plugin.cfg new file mode 100644 index 0000000..3fe0961 --- /dev/null +++ b/godot/addons/blend/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Blend" +description="Blend Importer" +author="K. S. Ernest Lee and V-Sekai Contributors" +version="1.0.0" +script="plugin.gd" diff --git a/godot/addons/blend/plugin.gd b/godot/addons/blend/plugin.gd new file mode 100644 index 0000000..d399e67 --- /dev/null +++ b/godot/addons/blend/plugin.gd @@ -0,0 +1,35 @@ +# Copyright (c) 2021 K. S. Ernest (iFire) Lee and V-Sekai Contributors. +# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. +# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +tool +extends EditorPlugin + +var import_plugin + +func _enter_tree(): + import_plugin = preload("res://addons/blend/import_blend.gd").new() + add_scene_import_plugin(import_plugin) + + +func _exit_tree(): + remove_scene_import_plugin(import_plugin) + import_plugin = null |
