Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MVisio: A Computer Graphics Platform for Virtual Reality, Science and Education


Published on

PhD defense presentation highlighting the main achievements of the MVisio project.

Published in: Technology, Art & Photos
  • Be the first to comment

  • Be the first to like this

MVisio: A Computer Graphics Platform for Virtual Reality, Science and Education

  1. 1. Mental VisionA Computer Graphics Platform for Virtual Reality, Science and Education Achille Peternier Thesis director: Prof. Daniel Thalmann
  2. 2. Plan• Introduction – Context – Goals• Our solution – Architecture and components – MVisio graphics engine – Pedagogical modules – Low-cost CAVE and wearable 3D system• Results – Benchmark – Case studies• Conclusion
  3. 3. Introduction
  4. 4. Introduction - context
  5. 5. Introduction - context
  6. 6. Introduction - context
  7. 7. Introduction - context education wearables research immersive graphics Unique framework for 3D graphicshandheld devices portable PCs desktop workstations VR systems
  8. 8. Introduction - goalsConcept Result Project Device Software
  9. 9. Introduction - goalsConcept Result Project Software Device
  10. 10. Introduction - goals
  11. 11. Introduction - goals
  12. 12. Introduction - goals
  13. 13. Our solution
  14. 14. Our solution - architecture Corollary tools (low costMVisio 3D graphics engine CAVE and wearable system) Pedagogical modules
  15. 15. Our solution - mvisio• User-friendly API, based on an C++ class-oriented architecture• Multi-device rendering on PC, PDA and CAVE (a same source-code compiles everywhere)• Multi-platform (Windows, Linux)• Full OpenGL and OpenGL|ES support• Dynamic scene graph management• Dynamic lighting• Dynamic soft shadows• HDR and bloom lighting• Depth of field• Vertex and pixel shaders• Skinning and animations• Particle emitters• Terrain engine• Video2texture from MPEG1/2 files• Loading of scenes directly exported from 3D Studio MAX through a specific plug-in• 2D GUI system with event handling• Loading of complex 2D interfaces from XML files• Object picking• Support for Head-Mounted Displays (HMD), even on PDA• New customizable plug-in objects
  16. 16. Our solution - mvisio
  17. 17. Our solution - mvisio Models (.mve) User application Videos (.mpg)Animations (.mva) (.exe) Textures/shaders CAVE engine MVisio API PDA engine client/server PC engine OpenGL|ES (1.0 CM) architectureWall Wall OpenGL (1.1→1.5)Wall Floor
  18. 18. Our solution - mvisio#include <mvisio.h> Initialize MVisio with customint main(int argc, char *argv[]) settings{ MVSETTINGS config; config.load("configForPC.txt"); Load a scene (with MVISIO::init(&config); MVNODE *scene = MVISIO::load("bar.mve"); meshes, lights, textures, etc.) MVISIO::clear(true, true); MVISIO::begin3D(NULL); Clear buffers, start a 3D scene->pass(); rendering, tell MVisio to render MVISIO::end3D(); MVISIO::swap(); the scene, execute the rendering, swap back to front MVISIO::free(); buffer return 0;} Free resources
  19. 19. Our solution – modules11 pedagogicaldemonstrators
  20. 20. Our solution - modulesLesson slide Click & drag controlsReal-timeWYSIWYG Simplified display interfacePowerPoint-like style
  21. 21. Our solution - modulesClasses Practicals Projects
  22. 22. Our solution - cave
  23. 23. Our solution - caveShutters and shutter glasses Red & blue glasses
  24. 24. Our solution - cave
  25. 25. Our solution – caveBefore calibration After calibration
  26. 26. Our solution - cave#define MV_CAVE#include <mvisio.h> Tell MVisio you want a CAVE renderingint main(int argc, char *argv[]){ MVSETTINGS config; config.load("configForCAVE.txt"); Load CAVE settings from a file MVISIO::init(&config); (client IP addresses and MVNODE *bunny = MVISIO::load("bunny.mve"); positions) MVCLIENT::putUser(1.2, 1.6, 1.2); Specify user’s head position in MVISIO::clear(true, true, true); MVISIO::begin3D(NULL); CAVE relative coordinates bunny->pass(); MVISIO::end3D(); MVISIO::swap(); _sleep(5000); MVISIO::free(); return 0;}
  27. 27. Our solution - wearableSee-through HMD VGA signal adapter PDA Battery pack Weight ≈ 0.5 kg
  28. 28. Our solution - wearable#define MV_PDA#include <mvisio.h> Tell MVisio you want a PDA renderingint main(int argc, char *argv[]){ MVSETTINGS config; config.load("configForPDA.txt"); Load PDA settings from a file MVISIO::init(&config); (portrait/landscape orientation) MVNODE *bunny = MVISIO::load("bunny.mve"); MVISIO::clear(true, true, true); MVISIO::begin3D(NULL); bunny->pass(); MVISIO::end3D(); MVISIO::swap(); _sleep(5000); MVISIO::free(); return 0;}
  29. 29. Our solution - other 3D Studio Max MVisio application .MVE (MVisio Entity fileOur exporter format)
  30. 30. Results
  31. 31. Results - benchmark• Simple cross device application tracking fps and using three different models: • classic static Stanford bunny • a building model (using many separated entities and transparencies) • a 86 bones skinned, animated, textured virtual human• Basic GUI (some text, a couple of buttons)• We want to evaluate speed issues, code differences and visual consistencyamong different platforms
  32. 32. Results - benchmark PDA software rendering (OGL|ES Rasteroid 1.0 CL) Screen size: 320x240 Bunny: ~5.9 fps Building: ~9.3 fps V. human: ~6.7 fps
  33. 33. Results - benchmark PDA hardware rendering (OGL|ES MBX-lite 1.0 CL) Screen size: 640x480 Bunny: ~23 fps Building: ~34 fps V. human: ~14 fps
  34. 34. Results - benchmark PC hardware rendering (Nvidia GForce 8800 GT, Core2 Quad @ 2.4 GHz) Screen size: 640x480 Bunny: >1400 fps Building: >1000 fps V. human: ~560 fps
  35. 35. Results - benchmark 4 side CAVE rendering 3D rendering (1 server PC, 4 clients) Screen size: 1024x768 (each) Nvidia 9800 GTX 2D GUI Bunny: >270 fps Building: >220 fps V. human: ~135 fps
  36. 36. Results – student projects
  37. 37. Results – research projects
  38. 38. Results - publicationsA. Peternier, F. Vexo, D. Thalmann, The Mental Vision framework: a platform for teaching, practicing and researching with Computer Graphics and Virtual Reality, LNCS Transaction on Edutainment, 2008A. Peternier, S. Cardin, F. Vexo, D. Thalmann, Practical Design and Implementation of a CAVE system, GRAPP 2007A. Peternier, F. Vexo, D. Thalmann, Wearable Mixed Reality system in less than 1 pound, EG Symposium on VR, 2006A. Peternier, D. Thalmann, F. Vexo, Mental Vision: a Computer Graphics teaching platform, Edutainment, LNCS, 2006
  39. 39. Results - disseminationportable V-Cave demos for visitors VIP events
  40. 40. Conclusion
  41. 41. Conclusion“from your pocket to your CAVE”
  42. 42. Conclusion VS• Optimized for speed • Optimized for robustness• Specific contexts • Multi purposes• Complex to use • Intuitive• Expensive • Cost efficient• Limited to experts • Ideal for students too
  43. 43. Conclusion
  44. 44. Thanks!
  45. 45. From
  46. 46. inline void setPosition(MVVECTOR3 v){ High-level #ifdef MV_CAVE commands are MVSETTINGS::sendVector3(MV_SETPOSITION3D, id, v.x, v.y, v.z); #endif forwarded to the position = v; connected clients}inline void setRotation(MVVECTOR3 v){ #ifdef MV_CAVE MVSETTINGS::sendVector3(MV_SETROTATION3D, id, v.x, v.y, v.z); #endif rotation = v;}bool pass(MVNODE *node, bool recurse){ #ifdef MV_CAVE if (recurse) MVSETTINGS::sendCommand(MV_PASS, node->getId()); #endif […]}
  47. 47. case MV_SETPOSITION3D: …and parsed client-{ side, then applied to MVID id; memcpy(&id, data+1, sizeof(MVID)); the same entity MVNODE *_node = MVNODE::findById(id); if (_node) { MVVECTOR3 vector; memcpy(&vector, data+5, sizeof(float)*3); _node->setPosition(vector); }}break;case MV_PASS:{ MVID id; memcpy(&id, data+1, sizeof(MVID)); MVNODE *_node = MVNODE::findById(id); if (_node) { _node->pass(); }}break;