AssetBundle Graph Tool 1.0 Release

We are excited to bring you the first release of AssetBundle Graph Tool!
While the tool is still in the prototype phase, we would be delighted if you grab a copy, test with your project and give us your feedback!

DOWNLOAD

  • You can clone from our project website (BitBucket) or grab unitypackage. There are links to quickstart guide and FAQ on the later part of this post.

WARNING:
PLEASE ALWAYS MAKE A BACKUP of your project before testing this tool.

Which version of Unity does this tool support?

The tool supports Unity 5.4.1f1 and above.

What does the tool do?

AssetBundle Graph Tool is a visual toolset lets you configure and create Unity’s AssetBundles easily, without much coding. It is aimed to be an intuitive and yet effective tool for real production for both small and large teams.

What problems does this tool solve?

We designed AssetBundle Graph Tool to be:

  • Easy to learn and flexible. The tool is simple enough to learn, but supports the complexity of real production needs.
  • A tool to solve AssetBundle use cases that do not work with scene structures and dependencies, such as character avatars, card illustrations and virtual store items.
  • A tool to provide AssetBundle pipeline to let artists and game designers free from AssetBundle configurations.

You can read more about this tool in our blogpost.

So, is this going to be how to build AssetBundles in future?

Well, yes, but only one of the ways. Asset Bundle team knows that some of you want more low-level, granular controls, and some of you want tools that are more visual and intuitive. We would like to improve the Asset Bundle workflow in both ways. We are planning to provide more Asset Bundles tools, and even an improved API for better control and performance. When they come to the point we can share with you, they will arrive as experimental features just like others.

Resources
Quick Start Guide

Example Projects

Issue Tracker
Please tell us if you found bugs/issues here.

Also, if you have questions, thoughts and feedback please reply this thread to post.

3 Likes

Hey. That’s nice.
Will other issues with AB workflow and usage be getting some attention too? There were this great thread where we gave some feedback about improvements.

Improving the workflow for building the bundles it definitely nice and helps improving to build the bundles with the correct options. Still I think that many devs won’t get around an automated system to build many different assetbundles, instead of single huge ABs.

One question I haven’t found an answer for the tool is, how are dependencies between the different assetbundles handled? Like sharing textures between different assetbundles.

The BitBucket Wiki is either private or doesn’t exist - It is inaccessible.

P.S. I really wish you guys started using GitHub instead. :confused:

1 Like

Feature request: zoom option

1 Like

Thank you for pointing this out. It is public now.

Thank you for the feedback. I will add zoom option as requested feature.

Same goes for the Issue Tracker.

Issues are public as well now - sorry I am not used to bitbucket just yet :face_with_spiral_eyes:. We might move the project to github sometimes…

1 Like

Assetbundle team is taking these feedbacks seriously and we are definitely having big attentions to other issues as well.

Dependencies between the different assetbundles are collected automatically just like when you use standard assetbundle tool. So if you have texture T and 2 materials M1 and M2 where both M1 and M2 references texture T, and creating following assetbundles:
M1.bundle : have M1
M2.bundle : have M2
T.bundle : have T

The built assetbundle will have dependency set between M1->T and M2->T.

Another feature I am looking forward to add is to find and automatically create asset bundle(s) which keeps shared assets among incoming assetbundle(s).

2 Likes

@hiroki-unity Yes, sorry, you’re right. Dependencies are automatically set. Was confused, but since 5.x it is done automatically.

Our main problem with dependencies is mainly versioning related: If we update an dependency asset, then we need to update the version of other assets too, which use the referenced asset. The way we can do that is either manually (urgh…) or automatically by checking the hash value generated by the assetbundle build process. Now we found out that if we change textures (for an UI atlas for example), referencing prefabs don’t change the hash when generating the AB. Bug?

1 Like

Hi,

Currently, I export every individual asset as a separate asset bundle, and use the dependency information generated by Unity to load dependency asset bundles at runtime. I wrote a script that goes and modifies all the .manifest files to give each asset it own asset bundle name. This seems to work well, but I was wondering what the Asset Bundle team at Unity considers this a sane approach. For example, is there a large overhead to loading 5 asset bundles with 1 asset each versus 1 asset bundle with 5 assets?

I use uncompressed asset bundles, so I’m hoping there’s little/no overhead.

Thanks,
Josh

I’ve been giving it a try, and though it takes a bit of getting your head around, it’s a pretty cool tool! However, I’ve run into a bunch of issues.

Issue: If you have a lot of assets, creating a loader node can take upwards of several minutes (took me about 5 minutes). In my project, it caused unity to allocate just over 20gb of memory, making my system unstable after reaching 100% memory usage. Eventually it finished creating the loader node though. Once I limit the scope of the loader node it’s not so bad though…

2831707--206348--upload_2016-10-25_15-17-47.png

A more minor issue: There’s no way to work around asset bundle size limits. A few hundred mb of textures can expand to beyond the asset bundle size limit (2gb I think) when set to true color, even if the size after compressionis small. In order to work around this limit, in my current build scripts I have to split bundles based on their uncompressed size. I don’t see no easy way to work around this issue though with this system.

