diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index f2a3a0b..0000000 --- a/.gitattributes +++ /dev/null @@ -1,14 +0,0 @@ -# FBX SDK -*.a filter=lfs diff=lfs merge=lfs -text -*.dylib filter=lfs diff=lfs merge=lfs -text -*.so filter=lfs diff=lfs merge=lfs -text -*.dll filter=lfs diff=lfs merge=lfs -text -*.lib filter=lfs diff=lfs merge=lfs -text - -# TEST FILES -*.glb filter=lfs diff=lfs merge=lfs -text -*.fbx filter=lfs diff=lfs merge=lfs -text -*.tga filter=lfs diff=lfs merge=lfs -text -*.png filter=lfs diff=lfs merge=lfs -text -*.jpg filter=lfs diff=lfs merge=lfs -text - diff --git a/.gitignore b/.gitignore index 786f2e2..0dbe219 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ npm/tests/test/*.js.map build/ .cache/ sdk/ + +demo/.godot/ diff --git a/demo/addons/fbx/import_fbx.gd b/demo/addons/fbx/import_fbx.gd new file mode 100644 index 0000000..6f38ae0 --- /dev/null +++ b/demo/addons/fbx/import_fbx.gd @@ -0,0 +1,55 @@ +@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 diff --git a/demo/addons/fbx/plugin.cfg b/demo/addons/fbx/plugin.cfg new file mode 100644 index 0000000..1cdcc28 --- /dev/null +++ b/demo/addons/fbx/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="FBX" +description="FBX Importer" +author="V-Sekai" +version="1.1.0" +script="plugin.gd" diff --git a/demo/addons/fbx/plugin.gd b/demo/addons/fbx/plugin.gd new file mode 100644 index 0000000..4938a8e --- /dev/null +++ b/demo/addons/fbx/plugin.gd @@ -0,0 +1,13 @@ +@tool +extends EditorPlugin + +var import_plugin + +func _enter_tree(): + import_plugin = preload("res://addons/fbx/import_fbx.gd").new() + add_scene_format_importer_plugin(import_plugin) + + +func _exit_tree(): + add_scene_format_importer_plugin(import_plugin) + import_plugin = null diff --git a/demo/default_env.tres b/demo/default_env.tres new file mode 100644 index 0000000..20207a4 --- /dev/null +++ b/demo/default_env.tres @@ -0,0 +1,7 @@ +[gd_resource type="Environment" load_steps=2 format=2] + +[sub_resource type="ProceduralSky" id=1] + +[resource] +background_mode = 2 +background_sky = SubResource( 1 ) diff --git a/demo/icon.png.import b/demo/icon.png.import new file mode 100644 index 0000000..54d8d71 --- /dev/null +++ b/demo/icon.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture2D" +uid="uid://syqf374gcodm" +path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.png" +dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +compress/normal_map=0 +compress/channel_pack=0 +compress/streamed=false +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/HDR_as_SRGB=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 diff --git a/demo/project.godot b/demo/project.godot new file mode 100644 index 0000000..4a8f352 --- /dev/null +++ b/demo/project.godot @@ -0,0 +1,32 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="FBX Game Project" +config/icon="res://icon.png" +config/features=PackedStringArray("4.0") + +[editor_plugins] + +enabled=PackedStringArray("res://addons/fbx/plugin.cfg") + +[filesystem] + +import/fbx/use_fbx=false +import/fbx/fbx2gltf_path="fbx2gltf" + +[physics] + +common/enable_pause_aware_picking=true + +[rendering] + +environment/default_environment="res://default_env.tres"