Scene Optimizations
Last updated
Last updated
Let's say there's a 360 Image with a radius of 700 and behind that there's another 360 Image with a radius of 900. The 360 Image with radius 900 will never get seen, as the first 360 Image blocks its view.
In cases like above, remove the elements that never get seen or used by the user.
When a GMetri experience runs, everything gets downloaded scene by scene. Assets for a scene are downloaded only when you enter that scene. If you never enter a particular scene, then assets in that scene are never downloaded.
When you go from one scene to another, during the scene transition all non-hidden elements get loaded.
For images, audios and 3d models, loaded refers to download of complete file. For videos "loaded" means download of the initial chunk (first few kilobytes). The rest of video gets downloaded while its playing.
When you are building primarily for a headset, then take the following into consideration
Break things down into simple, bite-sized scenes. Reduce the number of elements and interactions added in a single scene.
Use images and videos wherever possible.
Limit the number of videos playing in a single scene to a max of 3.
Limit the use of GIF element, use Hotspot element wherever possible as it is optimized for VR mode.
Avoid adding heavy 3D models as elements, use low poly models wherever possible. Compress textures to reduce memory usage.
Ensure that the scene space is large enough so as to not cause a nauseating effect.
Most headsets support up to 4K total resolution, ensuring that the images and videos used within the scenes do not exceed this resolution limit.
Keep the triangle count of the entire scene under 50K. This can be easily measured using the Performance Monitor
Avoid using 2D elements like Actionbar, Quiz, Popup, Embed 3D, Product Card, Story, Share, Embed HTML, QR Browser, QR Matcher, and Capture Input. These elements are not compatible with VR mode.
Limit the number of simultaneous interactive elements to maintain a smooth user experience. Prioritize essential interactions and avoid overwhelming the user with unnecessary options.
Click blocking doesn't work when using VR controllers. For example, if you have 2 images placed right on top of each other (stacked), the click action will be triggered on both images. This is not a restriction from GMetri but a restriction with the WebXR API and VR controller APIs.
A quick workaround would be to hide the elements on the screen that are behind other elements(completely occluded). This will also help improve performance on VR headsets.
The placement of graphics is very important here. Things look very different in 2D and 3D.