Question: On one project, I have a list of assets I need in each bundle, and build bundles based on these lists. Would a custom filter be the best idea, or is there way to create a custom loader?

1 Like

Thank you for reporting this. Can you share me how many assets (and overall sizes) do you have for building assetbundles? I am currently working on improving performance for large scale projects.

Thank you for your feedback on this one too. I think I can improve BundleConfig to check the incoming size of assets and auto-create additional asset bundle (and dependency) to weave asset bundle limit.

I think the answer depends on how you create these lists and manages it. If the list is manually updated and your plan is to migrate to the tool completely then I would create several Loaders and Filters to replace the list. If the list is managed by other systems such as external DB or tools, then customizing loader which takes the list of assets would be the way to go (so that lack of assets can be detected)

In current software design you will have to modify Loader code directly to to add these features. This is a good indication that all nodes should be more flexible to customize behavior.

Feature request: option for different graphs e.g. we have specific files that we can save the graphs to, so instead of having a massive graph mess on the screen, we can have different graphs we can switch between. Clicking build would, of course, build them all

EDIT:
After a bit of playing around, I notice you can have multiple loaders, which kinda negates the point of my request. Still, might be useful to some :slight_smile:

EDIT 2:
After even more playing around, I’ve got a system that just parses the different assets into Meshes, Materials, Textures, Shaders etc. and puts them into their respective asset bundles. This is the easiest and (dare I say) most fun I’ve ever had with AssetBundles. I can put the aspirin back in the cupboard! :smile:

Issue/Feature Request: Also, I notice that there are cached copies created in Assets\AssetBundleGraph\Cache\AssetBundles[GUID][PlatformName]

Is this necessary? I think they should be in a temporary location instead of in the Assets folder. From someone who uses version control, the ~80mb files would be uploaded and taking up unnecessary space. Otherwise, perhaps deleting them after exporting would be more appropriate.

Feature Request: Have a scrollbar on the vertical axis too, with my setup the FilterNode is really tall.

EDIT: If I create a node that goes below the window rect, then it shows the scrollbar but if the bounds of a node go outside there is no scrollbar on the vertical axis.

Feature Request: When the asset bundle is finished building, could you give an option/make the export location open in Explorer/Finder/[Insert File Browser Here], similar to the way that the build window opens after doing a build?

Matt

1 Like


Well this is my finalised graph. It’s pretty simple, no PrefabBuilder (could someone explain what this is, as I don’t really get the purpose of it), grouping or modifier nodes. It takes assets from certain paths, feeds them through the filter, outputting texture, mesh, material, audio etc. bundles. Then it builds them to one final builder and exports them. AssetBundleGraph is a really beautifully made tool and I love it. Should be a default Window inside Unity. :smile:

However, I feel more information on the different nodes and more examples on how to use the nodes. Maybe a new project, maybe with the assets from the Viking Village or Blacksmith, as opposed to just re-designing the AssetBundle demo with Tanks. Just curious how the other nodes would play their part with other assets. It would also be a good idea to test scalability and robustness with larger assets. :wink:

Anyway, thanks for releasing this @hiroki-unity - it’s definitely a step towards making Asset Bundles more user-friendly and easier to access. :slight_smile:

  • Matt

EDIT: Fixed my crappy writing :face_with_spiral_eyes:

2 Likes

Thank you for releasing the project as open source. It was very easy to adapt your system to my own graphing tool, RelationsInspector. It can already act as a basic viewer for the build graph:

2832939--206514--AssetBundleGraph.gif
Here’s the add-in’s source code.

2 Likes

I’ve found the cause of my massive memory problem. The TypeUtility class is making a call to AssetDatabase.LoadMainAssetAtPath(assetPath) in order to identify the type of asset it is… this means making a new loader node is going to effectively load every asset in your project into memory (because the default path is your entire assets directory), and again every time the load option is triggered. Which seems to be pretty often from the looks of things, including every time you type a letter in the node name or path. I threw in a dummy bit of code that identified the asset type based on extension and that works considerably better, to the point where I’d be satisfied using it regularly (4-5 second processing instead this, which doesn’t include the 30s of garbage collection after). I don’t know if there’s an easy way to get details of an asset without loading it like that though…

Best would be a choice to not count assets at all before hand, since that would obviously remove all processing time, at the expense of confusing mistakes. :stuck_out_tongue:

1 Like

Thank you for the feedback. I am aware of this issue and currently working on it to get better scalability with release 1.1.

1 Like

Feature Request
Hey @hiroki-unity as the assets aren’t being set as being in asset bundles, could the tool automatically set the asset bundle names ON the asset? Otherwise, if the assets will be included in the final build.
2833302--206541--AssetBundleName.png
EDIT:
The code for this goes something like

AssetImporter importer = AssetImporter.GetAtPath(assetPath);
importer.assetBundleName = name;

Feature Request
Could you add in a snapping-feature, for example, if I hold down CTRL it will snap to the nearest 10 on X and Y axis? Just so I can keep my graphs lined up :slight_smile:

1 Like

Is there a way to have a node that excludes all output in a specific platform build? My asset strategy in webgl is quite different from my desktop platform strategy, so it would be nice if you could have blocking nodes based on platform.

1 Like