This product is no longer beta software. We’ve opened a new thread for the official product release. You can also find more information at the official product page.
Thank you all for taking the time to provide us with valuable feedback during the beta. Cheers.
This is obviously looking extremely interesting, but could you describe the whole thing in more detail?
I suppose this technology makes it possible to paint all the details in the scene by hand (as done in Rage)?
I am sure not everyone is familiar with what exactly the words SVT mean.
While this version of the plugin won’t support painting, it is planned for a future release.
Very succinctly, SVT or just Virtual Texturing allows you to have a gigantic texture on disk while only a small visible portion exists in video memory. You just keep adding textures worrying less about texture limits and let the system handle the load.
For example, the maximum supported size by this system is 524288 x 524288, or around 2 TB of raw uncompressed data. This data is then heavily compressed to a few GB by the system in order to make it viable. However, by default only two 4096 x 4096 textures are allocated by the VT system to render the scene. Of course, you can manually tweak this value depending on your target platform and let the system balance the budget.
The system will fetch pieces of the larger texture from disk depending on your camera view. Never more than what is actually needed. So, in practice, you’ll get more detail using the same amount of texture memory. Plus, you get an automatic, unified texture streaming system.
I usually show this video to people that are trying to understand how it works and what the advantages are:
Does it work with Unity’s real time shadows? In deferred and forward rendered modes?
Yes, it integrates nicely with dynamic shadows, light maps, and both rendering modes. However, using VT comes with a small shader performance penalty, so deferred mode is advised.
Not at the moment. I’m still trying to get around a few technical limitations preventing it. I see it as an important feature to have in the long run, but I’m focusing on standalone for now.
This looks very interesting, thanks for the explanatory video as well.
I understand it’s not it’s primary use, but could your implementation in Unity be used also for a 2D game, where you have tons of character animation frames, and have a virtual cache set up to hold only the needed frames in the VRAM? (Usually the character frames are stored in bulk in larger textures (atlases), using UV coordinates change to display only the needed frame on a quad (so basically you have an animated texture). If I get it right, with your setup it would be better to store all the character frames in one single huge texture.)
Matthew, will any of them require support for individual textures larger than 16K x 16K? I’m asking this because I’ve planned support for this for a post-1.0 release, but I could anticipate that if the demand is high. This could be the case for apps based on geographic or urbanistic data.
Andrej, the thing about 3d is that it is somewhat forgiving when it comes to streaming in textures. Sometimes you notice the textures popping in, but due to the depth, page loading order and the way texture filtering works, you rarely do. Plus, this system pulls pages based on what is visible to the camera. A 2d game, on the other hand, will require immediate access to full quality pages, so no progressive loading. The streaming system would have to be a bit different. Not based on what is visible, but probably based on the player’s state.
In the future, I could extend it to allow more control over the streaming. I hadn’t even considered that possibility, so thanks for pointing out.
maxfax2009, thanks! Based on the info I have, the only limitation preventing this from running on iPhone 3gs and 4g is the lack of RenderTexture support on Unity for iOS. Unfortunately, that’s a deal breaker.
TornadoTwins, I’m doing my best to get this out the door asap. Public beta in January.