Search Unity

Asset Streaming

Discussion in 'Works In Progress - Archive' started by jedy, Apr 1, 2012.

  1. jedy

    jedy

    Joined:
    Aug 1, 2010
    Posts:
    579
    Hey folks!

    I'm working on an automatic asset streaming system.
    Basically what it does:
    -generates an asset bundle for each model with low res textures ( 128x128 )
    -generates asset bundles with higher quality textures and writes their paths in the main object asset bundle
    -generates scene bundles which contain a list of asset bundle paths and positions
    -from a scene asset bundle automatically streams the whole level ( with low resolution )
    -after the level itself is initially loaded starts streaming the higher resolution textures ( the higher resolution is based on user preference ), with dependent on distance to an object order ( for say the objects nearer to the player get their higher resolution textures loaded first )

    Additional Features:
    -terrain support
    -customizable texture resolutions
    -multiple texture resolutions
    -easy to use
    -great reusability - all the textures are grouped and once streamed are cached by unity - shared assets between scenes get downloaded just once

    There are two approaches for doing the low resolution thing :
    -Packing all the lower quality models into a scene asset bundle
    -Packing all of them separately

    Both methods have their pros and cons I've wen with the second one. I'm posting a sample scene, for you to test the speed.

    Not streamed - http://dl.dropbox.com/u/22188686/NotStreaming/WebPlayer/WebPlayer.html
    Streamed - http://dl.dropbox.com/u/22188686/Streaming/WebPlayer/WebPlayer.html

    The streamed one IS a bit slower. The actual speed benefit in this particular case comes when there are many scenes that reuse the assets.

    I'm creating the FASTER streaming option ( all the low res textures are packed in a single asset bundle ) some time soon. I'll post that too.

    Benchmarks and feedback are welcome!
     
  2. PolyMad

    PolyMad

    Joined:
    Mar 19, 2009
    Posts:
    2,350
    Looks cool :)
     
  3. gateway69

    gateway69

    Joined:
    Feb 18, 2010
    Posts:
    94
    Any updates to this Jedy, we are looking for a way to stream in a small asset pack with smaller mip into the game from our content server, then as the bundle is in and running pull in a texture with a higher quality.. ?
     
  4. jedy

    jedy

    Joined:
    Aug 1, 2010
    Posts:
    579
    Well the functionality is completed. It's currently being implemented into our game.
    Anyway due to the lack of interest I haven't really created a package ready for the asset store.
     
  5. gateway69

    gateway69

    Joined:
    Feb 18, 2010
    Posts:
    94
    Jedy,

    Ok thanks for the reply. Im wondering how much savings you get, and are you loading in just a small texture or just a mip level? For example if a barrel was loaded in with 128x128 mip level, then the 512x512 gets loaded are you seeing lag times, popping in of the textures ? Since most web games rely on internet speed. Also are you creating 2 asset bundles, the merge the texture on once fully loaded. Would this work on mobile devices?

    sorry just seeing based upon what you found if its a direction we should take
     
  6. jedy

    jedy

    Joined:
    Aug 1, 2010
    Posts:
    579
    Well here is some raw data :
    From a 20Mb webplayer it went down to 3Mb with 128x128 textures.
    The textures replacement doesn't create any sort of spikes or noticeable lag.
    I haven't tested this on a mobile phone.
    And I'm creating a single asset bundle containing the level itself with low res textures ( better than individual low res textures - they have too much overhead ), and different asset packs with higher res textures.