Developing VPS Experiences
Enabling Lightship VPS​
To enable VPS in your WebAR project, you'll need to set enableVPS
to true
.
For A-Frame projects, set enableVps: true
on the xrweb
component on the <a-scene>
For Non-AFrame projects, set enableVps: true
in the call to XR8.XrController.configure()
prior
to engine start.
Example - AFrame​
<a-scene
coaching-overlay
landing-page
xrextras-loading
xrextras-runtime-error
...
xrweb="enableVps: true;">
Example - Non-AFrame​
XR8.XrController.configure({enableVps: true})
// Then, start the 8th Wall engine
Developing Bespoke VPS Experiences​
Bespoke VPS scenes are designed for a single Location and utilize a reference mesh from the Geospatial Browser to align AR content.
Part 1: Add Location to scene
- Open the Geospatial Browser (map icon 🗺 on the left)
- Find a VPS-activated Location (or nominate/activate your own)
- Add the Location to the project
Part 2: Use Location GLB as reference for custom AR animation
- Download the reference GLB from the right side of the row.
- Use this in your 3D modeling software (Blender, Maya, A-Frame, etc) to position AR content relative to the mesh origin.
IMPORTANT: The origin of this 3D model is the origin of the Location. DO NOT RESET THE ORIGIN OR YOUR CONTENT WILL NOT BE ALIGNED.
OPTIONALLY: If the mesh downloaded from the Geospatial Browser is not high enough quality to use for a baked animation, physics, or occluder material, you might consider taking a scan using a third-party application like Scaniverse and aligning that high-quality mesh with the one downloaded from the Geospatial Browser.
- Import animation GLB into Cloud Editor and add to scene
- Add the named-location component to your asset's
<a-entity>
. The 'name' attribute refers to the Project Location'sname
from the Geospatial Browser.
Ta-da! 🪄 Your animation should appear aligned to the Location in the real world.
Part 3: Adding occlusion and shadows
- In your scene, add
<a-entity named-location="name: LOCATIONNAME"><a-entity>
- Add three
<a-entity>
inside this element as its children. These will be your occluder mesh, shadow mesh and VPS animation. - In the first
<a-entity>
, addxrextras-hider-material
andgltf-model="#vps-mesh"
. "#vps-mesh
" should refer to a version of your reference GLB that has had its textures removed and geometry decimated. - In the second
<a-entity>
, addshadow-shader
,gltf-model="#vps-mesh"
, andshadow="cast: false"
. The shadow shader applies a shadow material to the reference mesh with a polygon offset to prevent Z-fighting. You can choose whether you want the vps-mesh to cast a shadow on the real world withshadow="cast: true"
. - In the third
<a-entity>
, addgltf-model="#vps-anim"
,reflections="type: realtime"
,play-vps-animation
andshadow="receive:false"
.play-vps-animation
waits until thevps-coaching-overlay
has disappeared before playing the VPS animation.
Remote Desktop Development Setup​
It is often helpful to use the A-Frame inspector to position content remotely on your desktop. To set up this project's scene for remote desktop development, disable the following components by adding a letter to the beginning (i.e. "Znamed-location"):
xrweb
->Zxrweb
xrextras-loading
->Zxrextras-loading
named-location
->Znamed-location
xrextras-hider-material
->Zxrextras-hider-material
Now you can open the A-Frame Inspector (Mac: ctrl + opt + i, PC: ctrl + alt + i) and position content relative to the VPS mesh imported from the Geospatial Browser. Remember: this is an inspector. You will need to copy the transform values back into your code.
Optionally, you can temporarily reposition the <a-entity named-location>
to the center of the scene
to assist with iteration speed. NOTE: reset <a-entity named-location>
to position="0 0 0"
to ensure VPS
content is aligned correctly.
Remote Mobile Development Setup​
It is often helpful to use the A-Frame inspector to simulate VPS remotely on your mobile device. To set up this project's scene for remote mobile development, disable the following components by adding a letter to the beginning (i.e. "Znamed-location"):
named-location
->Znamed-location
xrextras-hider-material
->Zxrextras-hider-material
Next, you'll need to disable VPS and enable absolute scale. This will ensure the reference mesh is sized correctly for accurate simulation:
xrweb="enableVps: false; scale: absolute;"
You should temporarily reposition the <a-entity named-location>
to the center of the scene
to assist with iteration speed. Try to align the base of your reference mesh with y="0"
(the ground).
NOTE: Before deploying your VPS project, reset <a-entity named-location>
to position="0 0 0"
to ensure VPS content is aligned correctly.
Developing Procedural VPS Experiences​
Procedural VPS scenes are designed to use any detected Location (as opposed to specific Project Locations). Once detected, the Location's mesh is available to you to generate procedurally-generated VPS experiences.
There are two procedural-related events emitted by the 8th Wall engine:
- xrmeshfound: emitted when a mesh is first found either after start or after a recenter()
- xrmeshlost: emitted when recenter() is called.
After a mesh is detected, the 8th Wall engine will continue to track against that mesh until recenter() is called.