After a lot of work, the next, totally rewritten Flash 10-based panorama engine, PanoSalado2 is ready for display.  The huge new feature is that it supports tiled, multi-resolution panoramas output by Zoomify (tm).  

 

Tiled panoramas allow for giga-pixel resolution cube faces, with minimal over the network load delay, and minimal processor overhead since the minimal set of tiles for the pan, tilt, and field of view need be loaded.  So, as a quick example, the demonstration cube faces measure 5885 pixels square, for a total of 207,799,350 pixels in the whole panorama (5885 x 5885 x 6).  That is over 200 million pixels in the whole panorama, at the highest resolution.  

 

And on my humble machines: a 5 year old Mac G5 tower, and an Intel MacBook, the display is cinematic. Give it a try, seeing is believing.

Check out the demo here!

 

The nasty problems that afflicted panorama engines built for Flash 9: the "wiggle"  (straight lines the wiggle) and the "shimmer" (anti-aliasing) are also gone, completely.  Flash 10 supports perspective correct image distortion, so that removes the "wiggle" as an ongoing concern.  And the "shimmer", well, it was always just a poor trick to increase the performance by lowering the Flash Player stage quality, causing low grade anti-aliasing jagged "shimmering" in the image.  (For the record, PanoSalado 1.0 never really had much of a shimmer problem, and the wiggle problem could be accommodated for, thanks to PaperVision, but only in a very CPU intensive manner suitable for static points of view).  

 

There is a new feature that no other panorama player has implemented: Predictive Pre-Loading.  For example, with autorotation, the camera's position at any time in the future is known, and the average network latency is known, so tiles can be loaded in advance of when they need to be displayed, which minimizes display of blurry low-res preview tiles.  So, when the panorama is autorotating, blurry low-resolution tiles will not distract you from the panorama.  

 

PanoSalado2 does not have its own XML settings format.  All data is stored in typed native objects.  So settings can come from any source: XML, metadata embedded in images, etc; all that will be needed is a converter/parser.  But the important change is that the next version of SpinControl:VR is going to be able to output single file SWFs, with settings, user-defined interface elements and optionally image tiles.  And I've already written the Actionscript compiler for this!

 

The engine has been totally rewritten from scratch (no more PaperVision), with a single-minded focus on making it as fast as possible.  One could write a Flash 10 panorama engine with 6 Bitmaps displaying the cube faces, but it turns out that the performance is not very good (I tried that first, almost a year ago now).  To be clear, it would be faster than PanoSalado 1, but not by much.  

 

The other way to write a Flash 10 panorama engine is using the lower level drawing API with BitmapFills, which is a lot more complex, but it turns out that it is a LOT faster, because the developer has a lot more control over what exactly is happening.   PanoSalado2's code will be available in the near future, with the MIT license (I think) under the GPL License. But briefly, for anyone interested, Arrays are out entirely (untyped Array member access is slow), Vectors are used only where necessary, and Linked Lists are in wherever sequential access is needed (Many people wash out a lot of the performance benefit of the linked list by wrapping it up in a generic class with function calls to access everything; my linked lists are just data structures that get manipulated from the main render loop).  

 

The data structure that holds all of the tiles is a crazy Septuply Linked List (4 child tiles, 1 parent tile, 1 root tile, and 1 next tile).  Unnecessary function calls are also out (amazingly, function calls are slowish: you can add ~100 numbers in the time it takes to make a function call), so for the main render loop which updates the screen, functions are inlined as much as possible.  That said, the PanoSalado engine itself weighs in at about 14KB.

 

PanoSalado is evolving from being a single codebase to being an "ecosystem" of code for displaying panoramas.  In line with this, Michael Rondinelli's work on video panoramas is going to fit in somehow and my code is going to be molded to his architecture.  And  Aldo Hoeben's CuTy panorama viewer, which is a new viewer designed specifically for viewing QTVR content in flash—PanoSalado will be able to interoperate with this as well.  Seeing as QTVR is dead, it is high time for the next standard to step up.  And we'd like to see it be open-source this time around.  

 

For now, that's all folks!

 

Zephyr and Patrick