Out of the Box: Online Assets Libraries - day 3
Attendees:
- Dalai Felinto
- Francesco Siddi
- Pablo Vazquez
We continued our discussion about the design aspects of supporting remote asset libraries and the overall “out of the box” content creation experience. This is a potential project for Q4-2024.
The focus today was to explore a simpler design where each remote asset library is independent (i.e., each having its own repository). The session concluded with a proposal for deliverables (milestones).
- 1st workshop day: meeting minutes.
- 2nd workshop day: meeting minutes.
- 3rd workshop day: today.
Asset Library = Repository
To simplify the design, each asset library is its own repository. By default Blender comes with one asset library pre-installed (not pre-downloaded, just pre-configured similar to the Blender Extensions repository in Blender 4.2 LTS). The name of the asset library is still pending, for now we are calling it Online Essentials Assets.
Name: Online Essential Assets
URL: https://extensions.blender.org/api/v1/assets/essentials/
Tagline: Assets for your everyday needs.
Remote Asset Library properties:
- Estimated preview size (index)
- Estimated total download size
- Advanced:
- Cache path
- Cache limit
The moment a new remote asset library is enabled (and online access is available), Blender could start fetching the asset library index (including the thumbnails).
Download and cache
By default asset libraries are stored in the user settings. Additionally users can choose where a remote asset library should store the downloaded data. The data stored is the index as well the individually downloaded assets:
- Asset Library Index
- /essentials/index.json (meta-data)
- /essentials/cache/preview_images/
- Downloaded Assets
- /essentials/assets/
It needs an easy way to see how much space it is using currently, and to clear cache per library.
Variants, representation, versions
A common topic for asset systems is variants, representations and versions for each individual assets. Some examples of the different terms:
Variants:
- New, old, damaged
- Dry, wet
- Red, blue
Representation (per variant):
- 1K, 2K, 4K, 8K, etc.
- LOD 0, LOD 1, etc.
Version:
- The state of variants and representation. (v1.0.0, v1.0.1, etc)
API Example
{
"version": "v1",
"asset_size" : 100000000000000,
"index_size" : 5000000,
"data" : [
{
"id" : "sintel",
"version" : 1,
"available_versions" : 6,
"type": "Collection",
"blender_version_min": "4.0.0",
"metadata" : {
"catalog" : "3D Model",
"tags" : ["character", "medieval"],
"description" : "",
"license" : "SPDX-CC0-1.0",
"copyright" : "Blender Studio",
}
"variants" : [
{
"name" : "Damaged",
"previews" : "/sintel/1/damaged/1k_preview.jpg",
"dimensions" : [ 1.00, 0.60, 1.60],
"representations" : [
{
"type" : "LOD:LOD-0",
"polygon_count": 30000,
"archive_url" : "/sintel/1/damaged/LOD-0.blend",
"archive_size" : 100000,
"archive_hash" : "feb18ebd19309663dda",
},
{"type": "LOD:LOD-1", ...},
]
},
{"name" : "Wet", ...}
]}]}
We could introduce a LOD 10 variant for 3D models to be used as native proxy objects (and as a visualization option within Blender).
Technical challenges
- To be able to retrieve thumbnails in an efficient way, they will need to be external to the asset .blend.
Milestones
There are two approaches to this project. On one hand, the focus can be on the remote asset library right away. On the other hand, there are many improvements to the usability of asset usage and management that are necessary for the current system, and that also apply to remote asset libraries. If a local library is slow to load and browse, or cumbersome to search, it gets even worse for online libraries. We are going with the latter approach.
The proposed milestones are such that when the moment comes that we add online functionality, the overall experience is already complete. In particular in regards to organizing and re-using assets.
Improving Asset experience milestones:
- Asset de-duplication: improve append & re-use.
- Bookmarks
- Tags
- Make it easy to add existing tags (similar to geometry nodes attributes).
- Allow users to add additional tags to assets from all asset library types.
- Allow users to remote tags from assets from all asset library types.
- Save tags “overrides” as part of user config.
- Advanced search syntax
- Expand the existing advanced search syntax (wildcard at the moment) to support smart filtering (e.g.,
name="Rex*" AND tag="Character,Low Poly"
) - Smart catalog (save search query as a “smart” catalog)
- Expand the existing advanced search syntax (wildcard at the moment) to support smart filtering (e.g.,
- Publishing
- Allow publishing of any asset types (similar to brush assets).
- “Duplicate as Asset” should support Current File as target.
- Unify asset and non-asset .blend (re: brush asset).
- Users can change meta-data of asset regardless of asset library.
- Support changing catalogs.
- It can be implemented either by atomic opening/saving .blend assets meta-datas OR like the tags overrides system (see miletones 2)/
- Needs mockup: Clarify the differences between “Mark as Asset” and publishing a new asset.
Online asset libraries milestones:
- Remote Asset Library (simple)
- Add option to add remote asset library (URL).
- A single-variant of the Human Base Mesh.
- At first, download the entire remote asset library once it is added.
- No thumbnails (show asset type icons).
- API implementation
- Make JSON by hand.
- We implement the entire API, but we only support 1 variant and 1 representation.
- Thumbnails
- Download all the thumbnails from the entire remote asset library once it is added.
- Remote Asset Library (advanced)
- Support downloading single assets.
- No longer having to download the entire repository (or even supporting this).
- New operators such as:
- Download Asset
- Save Asset to Local Library (requires Publishing)
- Cache and storage management
- Authorized access (for commercial/private remote asset libraries)
- Load the lowest LOD (requires Asset Representation)
- Online essentials asset library (temporary name)
- Extend the “Online Essentials” asset library with more content.
Undefined milestones:
- Asset representations
- Asset variations
- Non-datablocks assets
- Investigate support non-datablocks such as HDRI
- Support for Image textures
- Python hooks
Follow up
- Need mockups for:
- Clarify Mark as Asset vs Publish as new Assets
- Asset representation
- Bonus: Faceted tags advanced search