Skip to content

Commit

Permalink
Clean up FBX and glTF modules, again...
Browse files Browse the repository at this point in the history
- ModelDocument3D is completely dependent on gltf, so we can't have it in
  `scene`, it breaks the build with gltf disabled, and is super hacky.
  It was even depending on the FBX module, so I copied a helper method to
  work it around.
  * So I moved it back to the gltf module. Needs further work to actually
    make it a proper abstraction, but currently this is not it.
- The gltf module should NOT depend on fbx. Modules are meant to be MODULAR,
  they can't have circular dependencies like this. In theory, the fbx module
  should also not depend on gltf, but I see we're far from that goal, so
  I made the dependency explicit (fbx can't be enabled if gltf is disabled).
- Thus, I renamed and moved the FBX2glTF importer to the fbx module. The
  hack used to find which importer to use, where each importer refers to the
  other one, is really hacky... This also will need to be fixed. But I'm
  aware it's dependent on a bug report, which I linked in a comment.
- Renamed `filesystem/import/fbx/enabled` to `fbx2gltf`, since it doesn't
  control ufbx.
- Please please pay attention to includes, I'm tired of having to clean
  them up. I didn't do a full review but I finally noticed that the forward
  declares of core types in `gltf_defines.h`, combined with your IWYU-style
  IDE plugin that always re-adds all includes, is a very cursed combo.
  So I nuked the forward declares, if you want to always include everything,
  let's not do it twice...
  • Loading branch information
akien-mga committed Feb 22, 2024
1 parent 186cff5 commit d223e45
Show file tree
Hide file tree
Showing 37 changed files with 174 additions and 178 deletions.
4 changes: 2 additions & 2 deletions doc/classes/EditorSettings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -511,9 +511,9 @@
The maximum idle uptime (in seconds) of the Blender process.
This prevents Godot from having to create a new process for each import within the given seconds.
</member>
<member name="filesystem/import/fbx/fbx2gltf_path" type="String" setter="" getter="">
<member name="filesystem/import/fbx2gltf/fbx2gltf_path" type="String" setter="" getter="">
The path to the FBX2glTF executable used for converting Autodesk FBX 3D scene files [code].fbx[/code] to glTF 2.0 format during import.
To enable this feature for your specific project, use [member ProjectSettings.filesystem/import/fbx/enabled].
To enable this feature for your specific project, use [member ProjectSettings.filesystem/import/fbx2gltf/enabled].
</member>
<member name="filesystem/on_save/compress_binary_resources" type="bool" setter="" getter="">
If [code]true[/code], uses lossless compression for binary resources.
Expand Down
12 changes: 6 additions & 6 deletions doc/classes/ProjectSettings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -984,15 +984,15 @@
<member name="filesystem/import/blender/enabled.web" type="bool" setter="" getter="" default="false">
Override for [member filesystem/import/blender/enabled] on the Web where Blender can't easily be accessed from Godot.
</member>
<member name="filesystem/import/fbx/enabled" type="bool" setter="" getter="" default="true">
<member name="filesystem/import/fbx2gltf/enabled" type="bool" setter="" getter="" default="true">
If [code]true[/code], Autodesk FBX 3D scene files with the [code].fbx[/code] extension will be imported by converting them to glTF 2.0.
This requires configuring a path to a FBX2glTF executable in the editor settings at [code]filesystem/import/fbx/fbx2gltf_path[/code].
This requires configuring a path to a FBX2glTF executable in the editor settings at [member EditorSettings.filesystem/import/fbx2gltf/fbx2gltf_path].
</member>
<member name="filesystem/import/fbx/enabled.android" type="bool" setter="" getter="" default="false">
Override for [member filesystem/import/fbx/enabled] on Android where FBX2glTF can't easily be accessed from Godot.
<member name="filesystem/import/fbx2gltf/enabled.android" type="bool" setter="" getter="" default="false">
Override for [member filesystem/import/fbx2gltf/enabled] on Android where FBX2glTF can't easily be accessed from Godot.
</member>
<member name="filesystem/import/fbx/enabled.web" type="bool" setter="" getter="" default="false">
Override for [member filesystem/import/fbx/enabled] on the Web where FBX2glTF can't easily be accessed from Godot.
<member name="filesystem/import/fbx2gltf/enabled.web" type="bool" setter="" getter="" default="false">
Override for [member filesystem/import/fbx2gltf/enabled] on the Web where FBX2glTF can't easily be accessed from Godot.
</member>
<member name="gui/common/default_scroll_deadzone" type="int" setter="" getter="" default="0">
Default value for [member ScrollContainer.scroll_deadzone], which will be used for all [ScrollContainer]s unless overridden.
Expand Down
2 changes: 1 addition & 1 deletion editor/editor_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -556,7 +556,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
EDITOR_SETTING_USAGE(Variant::STRING, PROPERTY_HINT_GLOBAL_FILE, "filesystem/import/blender/blender_path", "", "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED)
EDITOR_SETTING_USAGE(Variant::INT, PROPERTY_HINT_RANGE, "filesystem/import/blender/rpc_port", 6011, "0,65535,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED)
EDITOR_SETTING_USAGE(Variant::FLOAT, PROPERTY_HINT_RANGE, "filesystem/import/blender/rpc_server_uptime", 5, "0,300,1,or_greater,suffix:s", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED)
EDITOR_SETTING_USAGE(Variant::STRING, PROPERTY_HINT_GLOBAL_FILE, "filesystem/import/fbx/fbx2gltf_path", "", "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED)
EDITOR_SETTING_USAGE(Variant::STRING, PROPERTY_HINT_GLOBAL_FILE, "filesystem/import/fbx2gltf/fbx2gltf_path", "", "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED)

// Tools (denoise)
EDITOR_SETTING_USAGE(Variant::STRING, PROPERTY_HINT_GLOBAL_DIR, "filesystem/tools/oidn/oidn_denoise_path", "", "", PROPERTY_USAGE_DEFAULT)
Expand Down
6 changes: 3 additions & 3 deletions editor/fbx_importer_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ void FBXImporterManager::_notification(int p_what) {
}

void FBXImporterManager::show_dialog(bool p_exclusive) {
String fbx2gltf_path = EDITOR_GET("filesystem/import/fbx/fbx2gltf_path");
String fbx2gltf_path = EDITOR_GET("filesystem/import/fbx2gltf/fbx2gltf_path");
fbx_path->set_text(fbx2gltf_path);
_validate_path(fbx2gltf_path);

Expand Down Expand Up @@ -105,7 +105,7 @@ void FBXImporterManager::_select_file(const String &p_path) {

void FBXImporterManager::_path_confirmed() {
String path = fbx_path->get_text();
EditorSettings::get_singleton()->set("filesystem/import/fbx/fbx2gltf_path", path);
EditorSettings::get_singleton()->set("filesystem/import/fbx2gltf/fbx2gltf_path", path);
EditorSettings::get_singleton()->save();
}

Expand All @@ -114,7 +114,7 @@ void FBXImporterManager::_cancel_setup() {
return; // No worry.
}
// No escape.
ProjectSettings::get_singleton()->set("filesystem/import/fbx/enabled", false);
ProjectSettings::get_singleton()->set("filesystem/import/fbx2gltf/enabled", false);
ProjectSettings::get_singleton()->save();
EditorNode::get_singleton()->save_all_scenes();
EditorNode::get_singleton()->restart_editor();
Expand Down
2 changes: 1 addition & 1 deletion editor/project_converter_3_to_4.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1168,7 +1168,7 @@ bool ProjectConverter3To4::test_array_names() {

// Callable is special class, to which normal classes may be renamed.
if (!ClassDB::class_exists(StringName(new_class)) && new_class != "Callable") {
ERR_PRINT(vformat("Class \"%s\" does not exist in Godot 4, so it cannot be used in the conversion.", old_class));
ERR_PRINT(vformat("Class \"%s\" does not exist in Godot 4, so it cannot be used in the conversion.", new_class));
valid = false; // This probably should be only a warning, but not 100% sure - this would need to be added to CI.
}
}
Expand Down
2 changes: 1 addition & 1 deletion editor/renames_map_3_to_4.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1514,7 +1514,7 @@ const char *RenamesMap3To4::class_renames[][2] = {
{ "DynamicFontData", "FontFile" },
{ "EditorNavigationMeshGenerator", "NavigationMeshGenerator" },
{ "EditorSceneImporter", "EditorSceneFormatImporter" },
{ "EditorSceneImporterFBX", "EditorSceneFormatImporterFBX" },
{ "EditorSceneImporterFBX", "EditorSceneFormatImporterFBX2GLTF" },
{ "EditorSceneImporterGLTF", "EditorSceneFormatImporterGLTF" },
{ "EditorSpatialGizmo", "EditorNode3DGizmo" },
{ "EditorSpatialGizmoPlugin", "EditorNode3DGizmoPlugin" },
Expand Down
11 changes: 11 additions & 0 deletions misc/extension_api_validation/4.2-stable.expected
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,14 @@ Validate extension JSON: JSON file: Field was added in a way that breaks compati
Validate extension JSON: JSON file: Field was added in a way that breaks compatibility 'classes/RenderSceneBuffersRD/methods/get_velocity_texture': arguments

MSAA flag was added, compatibility functions exist for these.


GH-81746
--------
Validate extension JSON: API was removed: classes/EditorSceneFormatImporterFBX

Renamed to EditorSceneFormatImporterFBX2GLTF.

The compat breakage was deemed necessary as this is a class most users wouldn't
use directly, and the name needs to be disambiguated with the new
EditorSceneFormatImporterUFBX.
13 changes: 10 additions & 3 deletions modules/fbx/SCsub
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,15 @@ env.modules_sources += thirdparty_obj

# Godot source files

env_fbx.add_source_files(env.modules_sources, "*.cpp")
env_fbx.add_source_files(env.modules_sources, "structures/*.cpp")
module_obj = []

env_fbx.add_source_files(module_obj, "*.cpp")
env_fbx.add_source_files(module_obj, "structures/*.cpp")

if env.editor_build:
env_fbx.add_source_files(env.modules_sources, "editor/*.cpp")
env_fbx.add_source_files(module_obj, "editor/*.cpp")

env.modules_sources += module_obj

# Needed to force rebuilding the module files when the thirdparty library is updated.
env.Depends(module_obj, thirdparty_obj)
2 changes: 2 additions & 0 deletions modules/fbx/config.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
def can_build(env, platform):
env.module_add_dependencies("fbx", ["gltf"])
return not env["disable_3d"]


Expand All @@ -8,6 +9,7 @@ def configure(env):

def get_doc_classes():
return [
"EditorSceneFormatImporterFBX2GLTF",
"EditorSceneFormatImporterUFBX",
"FBXDocument",
"FBXState",
Expand Down
13 changes: 13 additions & 0 deletions modules/fbx/doc_classes/EditorSceneFormatImporterFBX2GLTF.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="EditorSceneFormatImporterFBX2GLTF" inherits="EditorSceneFormatImporter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
<brief_description>
Importer for the [code].fbx[/code] scene file format.
</brief_description>
<description>
Imports Autodesk FBX 3D scenes by way of converting them to glTF 2.0 using the FBX2glTF command line tool.
The location of the FBX2glTF binary is set via the [member EditorSettings.filesystem/import/fbx2gltf/fbx2gltf_path] editor setting.
This importer is only used if [member ProjectSettings.filesystem/import/fbx2gltf/enabled] is enabled, otherwise [code].fbx[/code] files present in the project folder are not imported.
</description>
<tutorials>
</tutorials>
</class>
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**************************************************************************/
/* editor_scene_importer_fbx.cpp */
/* editor_scene_importer_fbx2gltf.cpp */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
Expand Down Expand Up @@ -28,27 +28,28 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/

#include "editor_scene_importer_fbx.h"
#include "editor_scene_importer_fbx2gltf.h"

#ifdef TOOLS_ENABLED

#include "../gltf_document.h"
#include "editor_scene_importer_ufbx.h"
#include "modules/gltf/gltf_document.h"

#include "core/config/project_settings.h"
#include "editor/editor_settings.h"
#include "modules/fbx/editor/editor_scene_importer_ufbx.h"

uint32_t EditorSceneFormatImporterFBX::get_import_flags() const {
uint32_t EditorSceneFormatImporterFBX2GLTF::get_import_flags() const {
return ImportFlags::IMPORT_SCENE | ImportFlags::IMPORT_ANIMATION;
}

void EditorSceneFormatImporterFBX::get_extensions(List<String> *r_extensions) const {
void EditorSceneFormatImporterFBX2GLTF::get_extensions(List<String> *r_extensions) const {
r_extensions->push_back("fbx");
}

Node *EditorSceneFormatImporterFBX::import_scene(const String &p_path, uint32_t p_flags,
Node *EditorSceneFormatImporterFBX2GLTF::import_scene(const String &p_path, uint32_t p_flags,
const HashMap<StringName, Variant> &p_options,
List<String> *r_missing_deps, Error *r_err) {
// FIXME: Hack to work around GH-86309.
if (p_options.has("fbx/importer") && int(p_options["fbx/importer"]) == EditorSceneFormatImporterUFBX::FBX_IMPORTER_UFBX) {
Ref<EditorSceneFormatImporterUFBX> fbx2gltf_importer;
fbx2gltf_importer.instantiate();
Expand All @@ -59,6 +60,7 @@ Node *EditorSceneFormatImporterFBX::import_scene(const String &p_path, uint32_t
return nullptr;
}
}

// Get global paths for source and sink.

// Don't use `c_escape()` as it can generate broken paths. These paths will be
Expand All @@ -71,7 +73,7 @@ Node *EditorSceneFormatImporterFBX::import_scene(const String &p_path, uint32_t

// Run fbx2gltf.

String fbx2gltf_path = EDITOR_GET("filesystem/import/fbx/fbx2gltf_path");
String fbx2gltf_path = EDITOR_GET("filesystem/import/fbx2gltf/fbx2gltf_path");

List<String> args;
args.push_back("--pbr-metallic-roughness");
Expand Down Expand Up @@ -120,7 +122,7 @@ Node *EditorSceneFormatImporterFBX::import_scene(const String &p_path, uint32_t
#endif
}

Variant EditorSceneFormatImporterFBX::get_option_visibility(const String &p_path, bool p_for_animation,
Variant EditorSceneFormatImporterFBX2GLTF::get_option_visibility(const String &p_path, bool p_for_animation,
const String &p_option, const HashMap<StringName, Variant> &p_options) {
if (p_option == "fbx/embedded_image_handling") {
return false;
Expand All @@ -134,11 +136,11 @@ Variant EditorSceneFormatImporterFBX::get_option_visibility(const String &p_path
#define ADD_OPTION_ENUM(PATH, ENUM_HINT, VALUE) \
r_options->push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::INT, SNAME(PATH), PROPERTY_HINT_ENUM, ENUM_HINT), VALUE));

void EditorSceneFormatImporterFBX::get_import_options(const String &p_path,
void EditorSceneFormatImporterFBX2GLTF::get_import_options(const String &p_path,
List<ResourceImporter::ImportOption> *r_options) {
}

void EditorSceneFormatImporterFBX::handle_compatibility_options(HashMap<StringName, Variant> &p_import_params) const {
void EditorSceneFormatImporterFBX2GLTF::handle_compatibility_options(HashMap<StringName, Variant> &p_import_params) const {
if (!p_import_params.has("fbx/importer")) {
p_import_params["fbx/importer"] = EditorSceneFormatImporterUFBX::FBX_IMPORTER_UFBX;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**************************************************************************/
/* editor_scene_importer_fbx.h */
/* editor_scene_importer_fbx2gltf.h */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
Expand Down Expand Up @@ -28,19 +28,18 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/

#ifndef EDITOR_SCENE_IMPORTER_FBX_H
#define EDITOR_SCENE_IMPORTER_FBX_H
#ifndef EDITOR_SCENE_IMPORTER_FBX2GLTF_H
#define EDITOR_SCENE_IMPORTER_FBX2GLTF_H

#ifdef TOOLS_ENABLED

#include "editor/editor_file_system.h"
#include "editor/import/3d/resource_importer_scene.h"

class Animation;
class Node;

class EditorSceneFormatImporterFBX : public EditorSceneFormatImporter {
GDCLASS(EditorSceneFormatImporterFBX, EditorSceneFormatImporter);
class EditorSceneFormatImporterFBX2GLTF : public EditorSceneFormatImporter {
GDCLASS(EditorSceneFormatImporterFBX2GLTF, EditorSceneFormatImporter);

public:
virtual uint32_t get_import_flags() const override;
Expand All @@ -57,4 +56,4 @@ class EditorSceneFormatImporterFBX : public EditorSceneFormatImporter {

#endif // TOOLS_ENABLED

#endif // EDITOR_SCENE_IMPORTER_FBX_H
#endif // EDITOR_SCENE_IMPORTER_FBX2GLTF_H
11 changes: 6 additions & 5 deletions modules/fbx/editor/editor_scene_importer_ufbx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@

#ifdef TOOLS_ENABLED

#include "modules/fbx/fbx_document.h"
#include "modules/gltf/editor/editor_scene_importer_fbx.h"
#include "../fbx_document.h"
#include "editor_scene_importer_fbx2gltf.h"

#include "core/config/project_settings.h"

Expand All @@ -48,8 +48,9 @@ void EditorSceneFormatImporterUFBX::get_extensions(List<String> *r_extensions) c
Node *EditorSceneFormatImporterUFBX::import_scene(const String &p_path, uint32_t p_flags,
const HashMap<StringName, Variant> &p_options,
List<String> *r_missing_deps, Error *r_err) {
if (p_options.has("fbx/importer") && int(p_options["fbx/importer"]) == FBX_IMPORTER_FBX2GLTF) {
Ref<EditorSceneFormatImporterFBX> fbx2gltf_importer;
// FIXME: Hack to work around GH-86309.
if (p_options.has("fbx/importer") && int(p_options["fbx/importer"]) == FBX_IMPORTER_FBX2GLTF && GLOBAL_GET("filesystem/import/fbx2gltf/enabled")) {
Ref<EditorSceneFormatImporterFBX2GLTF> fbx2gltf_importer;
fbx2gltf_importer.instantiate();
Node *scene = fbx2gltf_importer->import_scene(p_path, p_flags, p_options, r_missing_deps, r_err);
if (r_err && *r_err == OK) {
Expand Down Expand Up @@ -97,7 +98,7 @@ Variant EditorSceneFormatImporterUFBX::get_option_visibility(const String &p_pat

void EditorSceneFormatImporterUFBX::get_import_options(const String &p_path,
List<ResourceImporter::ImportOption> *r_options) {
r_options->push_back(ResourceImporterScene::ImportOption(PropertyInfo(Variant::INT, "fbx/importer", PROPERTY_HINT_ENUM, "ufbx,fbx2glTF"), FBX_IMPORTER_UFBX));
r_options->push_back(ResourceImporterScene::ImportOption(PropertyInfo(Variant::INT, "fbx/importer", PROPERTY_HINT_ENUM, "ufbx,FBX2glTF"), FBX_IMPORTER_UFBX));
r_options->push_back(ResourceImporterScene::ImportOption(PropertyInfo(Variant::BOOL, "fbx/allow_geometry_helper_nodes"), false));
r_options->push_back(ResourceImporterScene::ImportOption(PropertyInfo(Variant::INT, "fbx/embedded_image_handling", PROPERTY_HINT_ENUM, "Discard All Textures,Extract Textures,Embed as Basis Universal,Embed as Uncompressed", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), FBXState::HANDLE_BINARY_EXTRACT_TEXTURES));
}
Expand Down
1 change: 0 additions & 1 deletion modules/fbx/editor/editor_scene_importer_ufbx.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@

#ifdef TOOLS_ENABLED

#include "editor/editor_file_system.h"
#include "editor/import/3d/resource_importer_scene.h"

class Animation;
Expand Down
10 changes: 5 additions & 5 deletions modules/fbx/fbx_document.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,6 @@
#include "core/io/file_access_memory.h"
#include "core/io/image.h"
#include "core/math/color.h"
#include "modules/gltf/extensions/gltf_light.h"
#include "modules/gltf/gltf_defines.h"
#include "modules/gltf/gltf_state.h"
#include "modules/gltf/structures/gltf_animation.h"
#include "modules/gltf/structures/gltf_camera.h"
#include "scene/3d/bone_attachment_3d.h"
#include "scene/3d/camera_3d.h"
#include "scene/3d/importer_mesh_instance_3d.h"
Expand All @@ -51,6 +46,11 @@
#include "scene/resources/portable_compressed_texture.h"
#include "scene/resources/surface_tool.h"

#include "modules/gltf/extensions/gltf_light.h"
#include "modules/gltf/gltf_defines.h"
#include "modules/gltf/structures/gltf_animation.h"
#include "modules/gltf/structures/gltf_camera.h"

#ifdef TOOLS_ENABLED
#include "editor/editor_file_system.h"
#endif
Expand Down
7 changes: 4 additions & 3 deletions modules/fbx/fbx_document.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,12 @@
#ifndef FBX_DOCUMENT_H
#define FBX_DOCUMENT_H

#include "modules/fbx/fbx_state.h"
#include "fbx_state.h"

#include "modules/gltf/gltf_defines.h"
#include "scene/resources/model_document_3d.h"
#include "modules/gltf/model_document_3d.h"

#include "thirdparty/ufbx/ufbx.h"
#include <ufbx.h>

class FBXDocument : public ModelDocument3D {
GDCLASS(FBXDocument, ModelDocument3D);
Expand Down
3 changes: 0 additions & 3 deletions modules/fbx/fbx_state.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,6 @@

#include "fbx_state.h"

#include "modules/gltf/gltf_template_convert.h"
#include "modules/gltf/structures/gltf_animation.h"

void FBXState::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_allow_geometry_helper_nodes"), &FBXState::get_root_nodes);
ClassDB::bind_method(D_METHOD("set_allow_geometry_helper_nodes", "allow"), &FBXState::set_root_nodes);
Expand Down
6 changes: 1 addition & 5 deletions modules/fbx/fbx_state.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,11 @@

#include "modules/gltf/gltf_defines.h"
#include "modules/gltf/gltf_state.h"
#include "modules/gltf/structures/gltf_animation.h"
#include "modules/gltf/structures/gltf_mesh.h"
#include "modules/gltf/structures/gltf_node.h"
#include "modules/gltf/structures/gltf_skeleton.h"
#include "modules/gltf/structures/gltf_skin.h"
#include "modules/gltf/structures/gltf_texture.h"
#include "scene/3d/importer_mesh_instance_3d.h"

#include "thirdparty/ufbx/ufbx.h"
#include <ufbx.h>

class FBXState : public GLTFState {
GDCLASS(FBXState, GLTFState);
Expand Down
Loading

0 comments on commit d223e45

Please sign in to comment.