AltspaceVR is a vibrant platform of creators uploading Unity assets into their worlds and sharing them if the license allows. Unity is an excellent platform for creating games for all platforms and is comparable to the popular game engine Unreal, which has powered recent games on Xbox One, including the Spyro Trilogy remake. What needs to be understood is that VR headsets are not as powerful as gaming consoles or most modern PC’s.
It’s also important to note that Unity and other 3D modelling creators don’t generally create their assets with virtual reality. So what might be considered an average life-like asset to bring in might cost performance; on the other hand, something of similar quality could be very performant. What gives, right?
Identify the problematic asset (Kit objects / MREs)
Checking world diagnostics
In the world editor panel if you have world editor access is the diagnostic panel which can be brought up by clicking the exclamation triangle on the main page of the world editor. This is located under the ‘Lock all’ & ‘Unlock all’ objects buttons.
Altspace recommends your world size to be under 10MB for VR/mobile devices which is recommended based on older Oculus Quest 2 devices that are becoming obsolete. Realistically, as you browse AltspaceVR and land in loading screens you will find that the average VR/Mobile template is 50MB which is 4x the recommended.
There are worlds that have been 250MB and have loaded in okay, although this is pushing it and sacrifices such as removing MRE’s might be the solution to removing overhead rendering expenses on the world.
I have used a kit/MRE before in a world but I used it in another world but now the kit/MRE is lagging my world.
If the world is using a different template that overhead difference would impact the performance of how your kits & MREs run.
OR: You have loaded a different kit object into the world that is most costly in performance. Having an object that is detailed can cause performance issues, by simply deleting objects one by one you can find the culprit asset. You will see the kits total size fluctuate.
Can I load in one object from one kit and not have the rest?
Yes and no. You don’t have to use all the objects within a kit but as soon as you load any one object from that kit, it will load all the objects inside the kit inside the memory. Not having a particular object(s) spawned in can improve performance such as a high poly furniture object. However, when a user joins a world they are downloading the full kit into memory on their device.
How many photos can I have in my world?
It’s highly recommended you do not exceed more than 10 photos. The reason why this can become an issue for some users is that when you load into a world all the photos need to be downloaded. This creates a lot of requests at once and depending on how your ISP throttles your connection as well as location and latency to the servers this can take a while for some users to access your world. Typically users will not be able to move until all the photos have loaded in so for people on slower connections this can be irritating.
A common workaround is to store the images as Unity assets rendered on planes and then uploaded. The advantage is when you load into a world the kit objects are downloaded in a bundle asset compressed. This means the only cost/time delay in loading in is the difference in having a kit with the photos.
Recommended MRE limit
It’s not recommended to have more than 5 MRE’s loaded in but it also depends on the MRE. If you are using the Addiction MRE by Ryuuzaki you may want to make that limit reduced to cover the overhead of the outfits costing performance.
Optimising your Unity projects (Unity Worlds & kits)
There are a few things you can do to improve performance and it does depend on a huge number of factors. Optimising Unity assets is a whole topic on its own but here are some basic things you can consider.
- Compress texture files this will reduce file sizes therefore it reduces the overall overhead of reduced repeated texures.
- Remove unnecessary objects
- LOD groups are useful if you want to make objects dissappear as you move further away.
- Reduce lightmap size & baking quality
- Reducing reflection probes or using less reflection probes with complex lighting
- Remove objects from static that you don’t want baked or appearing in reflection probes.
- Changing and swapping assets out with a less quality (compromise)