Status: Milestone 1 is ready to go.
An asset, in Blender, can be both models/meshes, armatures, materials, textures, rigs, scripts, node groups, Collections and so on.
The Asset Manager then, at a high level, is about adding the ability to manage and browsing data, and also a platform for anyone to extend and write their own managers. It's both an API and a set of concrete, built-in asset managers.
This is in the same way that the Blender Render API is simply an API, but we also include some built-in renderers with Blender (Cycles and Eevee)
The built-in asset managers will mainly serve two use-cases:
- As a way to store, browse and load user-created content for use as a starting point for new projects and scenes
- As a way to manage inter-linked projects, such as movies with linked characters, sets and prop
- Techical design overview: T46049: Assets Integration in Blender
- User Interface design T54642: Asset Project: User Interface
Missing: Technical design of how Amber will store data & metadata
Engineer plan: ?
Milestone 1 - Basic, local Asset Manager
This will build on the work already done for the asset manager, but makes some design changes.
- Datablock Metadata
- Is asset, description, tags, author and preview image
- Make/edit asset popup from outliner, datablock browsers
- Preview render is immediately created along with initial asset metadata
- Option to show only assets in link/append file browser
- Asset Browser
- New editor, internally based on file browser
- Display contents of local folder assets
- Drag & drop asset into scene, or click Append Asset button
- Add/remove asset to/from local folder using drag & drop
- Add asset to local folder from outliner, datablock browsers
- Search and filter by tag
- Metadata display and editing
- Right click asset to open containing folder (and edit in new blender instance?)
- Library Asset Storage
- Repository is folder containing .blend files (with one or more assets) and other file types like images
- Bundled Library asset repository as part of Blender install
- User Library assets repository
- By default, drag & dropping an asset to this library saves the asset in an individual .blend file or other file format
- Manually saving .blend files in folder is also possible, with multiple assets in one .blend if desired
- This folder will be shared across all installed Blender versions (unlike e.g. add-ons which are per version)
- Preferences: additional user defined asset folders
- Indexing for performance
- Cache metadata and preview images for fast opening asset browser
- Index updated in background when opening asset browser (compare file dates..)
- Is purely a cache and can be safely deleted
- Nested folders: asset browser shows nested files as flat list (maybe folder name as tag)
- Datablock dependencies
- Indirect datablocks get appended (no auto dedup to start)
- External files can use pack, append, then unpack (into e.g. textures/ folder next to .blend)
Milestone ?: Online Repository
Here we want to be able to append assets from an online repository like the Blender Cloud, BlenderKit and similar.
There would be a Python API to register custom asset repositories as part of add-ons. The main operations would be to provide a list of assets and metadata, provide .blend with an asset to append/link into the scene, and functions to add/remove/update an asset.
Milestone ?: Usability
Once the asset manager is working for the basics and the UI can do its job, we can start to make things nice. This includes better handling of thumbnails, re-configuring the ID browser to allow for asset browsing, a nice UI widget for managing tags and tag-based filtering.
A key part of making the UX nice, is to make it effortless to drag assets into the scene. When dragging in objects & meshes, they should be able to snap to surfaces. When dragging in materials, the underlying target objects should highlight on rollover. You should be able to add multiple assets at a time.
Milestone ?: Collection Variations
Not strictly part of the asset manager since this would be a core feature of Blender also usable without the asset manager. We would like to support variations for all datablock types, but the first step could be collections (it's effectively like automatically toggling visibility on subcollections to show only one).
Once this is in the place, the asset manager will need to be modified to understand variations.
Milestone ?: Project Repositories
Up to this point the asset manager will handle only the use case of appending files from a local or online repository. The next step would be making it works also for projects.
- The root project directory would contain a .blender_project file indicating that it is a project (similar to e.g. .git)
- When opening a .blend file within the project folder, Blender will automatically know which project it is part of
- Folder structure, file names and file saving are left to the user. The asset browser will not add or remove .blend files in the project. That's all done using File > Save and file browsers as usual.
- The assert browser will have a "Project" repository that can be chosen, which will show all assets within the project
- The user will have to mark relevant datablocks as assets in each .blend file in the project so it shows up in the asset browser.
- Assets can be linked between files within the same project. This is different from other repositories, where only append is possible. Linking between projects or to other repositories should not be possible, a project must be self-contained and not link to any .blend file outside of it.
- The project folder would be indexed exactly like other asset folders.
The idea here is that we don't want to make many assumptions about how users might structure their project. It should be possible to simply add or remove files, reorganize project directories, and the asset browser should keep working. It will merely provide a view on the existing project structure, and functions to create links to other assets in the project. It will not introduce an alternative linking system as an earlier iteration of the asset manager design did.
This system does not preclude a studio from making an add-on that takes more control over file saving, version control, partial repository checkouts and so on. Such an add-on would likely need to integrate in various places in the Blender user interface, one of which can be the asset browser. For example it might include a custom asset repository to browse assets that are not on the artist's computer, and right before the user links an asset into the scene, download the corresponding .blend file.
But for most projects that are not e.g. feature films, the built-in project repository and automatic indexing system should already be quite powerful.
Notes: The original work has been carried on in the following branches.