WP4: Efficient visualisation and streaming Tasks
Efficient visualization and streaming ◦ Problem: huge datasets Guarantee interactive framerates Data transfer from servers Status ◦ Interactive City Viewer demo Both on desktop and Mobile (iPhone) systems Streaming data from server Using TeleAtlas 3D city data Horizon Culling
Quadtree ◦ Splitting rule: number of buildings ◦ Leaf cells store building data Geometry Collision geometry Segments for horizon culling (building tops) Each cell can be requested separately
Paris ◦ Geometry: 1.4 GB ◦ Collision geometry: 89 MB ◦ Texture Atlas: 5 texture atlas files (2048x2048) 106 MB (.dds format with mipmap levels) ◦ Segments: 40 MB Barcelona ◦ Geometry: 600 MB ◦ Collision geometry: 31 MB ◦ Texture Atlas: 4 texture atlas files (2048x2048) 87 MB (.dds format with mipmap levels) ◦ Segments: 14 MB
“A Flexible and Extensible Architecture for Visibility Culling” Miquel À. Rújula, Jeroen Dierckx, Tom Jehaes, Peter Quax, Wim Lamotte and Pere A. Palmer Conference on Computer Game Design and Technology
Further experimentation with different splitting strategies for building the quadtree ◦ Important factors: render performance, download size per cell, segment count, … Experiment with different strategies for building the texture atlas ◦ One for the whole city one for each cell Build on previous experience with LoD solutions ◦ Combinations of traditional 3D models with image-based and procedurally generated models Leverage the existing quadtree data model for LoD ◦ Parent nodes store a lower resolution version of the merged children Procedurally generated data?
Interaction framework ◦ Flexible interaction specification Status ◦ Scripting completely integrated into the existing framework ◦ Application interaction is defined by writing scripts ◦ Visual world editor preliminary version
-- Key bindings function onKeyPressed(event) if event.key == Keyboard.KC_1 then billboard1.URL = “controls.swf" elseif event.key == Keyboard.KC_2 then billboard1.URL = " elseif event.key == Keyboard.KC_3 then billboard1.URL = " elseif event.key == Keyboard.KC_3 then billboard1.URL = " end listener = InputManager:createKeyboardListener() listener.keyPressed = onKeyPressed -- Create the demo billboard settings = BillboardSettings() settings.sceneMgr = Application:getCamera().sceneManager settings.mesh = "../../data/Ogre/meshes/billboards/wall-billboard.mesh" settings.subMesh = 2 settings.zoomTime = 0.5 settings.width = 800 settings.height = 600 settings.startURL = “controls.swf" settings.position = OgreVector3(-48, 2, -61) billboard1 = BillboardManager:createBillboard(1, settings)
Integration into a webbrowser ◦ ActiveX, Firefox plugin, … WorldEditor ◦ Flexible interaction specification Flow diagrams? Services: synchronize with SMIT Service examples ◦ Targeted advertising Based on user profile, previous interests, … ◦ Accounting Number of viewers, number of clicks, …