How big is big for an atlas?

hi!

I’m creating a sort of video art thing to project images and videos behind bands during concerts, and it’s going to involve a lot of quite big photos, as well as many particleFXs and labels. At runtime it’s going to be very simple, but i do need to keep those photos in an atlas (big in this case means around twenty 1440 by 900 pixel png files).

any tips for working with a project this size? or is that not even really that big and i shouldn’t expect any problems?

We try to not go over 2048x2048 atlas size for hardware compatibility reasons but it sounds like your use case is very specific.

If the computer has enough memory that is the main issue. You don’t need to put all images into a single atlas, you can spread it out.

We do not have true async loading of assets so you can’t just load/unload what you need from collection proxies without it probably causing lag either. But you could test this too. If everything is fast enough there may be no lag.

2 Likes

Wow, two years ago and this project is getting its debut on SATURDAY NEXT WEEK (coronavirus permitting) and I still have no idea about this.

Right now, I have a few atlases which are all smaller than 2048*2048. And sometimes I have GOs that access sprites in two different atlases at the same time. There seems to be no problem with this so far. Is there anyway good way of organising this? Or should i just make a new atlas everytime one atlas reaches the max size?

The way you arrange your graphics into atlases can have multiple purposes. You can try to maximize the amount of graphics in an atlas by packing an atlas as tightly as possible to use as little memory as possible. Big atlases with unused space is a waste.

On the other hand it’s good to arrange the graphics in such a way that you have add few draw calls as possible. Put graphics that is drawn together in the same atlas.

Another option is to use many small atlases and only ever have the ones you really need for a specific level loaded to reduce memory usage.

Many options and there really isn’t one way which is always the best way.

3 Likes

We generally put everything related together into the same atlas and then use texture profiles to constrain texture sizes down to the max size we target, and when things get too fuzzy, we may move them to their own atlases to allow specific assets to have more resolution. It does add more draw calls when using more atlases but with special things you want to be high resolution it’s worth it.

For big textures like BGs we load them while switching screens so usually only 1-2 BGs are loaded at once.

What i really need is the “many small atlases” option. But how do i do that? I know I can load and unload collections, but how do I load and unload atlases?

edit: wait, let me investigate this myself first.

just so you have an idea, i am doing weird stuff like this (vaporwave inspired). In this video, there are three collections loaded:

  • 3dwave.collection,
  • dolphin.collection, and
  • wavesquare.collection

It would be fantastic if each collection had an atlas associated with it (and yes, in these examples, there are not huge images, but i will also be putting some huge images in soon. And they have to be huge because the projecter’s screen size will be very, very big.

You don’t really load or unload atlases, but if an atlas is only referenced from a collection which is loaded via a collection proxy the atlas will be loaded and unloaded with the collection through the proxy.

Another option is to spawn the collection using a collection factory and check the Load Dynamically checkbox of the collection factory. With Load Dynamically checked you can control loading and unloading of the collection yourself through collectionfactory.load/unload.

4 Likes

THIS is exactly the information I needed!! I am using collection factories, but I didn’t know that atlases were loaded/unloaded automatically!

1 Like