I’m sure to get flamed for this one. It is a fairly simple idea but it is difficult to explain the advantages simply. In a nutshell I’d like to associate the Blender executable with new file extensions that represent different types of resources.
Right now you can launch a “.blend” file and your operating system will launch a new Blender executable with that file as a parameter. “Blend” files can obviously contain every type of resource that we ever use, but it is a “generic” file format in that we don’t know what it contains until a human opens it up and takes a look inside. The file does not communicate its intention.
I’m proposing we use “.blend” files as a container for SPECIFIC resource types, but save them with a different file extension when we do so. The following idea works with almost any type of resource inside a blend file, including objects, materials, UI preferences, etc. Let’s just use materials as an example. In this case lets assume we save materials with an extension of “.bmat”.
So you could literally take an existing file, “test.blend” for example, and rename it so that it is “test.bmat”. Nothing will have changed except that the “intention” of the file is now communicated. Instead of a generic file it now exists with a very specific purpose: as a container to hold the first material in the file. There might be other types of resources in it, but it is only the material that we need it for.
So how does this change anything?
You can now have an “open” icon right inside the materials editor panel. With one click it brings up the file browser set to filter for files with that extension. Select one and it assigns the material - you are done with one click. Internally it would be no different than appending from an existing file, browsing to the first material, then linking to that data block for the selected material. But it does so without you having to know about all those internal details. Material “save” would be a similar one-click operation.
File Execution
Right now if you launch a “blend” file your operating system will launch the Blender executable with that file as a parameter. If you have a copy of Blender already running, then you will get a second copy in memory, which is the expected behavior.
But for these proposed single-resource files, I would give them a different behavior. Launch a “bmat” file and your operating system will again launch a new copy of Blender with that file as a parameter. However, before showing you its UI the new copy of Blender will send a signal to the other running copies (using shared memory, named pipes, etc). If there are no others running then it continues to launch as usual and displays the UI. But if there ARE other running copies of Blender it sends a signal to them with the path to the bmat file and then the new copy EXITS. The running copies of Blender load the material instead, without you getting a new Blender instance.
Results
We would have a way to easily share blender materials between users that requires very little experience.
If you have a folder containing all of your materials you can now just double-click on any and they are instantly imported into your currently open project.
This would allow you to click on a “bmat” file on a web page and have that material instantly added to your running project without any additional work.
Since the “intention” of the file is known there is no reason why you can’t drag a “bmat” file from your file system directly onto a mesh as well.