Antti Ylimutka

Rendering Large 3D Scenes in Unity

Back to blog
April 1, 2020

One of the biggest issues our customers and partners encounter is the sheer amount of time it takes to import large 3D models into game engines - let alone optimizing them for smooth runtime performance. Umbra SceneStream is designed to solve this particular case.

It approaches the problem from a different perspective by letting you skip:

  • Importing the original 3D asset
  • Manually optimizing the 3D asset

Before we dive deeper into the how, I wanted to share an example of a rather large reality capture based 3D scene of Helsinki, Finland. The original reconstructed data set is roughly 700 gb of meshes and textures. First of all, it'll be near impossible or at least extremely time-consuming to import it into Unity - or any other game engine. Second, if SceneStream can render it 60 fps in a browser, you'll probably believe it renders in Unity too.

A 700 gigabyte scanned 3D model of Helsinki city

(Use mouse buttons to navigate and scroll to zoom)

Enter Umbra SceneStream

As stated above, reality capture and scanned 3D models can mean large data sets. Increase the capture quality or scan a larger area and we're easily talking terabytes, even petabytes of data. Storing, transferring and optimizing such large amounts of data becomes a burden in and of itself.

To tackle this, SceneStream applies multiple optimizations and reorganizes your input 3D scene into a hierarchical data format - an act we call umbrafying. Big data also means big computation jobs, thus our service is hosted in the cloud for infinitely scalable parallel processing. Umbrafying applies the following optimizations to your 3D scene:

  • Level of detail (LOD) generation for meshes and textures
  • Draw call optimization
  • Custom mesh compression
  • Platform specific texture generation

The 3D data can then be accessed by the light-weight runtime component. It streams in only the required data based on a given camera location. SceneStream actually streams the content to be rendered on the end-device. This enables use cases where network connectivity might not always be available.

How To Import Large 3D Scenes into Unity

Easy - just follow the instructions below to get started:

  1. If you don't have an account yet, request one from here.
  2. Download our SceneStream SDK and Unity SDK from our customer portal
  3. In the case of large input, use the Command Line Tool in our SDK to umbrafy your 3D scene. If you've already managed to import the original content into the editor, it can also be umbrafied with our Unity SDK.
  4. After the umbrafication is done, create a new Umbra Scene and follow these instructions to stream your content in.
  5. If you just want to try SceneStream's runtime, you can copy the public link below into the runtime-gameObject: https://view.umbra.io/web/UmbraLoader.html?key=pubk-73215c82-34a0-4672-91f8-85ec076174bf&project=50705105&model=1042959879
  6. Go deploy an app on the platform of your choosing and enjoy those buttery-smooth frame rates.

What's In It For Me?

Well now that you ask - just marvel at the beauty of the umbrafied Helsinki in Unity. But in all seriousness, the benefits you gain as a developer by using Umbra SceneStream are plenty:

  • Use 3D content of any size and complexity in your Unity application
  • Minimize your application size and startup times
  • Stop worrying about polygon counts and memory budgets
  • Ensure 60 frames per second rendering performance

With all the time saved, you’ll have more time to focus on creating better, more immersive and visually stunning experiences instead of wrestling to get the content to work.