54. The need for better
VR software tools
• Hardware getting cheaper
• But engineers are not getting cheaper
• Need to be more efficient and spend less
time creating apps
• Democratization
• VR developers are not all engineers anymore
55. Goals
• Simplify VR
• Simplify creation of VR applications
• Simplify deployment of VR applications
• Create new VR tools
• Adapting existing 3D applications
82. The value of simplicity
“Perfection is achieved, not when there is
nothing more to add, but when there is
nothing left to take away”
Antoine de St Exupery
83. The value of simplicity
• For each feature you add
• Test
• Document
• Support / maintain
• Each feature costs !!
84. The value of simplicity
• Huge value in simplicity !
• User side
• Faster to learn, less to remember
• Developer side
• Faster to code
• Easier maintain
• Less bugs
• Business side
• Need less coders
• More interesting features
• Easy download / setup > Quickly validate on user‟s hardware !
• Easier support
85. API in simple english
• Long discussions for naming of functions, classes, variables
• Consistent api
• SetNumButtons, SetButtonsNum, SetNbButtons > SetButtonsNb
• French not good at english
• Analog ? Digital ? Proxy ?
• Use natural terms depending on device
• Joystick->GetAxisValue()
• Joystick->IsButtonPressed()
• Keyboard->IsKeyPressed()
• Why “Register” ? Why not “Add” ?
• Why so complex, want to sound very clever ?
• AddDevice, AddCamera, …
• API in degrees, because more intuitive / simple to work with
86. Simplified API
• Simple but complete API
• Like legos
• Rotate
• Node3D->Rotate( Quat )
• Node3D->Rotate( Euler )
• Node3D->Rotate( Axis, Angle)
• Quat( quat ), Quat( Euler ), Quat( Axis, Angle)
87. The value of simplicity
“Simplicity is the ultimate sophistication”
DaVinci
88. The value of simplicity
• Design user interface for the 80%
• Don‟t ruin the experience for the 20%
• Simple things should be simple
• Complex things can be complex
• Put in an “advanced menu”
• Don‟t let beauty of design ruin user
experience
• Like real life architects who want their
design to be beautiful but totally
unusable on a day to day
• Example of Lego
• Simple but complete
89. Optimizations
• Engineers have a strong tendency to over-optimise
• Complexifies code
• Code must be above all readable
• To avoid bugs
• To maintain maintenability
• If you want to optimise
• First profile your code
• Optimize what is *really* taking time
• not what you *think* takes time
92. Drivers
• Why not just a few simple functions with
sensible defaults ?
• Init()
• Update()
• GetValue()
• Destroy()
• And add more functions for more advanced
94. Goals
• Simplify deployment of VR applications
• GUI to configure VR systems
• Dynamic reconfiguration of application
• Ship with standard configurations
• Abstractions
102. Interactions
• MiddleVR includes high-level interactions
• Navigation
• Selection
• Manipulation
• … More to come
• Future: Interactions abstractions
• Dynamically change interactions based on
hardware
104. • How to create portable interactions ?
• Navigations can be portable
• Except collisions
• Generalise what is generalisable
• + Custom part for engine dependent
• Collisions
• Highlights
• Gizmos
Interactions
108. C++ Reflexion
• Also for configuration file
• Cluster synchronisation
• Accessing drivers specific information
109. Working with multiple 3D
engines
• Different coordinate systems
• vrCoordinateSystem( Front, Up, Right )
• +/- X,Y,Z
• OpenGL:
• Front= -Z
• Up = +Y
• Right = +X
• DirectX:
• Front=+Z
• Up=+Y
• Right=+X
110. Working with multiple 3D
engines
• C++
• Compiling
• STL, Boost
• Strings (Wide strings)
• Link issues
• Different compilers (VC2005/2008/2010/2012)
• Different languages
• C wrapper
• Lua wrapper