godotengine / godot-proposals

Godot Improvement Proposals (GIPs)
MIT License
1.17k stars 98 forks source link

Allow mass material extraction or selection of "use external material" #7858

Open Pardy4 opened 1 year ago

Pardy4 commented 1 year ago

Describe the project you are working on

Hex based tactics battle game

Describe the problem or limitation you are having in your project

There is no way to quickly perform when importing "advanced import settings > actions... > extract materials > select folder > extract" on multiple imported resources. There is also no option to use an external material.

An example:

I am using the Kenney hexagon kit which contains 63 different models. If you wanted to extract the materials so that you can edit them all and have them all change together. All 3 of the below tiles use the "grass" material. For the plain "grass" I have gone actions>extract materials and saved them in a materials folder. I have then changed the albedo colour to tone the grass a more realistic colour. The other two tiles "building_village" and "building_wall" have not changed material. image

In the multiple import menu, there is no option to extract materials or use external. image

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

Two possibilities

  1. Add the actions button when selecting multiple resources on the import tab as it appears for selecting a single resource, and introduce functionality. This would allow actions to be done to all selected resources, meaning a manual action doesnt have to be done for every resource.

  2. Add an import option for a path to look for external materials. Material names would have to match. A second sub-option to generate material if not found.

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

image

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

There could be a plugin to do this, but it feels like it should be a core part of the import process.

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

This applies to every resource imported with materials

Lightsockie commented 6 months ago

This is so desperately needed tbh. It's very painful to have to fight a _post_import tool script to do this when the option is right there, just with tauntingly poor usability. It kinda feels like it would be more efficient to just write a bash script to move my mouse through the GUI at this point lol

Calinou commented 6 months ago

Can you check if https://github.com/godotengine/godot/pull/86430 addresses this?

Lightsockie commented 6 months ago

@calinou It doesn't look like its the same problem. That is within a single resources reimport popup, whereas this ticket is functionally asking to have the ability to do bulk/batch actions that the single-resource reimport tool can do, but across many imported resources at once. We're an abstraction layer above it

ChildLearningClub commented 5 months ago

Until this can be implemented and for anyone that might like the import script Gunmatazar created a post on Reddit with the following code to do just this:

@tool
extends EditorScenePostImport

var material = preload("res://Assets/Terrain/texture/BaseMaterial.tres")

func _post_import(scene):
    scene.get_children()[0].set_surface_override_material(0, material)
    return scene