Skip to content

Rework of 3D asset import workflow to improve usability #8756

@reduz

Description

@reduz

Describe the project you are working on

Godot

Describe the problem or limitation you are having in your project

There are several problems users have with the 3D asset import workflow:

  • Inheriting lets you edit the asset, but you need a separate file instead of pushing changes back. Several users complain that they dislike this.
  • Editing the inherited asset has limitations:
    • Materials can't really be replaced there (at much overriden). This is not ideal anyway as it would be better if its done in the import dialog, but many times this is the easiest workflow, specially if you simply want to do something like replace a material that comes with the file and use a visual shader based one.
    • Imported animations can't be edited. To do this, you have to save them to files and Godot will do its best to keep changes you make. This workflow is quite awkward and unintuitive.
    • Imported animation libraries can't be edited.

All these make the general experience of managing 3D assets in Godot significantly more awkward than it should be. Large part of the workflow has improved with the advanced import dialog in Godot 4.0, but this is still far from perfect.

Describe the feature / enhancement and how it helps to overcome the problem or limitation

The idea here is to do some changes to the import workflow based on a lot of user feedback . This should hoperfully make the asset import workflow perfect. It should behave as a new user expects it should and be as intuitive as it can be.

This consists of 3 fundamental changes:

  • Materials going to nodes by default instead of mesh, more similar to how Unity works.
  • Animations can be edited directly in the edited scene without having to save them to external files.
  • Opening FBX/GLTF files should "just work" and you can save them back with your changes.

Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams

Moving imported materials to MeshInstance node

As mentioned before, materials are placed by default on meshes after import:

image

But this has the problem that, in an inherited scene, you can't really override or edit this in any way (because it means you need to also duplicate the mesh and make it local to make changes). It is possible to override in the node, but for users this is confusing because if they look there, they don't see materials.

This change means that, by default, Godot will move those materials to the node when importing, so it will look like this to users:

image

Trying to edit it will not work, so users will be shown with this dialog:

image

Making it more straightforward to edit the existing material or replace it by another one if wanted.

As always, remember, this will be an import setting you can change to move back materials to meshes if you desire.

Note: It may be desired to make this feature exist but be optional, as a few people mentioned they prefer to edit materials in the advanced import dialog instead, so they remain on the meshes and the meshes can be used independently with this proposal.

Add Animation / AnimationLibrary extending

Currently, when you intend to edit animations that came from an imported asset, you are presented with this warning that pops up a dialog:

image

This explains to the user how to make the animation editable. In general, this is terrible usability because more often than not users are dealing with dozens or even hundreds of animations, and saving everything to files can get very messy, plus the workflow is not intuitive.

The idea here is to allow the user to extend those animations. This will change the dialog to look like this:

image

The extended animation means that the Animation resource has a new field "inherits : Animation" which is base animation. The extended animation basically contains all the same tracks as the base one, and the tracks added to it are extra tracks. This is done transparently inside Animation, so it requires no extra changes to the rest of the engine.

Likewise, users will be able to add new tracks, but the original tracks will remain read-only.

The same goes to AnimationLibrary, if the user attempts to edit it, an extended one will be created (which references the original one):

image

Direct saves to imported assets

Currently, it is not possible to open an imported asset directly. At much it can be inherited and saved to another file.

image

Users have complained again and again that they are not happy with this workflow, they want to edit the imported asset, save the changes, and expect Godot will keep those changes.

The idea here is that from now on, trying to open the asset will create an inherited scene by default, no questions asked.
Saving this scene should also "just work". What will happen in practice is that Godot will save the inherited scene to something like: asset.fbx.edit. This is a .tscn basically containing the metadata, but saved with this extension and hidden from the filesystem dock.

The main issue with this is that currently, when you double-click a fbx/gltf, it opens the advanced import dialog, which is really handy. To not lose this easy access, a button will be added that you can click to pop up the advanced import dialog:

image

And that's it. This should hopefully make the 3D imported asset experience in Godot as intuitive as possible. These changes do not require breaking compatibility, as these existing projects will continue working normally.

If this enhancement will not be used often, can it be worked around with a few lines of script?

N/A

Is there a reason why this should be core and not an add-on in the asset library?

N/A

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions