godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
90.46k stars 21.07k forks source link

Cannot edit any material properties in new inherited scene #72942

Open mamin opened 1 year ago

mamin commented 1 year ago

Godot version

4.0 RC 1

System information

Linux

Issue description

Cannot edit material properties in new inherited scene in Godot 4 RC 1. I expect to be able to edit the material properties. Using Godot 3.5.1 this works.

Steps to reproduce

Export a glb file from blender. Import into Godot 4.0. Create new inherited scene. Try editing roughness or any material property in the new inherited scene, you will find none of them can be edited.

Minimal reproduction project

GlbNotEditable.zip

Flavelius commented 1 year ago

Not being able to edit the embedded material is not the issue (it's an issue in 3.5.1 if that this is possible there), as the material is not an editable instance, it's part of the imported file. The workaround/workflow is to open the advanced importer and from the 'Actions..' menu at the top chose 'Extract Materials'. This creates editable copies. But be aware that there are other usability issues (https://github.com/godotengine/godot/issues/72585) or bugs (https://github.com/godotengine/godot/issues/72587) that currently interfere with this normal workflow aswell though.

mamin commented 1 year ago

I disagree. The Godot editor itself says "create new inherited scene to edit this scene" or something like that. But then upon creating a new inherited scene it is actually not editable. What was the whole point of creating a new inherited scene if it is not going to be editable.

In 3.5.1 the scene materials are editable upon creating a new inherited scene. That is NOT a bug in Godot 3 as you are suggesting. That's the whole point of creating a new inherited scene and that's what the Godot editor itself prompts the user to do to be able to edit the scene. Godot 3 delivers on that promise, Godot 4 doesn't.

I think Godot 4 should reproduce the behavior in 3. For users migrating to Godot 4, they expect behavior parity with 3. By default Godot 4 should do whatever is necessary to make the materials editable. it shouldn't require the user to take extra steps to achieve feature parity with 3. Godot 4 should make things easier, not make them harder by adding more manual steps to achieve what worked automatically in 3.

Regardless of if this is "intentional" or not in Godot 4, for users migrating from 3 it is unexpected and people will be left wondering why isn't this working.

How are users expected to know they need to use the advanced importer and select a checkbox to get what the got automatically in Godot 3. Why not make that the default in Godot 4 and save them the headache?

mamin commented 1 year ago

Not being able to edit the embedded material is not the issue (it's an issue in 3.5.1 if that this is possible there), as the material is not an editable instance, it's part of the imported file. The workaround/workflow is to open the advanced importer and from the 'Actions..' menu at the top chose 'Extract Materials'. This creates editable copies. But be aware that there are other usability issues (#72585) or bugs (#72587) that currently interfere with this normal workflow aswell though.

I followed the instructions provided:

  1. From Actions select "Extract Materials"
  2. Created a new inherited scene after re-importing.

In the new inherited scene I still cannot edit the any of the materials.

Flavelius commented 1 year ago

I just tried this in 3.5.1 and it works as technically expected (although as you said not desired for users), changes to materials inside embedded/builtin meshes is not persisted inside inherited scenes. Maybe the editor wrongly gave you the impression that it works because in 3.x meshes are imported as separate assets by default (atleast that's the default for me, but either way it's not about this being the default import setting, but enabled) in which case it will work (as they are separate assets and the changes are saved to those mesh resources; also, this is a 'misbehaviour' in 3.5.1 that it allows you to edit the materials in embedded/builtin meshes anyway, but those changes will not be persisted between editor restarts, it's a bit misleading, but this error-case is now fixed in 4.0 - it's what you're associating with a bug)

The same will and does work in 4.0 (just tested with rc1). There the advanced importer menu entry is just unfortunately named 'Set Mesh save Paths', where it's actually the same underlying functionality as 'Extract Materials'. It will extract the meshes to external resources which allows you to persist changes to their materials aswell, and even allow edits in inherited scenes.

mamin commented 1 year ago

By selecting "Set Mesh save paths", I am now able to edit the materials in the new inherited scene. Thank you for your help with that.

I'm just a user of Godot, so if it's a misbehavior or not in Godot 3.5, I came to rely on it. As a user, I don't really care about the internal details and what's right or wrong in technical sense. I care about usability.

And in the usability sense, Godot 4 has made this more complicated. How will users know they need to do these extra steps? This is a fundamental change in the user experience when importing assets.

I think it should be the default behavior otherwise many people will go to forums/discord or even end up filing a bug report to github like did.

I asked for help on this in the Godot discord, and I also searched the internet for solution to this problem regarding Godot4 and it seems like there are no good answers and other people do have this problem.

There is a huge communication gap about this change and it's a blocker really cause editing material properties in Godot after importing is almost always required to get good looking results.