- Despite the occasional hiccup, the Unity Asset Store remains hugely beneficial
- Don’t judge assets on looks and features alone, optimization and performance is critical
- Profile your asset purchases early to confirm that performance is reasonable
- There is an opportunity for authors of performance-optimized assets to distinguish their products
I love the unity asset store. The assets I’ve purchased from the store have helped save serious development time and have provided immeasurable benefits toward the development of my game, Exception. I hate to think of life without ProBuilder. I can’t imagine what the game would look like without Glow11. I don’t want to live in a world without NGUI.
Yet, as much as I like the asset store, I’ve been tripped up by a few assets from talented, well meaning authors that failed to properly optimize their asset.
Recently I ran into problems with the limitations of Unity’s built-in trail renderer. Graphically, I was able to get the effect I needed, but the tool is severely limited in several ways. The biggest drawback is that it’s tricky to turn the trail renderer on and off without getting unwanted, residual trails.
This is produced with the default unity trail renderer. It looks fine but doesn’t include methods for clearing the trails.
Disabling and re-enabling the trailes without unwanted residual lines is challenging.
After wrestling with the built in trail renderer for a while I decided to see what the asset store had to offer. I found a reasonably priced asset which, according to the documentation, provided the functionality I needed.
So, I bought the asset and spent some time incorporating it into my project. The results looked great. It wasn’t until I pulled up the profiler to gauge the performance impact that things turned ugly.
It turns out the asset was using up around 1ms of cpu time (on a 4690 quad core desktop) and throwing off nearly 1k for garbage collection each frame. This performance cost was derived from five trail effects which weren’t even rendered on screen while the profiler was running.
This effect purchased from the Asset Store has a big impact on performance
The profiler image here is representative of average performance for rendering five trails which are offscreen.
The total impact as measured on a dekstop PC is roughly 1 full millisecond of cpu time and just over 1k allocated for garbage collection each frame.
In retrospect, I should have run one of the demo scenes in the profiler before investing time incorporating the asset. The performance-cost to visual-benefit ratio just doesn’t work for my purposes. It’s possible that my expectations are unrealistic. Clearly I don’t have the time or ability to code my own trail tool so I’m not trying to be critical of the author. It’s also possible that some developers will find this tradeoff reasonable.
Where I do see room for improvement is incorporating more performance information into the asset store. The current process for evaluating assets basically involves kicking around a demo in your browser and reading a few reviews. The only true way to evaluate an asset’s performance is to buy it and run a scene through the profiler.
One potential solution is to provide a high res video or screenshot of the asset’s demo scenes running with the profiler. This would give some understanding of the memory management and a rough idea of the performance. For authors with efficient assets, this could be a good marketing tool.
With a huge range of assets for game development, the Unity Asset Store represents a great opportunity for small developers to quickly aquire quality tools and art.
The current absence of performance information is offset by Unity’s perceived willingness to offer refunds when asset purchases don’t work out. I haven’t seen any griping from developers about getting ripped off on the store and I have seen asset authors in their forums encouraging buyers to proceed with refunds when things don’t work out. While these options help rectify the financial cost of a failed asset, they don’t address the larger expense which is wasted time.