Page MenuHome

Asset Manager “Basics”
Confirmed, NormalPublicTO DO

Tokens
"Like" token, awarded by Constantina32."Burninate" token, awarded by Goldwaters."Love" token, awarded by brilliant_ape."100" token, awarded by anonym."Love" token, awarded by Shimoon."Love" token, awarded by einsteinchen."Like" token, awarded by Maged_afra."Love" token, awarded by Bit."Love" token, awarded by aditiapratama."Love" token, awarded by nunoconceicao."Love" token, awarded by xdanic."Love" token, awarded by ReinhardK."Like" token, awarded by Fracture128."Love" token, awarded by symstract."Like" token, awarded by Ztreem."Like" token, awarded by Frozen_Death_Knight."Love" token, awarded by CobraA."Like" token, awarded by MetinSeven."Love" token, awarded by andruxa696."Love" token, awarded by Alrob."Love" token, awarded by Tetone."Love" token, awarded by xrg."Burninate" token, awarded by billreynish.
Assigned To
None
Authored By

Description

Status: Milestone 1 is ready to go.


Team

Commissioner: @Ton Roosendaal (ton)
Project leader: @Julian Eisel (Severin)
Project members: @William Reynish (billreynish)

Description

Big picture:
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)

Use cases:
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

Design:

Missing: Technical design of how Amber will store data & metadata

Engineer plan: ?

Work 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?)
  • Asset Storage
    • Individual .blend file per asset in local folders (support loading multiple in a .blend too)
    • Bundled assets folders as part of Blender install
    • User assets folder (similar place as e.g. add-ons, but not 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.


Relevant links:

Event Timeline

Amazing! :)
I would strongly suggest few thought:

  1. have as a rule that library is divided over elements in each file. I've done Simple Asset Manager in os directories, cause the basic ".blend file as library" was not working in the "version control times" and updating my library online was hard with one big file as a library.
  2. Possiblility of os directory structure, with own categories etc.
  3. Have posibility to use library as a multitool importer. (it would recognize active import options/addons), and could handle other formats (images, obj, fbx, etc). As I tried to do that in SAM: "one button for all"
  4. FileBrowser menu should go minimalistic with almost all the ui hidden. The less buttons, the less clutter, and more elements to drag to scene. (preset setting somwhere in hidden sidebar).

Don't know if it right place for such comments, but its somwhere in between ui and implementation.

Campbell Barton (campbellbarton) changed the task status from Needs Triage to Confirmed.Wed, Feb 12, 8:24 AM