Moving Image quality & Multi-res

  • Working on a Auto Tour, so it will have a form of auto rotation in it (a variety of lookto, moveto, etc.) Many thanks to Klaus for his help on the XML. If you stop the tour and look around it will auto start again after 4 idle seconds, but I know I've got a lot more work to do to get it bullet proof. If you find issues, please let me know.

    It's also a Multi-res set with three levels.

    When the auto movement is going it can be quite jumpy at times. This is even when local on a fairly powerful machine, modern GPU, etc. On a almost netbook type of notebook over the internet it's too jumpy to watch, hurts the eyes.

    I've tried turning off Flash10, lowering the moving quality to low on both Flash 9 and 10, and it's still not good enough. Anyothers ideas? All other settings like details have been left at defaults - 16 for details for both flash 9 and 10 use.

    Is it the mutli-res doing this or....?

    And anyone know what the "details" is for in the level part of the Multi-res definitions? Would it help to change how the tiles are generated? Again used the defaults.

    Here's a link to the rough draft to date, lots more to add, but if you let it "idle" for about 4 seconds it will auto start a complete walk through of a 1880's built and restored mansion in Illinois.

    ****Warning, sound added - no buttons yet to turn off ******

    http://www.robertharshman.com/360vr/museums/…20Panorama.html

    If you get to it, check out the fridge in the kitchen, it's an ice box, has a exterior ice drop for when they use to deliver ice. It also was the first house in the region to have electricity, for 2 hours per day - whoa!

    Regards,

    Robert

    Edited 2 times, last by image360 (October 11, 2009 at 4:32 PM).

  • Hi Michel,

    Thanks for the compliment and insight about actionintervalbase, yet one more thing I did not know about. The richness of KRPano!

    I'm investigating it's use for this set. Seems to do just what it says, but now perhaps it's just too slow on a older or less powerful computer. I think I may try making a first "layer" set of of jpegs with a higher level of compression and see how that helps too.

    Thanks

    Robert

  • So many options, so little time *cry*

    Trying to figure out a great strategy for image optimization for multires tours.

    First, what is the details option in the level parameter ? By Default it's set to '0" for each set of tiles, but for the preview it's set at "8". Is this some type of smoothing? Does it impact render speed or ....?

    Second, multiresthreshold, in another post it's noted how complex the decision matrix has become for this and to use small negative values to force delayed use of loading a more detailed layer. Any guidence on range and typical use/benefit?

    And how can one tell what layer is being displayed (note, I always turn off the loading bar info)?

    Third, How big an impact does changing the Jpeg compression on a layer have on render speed or smooth rotation? Does it make sense at all to highly compress the first layer, less for second, less for third and so on...?

    Fourth, can the Mutires tool be setup to NOT overwrite existing XML by default?
    And finally, why does the tile size in the first line differ from the first tile set height/width? What does this mean/do?

    exp:
    <image type="CUBE" multires="true" progressive="false" tilesize="561">
    <level tiledimagewidth="771" tiledimageheight="771" details="0" download="auto" decode="auto">

    And, one last thing - what I have I missed that also impact image quality/smooth rotation/movement for a multires pano? (I know about Flash10 vs 9, details for render, and movequality)

    Regards,

    Robert

  • Hi image360,

    Quote

    Trying to figure out a great strategy for image optimization for multires tours.

    A big enterprise this *g* *wink*

    As I say before, I do not really have an answer to your request...
    Perhaps optimizing your tilesize in relation to your image whith / height can help .... *whistling*
    your code:

    Try using tilesize value of 771 when you generate your multires image...
    Probably, progressive="True" will be better too. More info here: krpano 1.0.8 beta (Flash10, QTVR, Zoomify, Partials Panos, ...)

    Quote

    And finally, why does the tile size in the first line differ from the first tile set height/width? What does this mean/do?

    Look at the doc for more explanation: https://krpano.com/docu/xml/#multires

    Hope this can help a little... *wink*

    Salut.

  • multiresthreshold:

    I think this maybe the key to smoother panning for multires. The multires pano's I've been working on have cubeface sizes of 771, 1542 and 3083 as noted above, this is the tiled cube image width/height per each set of images and the 561 tile size is the maximum size of any side of a individual tile - not sure why or where this 561 comes from but all of these numbers were set by "auto" in the makemultires tool.

    Based on some testing, it appears to me that by default KRPano tends to go to the larger cube size very quickly and basically immediately if you go fullscreen, at least on a 1920 by 1200 monitor. In this case it's like having a cube size of 3083 as a default size if you use a large or FS window. This is much larger than I've been using for the past 5+ years or so I've always used a cube size of about 1600 for full screen.

    By using multiresthreshold with negative numbers (about -.3) you get a more typical mix of the multires levels - at least from what I'm use to, and comfortable with with regards to detail shown at any one moment verses panning speed.

    Clear as mud?

    Regards,

    Robert

  • Hi image360,

    Perhaps it can be a good idea to take, as a base example, one of the Multiresolution Panorama Examples given by Klaus... Like this Cubical - 360x180° one: Sanctuarie (Mark D. Fink)

    The first thing I notice is:

    Code
    <network downloadqueues="4" decodequeues="1"/>


    Perhaps this can have some effect on the performance. But, the others Cubical - 360x180° examples do not have this line...

    The second thing I notice is:

    Code
    <image type="CUBE" multires="yes" tilesize="832" multiresthreshold="0.15">
      <level tiledimagewidth="832" tiledimageheight="832" details="20">
    ......


    Here, the tilesize is equal at the tiledimagewidth/height of the first level.... So, for the first level, there is only one tile...

    Your code:

    Code
    <image type="CUBE" multires="true" progressive="false" tilesize="561">
    <level tiledimagewidth="771" tiledimageheight="771" details="0" download="auto" decode="auto">
    .......


    Here, the tilesize is not equal at the tiledimagewidth/height of the first level AND the tiledimagewidth/height is not a multiple of the tilesize... This means, you need more than one tile for recreate the cube face AND many sizes to the tiles.....
    So, in your first level, to recreate a cube face you need:

    • 1 tile of 561x561
    • 2 tiles of 210x561
    • 2 tiles of 561x210
    • and 4 tiles of 210x210

    Perhaps this can have some effect on the performance.... I did not know if it has effect or not... I note only ....

    Quote

    .... and the 561 tile size is the maximum size of any side of a individual tile - not sure why or where this 561 comes from but all of these numbers were set by "auto" in the makemultires tool.

    I think you can change the tilesize, editing it in the kmakemultires.config:

    Code
    # tilesize
    # - size of the image tiles
    # - should be between 256 and 1024
    # - use 'auto' to find automatically the best
    #
    tilesize=auto


    tilesize=771

    Hope this can help in trying to figure out a great strategy for image optimization for multires tours. *wink*

    Saut.

  • Hi Michel,

    Thanks for all your help on this, still trying to enhanced the panning or movement view while keeping the details ready if the user or view requires it. This to me is the essence of multires, as much detail as you need, but only when you need it.

    Trying to see how additional jpeg compression helps, and it does, just not sure if it's worth the trouble.

    A few points that perhaps Klaus could help with:

    What is the details item for in the Level parameter? (Can't find any documentation on this - perhaps it's obvious, but not to me.)

    With all of the Gigapixel examples cube's size = the tile size, why does version 8.8 generate a "2/3" tile size for me by default? I assume forcing a tile size to equal the smallest auto cube size would reduce reads but would it be significant?

    Thats all for now, I still think the multiresthreshold parameter is the true key to at least getting the multires pano equal to a single cubic's movement performance as using small negative values for it, keeps you in the fewer tiles(more compressed), less detail layers longer.

    Regards,

    Robert

  • Hi Robert,

    Just my two bits, but it looks like the aliasing problem you are running into could be minimized if your source image was resized so that the final tilewidths/tileheights for each level were 3072, 1536, & 768. Flash does a much better job of dynamically resizing images if the pixel width and height of the image can be divided by 2 because the mipmap function in the flash player (v9 and up) will automatically be utilized. For info on mipmap goto http://www.kaourantin.net/2007/06/mip-map-what.html and at http://www.kaourantin.net/swf/mipmap.html you can see the difference a mipmap makes in Flash 9 and later

    Lee

    ---

    Lee Evans
    levans@cleartours.com
    http://cleartours.com/portfolio

  • Hi image360,

    First, what is the details option in the level parameter ? By Default it's set to '0" for each set of tiles,....

    I have made some test and it seems that a value of 0 has no effect, it is equal to current default value (in your case, display.details="16")

    What is the details item for in the Level parameter? (Can't find any documentation on this - perhaps it's obvious, but not to me.)

    You can found some explanation here: http://www.krpano.com/docu/xml/#multires

    Quote

    details
    individual details setting for this level


    You can found more explanation about details here: http://www.krpano.com/docu/xml/#display

    Salut.

  • Just wanted to thank everyone that helped with my intro to Beyond the Defaults to KRPANO; Klaus, Michel, Tom and Lee.

    At this time I've keep the tour Multires, but resized the tiles as Lee described - still get more shimmer than I'd like, but what else is new - the only viewer I've ever seen free from shimmer is DelvaVr and that's still windows only and requires Shockwave, so no go there. Perhaps the mipmap support works better if you stay on the pure "2" multiple - 256, 512, etc.?

    The Jpegs are pretty much set at the default compression of 82, but I did override the defaults for sizing and force the tiles and first cube set to 768.

    If I get time, I might try a non Multires version( as Tom suggested a few days ago) to see how the movement compares.

    Best Regards.

    Robert

  • Hi,

    When the auto movement is going it can be quite jumpy at times. This is even when local on a fairly powerful machine, modern GPU, etc. On a almost netbook type of notebook over the internet it's too jumpy to watch, hurts the eyes.

    the reason for this jumpy movement is the jpeg image decoding in Flash,
    the download of an image is done in the background,but when the download was done,
    the image must be decoded (to pixels), and this decoding blocks the entire Flashplayer,
    and there is unfortunately no way to do that in background in Flash...

    by default the movements in krpano (moveto,lookto,..) are based on 'time',
    this allows the make the same move in the (near) the same time,
    regardless of the current framerate and power of the pc,
    but in such situation will be very jumpy because of the large pauses during decoding,

    to avoid this, the base for the movment can be set to "frame" like Michel (),
    already noted:

    Perhaps you can try adding the krpano attribute actionintervalbase="frame"...
    Look here for more info about actionintervalbase

    this should reduce the jumps,


    a further way to avoid these jumps/breaks during the movement,
    would be to load all tiles before moving,

    this can be done by setting the "download" and "decode" attributes
    of all <level> tags to "all" and maybe using a "wait(LOAD);" or the
    "onloadcomplete" event before starting the movement,


    about - mipmapping - this unfortunately works only with the flash9 renderer,
    the flash10 function (drawTriangles) doesn't do mipmapping anymore...

    but in your example I think the problem with aliasing is just the -

    Code
    movequality10="LOW"

    setting
    on the most systems where I have tested, the framerate difference between "HIGH" and "LOW" is very low, so I would recommend using "HIGH" for "movequality10" (it's also the default value)

    best regards,
    Klaus

  • Thanks Klaus,

    I had tried the attribute actionintervalbase="frame" earlier but found the tour was then way too slow on a netbook or relatively less powerful computer so I went back to timer. It was very smooth however.

    I've updated the tour to use your other suggestions and it does seem to help. For the download and decode all setting, should not a Wait(Blend) work too?

    More testing, hence questions.

    With all three level of the tiles set to download and decode ALL, I found the transitions between rooms too long. I'm concerned a viewer might think somethings wrong or the tour is lock up. So, I'ven set only the first two levels of tiles to ALL, with the third set to auto. Like most all things in life it's a series of trade offs. A bit of jumpy ness for speed or slow smooth display.

    However, this information from the documentation for dowload and decode confuses me a bit:

    • all - download all tiles of the current level (not recommended)
    • auto - automatic, if imageheight is smaller than 2000 then all tiles are downloaded, if greater only the ones for the current view (=default).

    On auto, what is the image height? The display or browser window size, the biggest tile or largest cube size?

    I also found the information on lockmultireslevel and this looks like it could be very useful. Yet one more possible little gem in the KRPANO expanding control set *smile* .
    I think perhaps it could be invaluable if one knows the viewer's browser dimensions, is that possible from the XML side? Is this what screentosphere(screenx,screeny) provides?

    If not, then I guess some other uses might be to fix the window size(s) and set the lock to best size for the presentation size based on FOV or...

    Thank you!

    Robert

    Edited once, last by image360 (October 19, 2009 at 6:23 AM).

  • Hi,

    On auto, what is the image height? The display or browser window size, the biggest tile or largest cube size?

    no, "auto" means the level imagesize,
    if the tiled image height is below 2000 pixels, all tiles from the level were downloaded (version 1.0.7)

    but note - this has changed in the current version (because 1.0.8 also supports partial panos) - now when set to "auto" - levels with a size below 10 megapixel (width*height < 10mp) will be automatically downloaded completely,

    I also found the information on lockmultireslevel and this looks like it could be very useful. Yet one more possible little gem in the KRPANO expanding control set *smile* .

    yes, for zooming that will be useful
    it locks the current or a specific multires level,
    this can avoids loading a other levels during zooming,

    see the xml of this example, here it was used:
    HTML: https://krpano.com/krpano.html?pano=panos/carin/carin.xml
    XML: https://krpano.com/panos/carin/carin.xml

    note - in the current 1.0.8 beta 8 - lockmultireslevel - doesn't work, but here in the beta 9 pre-release it does:
    krpano 1.0.8 beta 8

    I think perhaps it could be invaluable if one knows the viewer's browser dimensions, is that possible from the XML side? Is this what screentosphere(screenx,screeny) provides?

    yes, from xml side - there are the "stagewidth" and "stageheight" variables,

    screentosphere() is something different, it is a function that converts screen coordinates to sphericals,
    it can only be used from Actionscript or Javascript,

    best regards,
    Klaus

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!