Hi There,
We are working with a number of VPS locations and have currently been unsuccessful in activating two of the locations during testing. All objects are children of the VPS location in the hierarchy and they activate when “found” in testing in studio.
Tested:
5 Esplanade, Rochester, Medway ME1 1QE, UK - 51.390139, 0.501186
9GQ2+RV Rochester, UK - 51.389606, 0.502205
Untested:
Moat Cottage, 7 Castle Hill, Rochester ME1 1QQ, UK - 51.390195, 0.502212
Most House, 1 Castle Hill, Rochester ME1 1QQ, UK - 51.390657, 0.501249
9GQ2+QJ Rochester, UK - 51.389464999999994, 0.5015339999999999
We have limited time on site to test each location prior to the launch of our experience in a months time and would appreciate some assistance in identifying the issue.
Locations are accessed through a scavenger hunt map, although when testing in other areas this doesn’t seem to be an issue. VPS’s are activated with the Quality status as Fair. VPS tests in Scaniverse are also not providing results.
Just so I understand the issue clearly: The VPS locations work in the Simulator when using the “Found” button but don’t actually work on the device?
Correct. The camera activates when the scavenger hunt location is selected taking you to the VPS project space, but it does not find the VPS in the real world.
The easiest way to debug this would be to share a video of you attempting to localize on site.
Before recording, please make sure debug mode is enabled in the project. It’s possible that device permissions are blocking GPS access, which unfortunately causes a silent failure. With debug mode enabled, you’ll be able to see the relevant developer console messages.
Also, please add this custom component to the Location scene in your project to generate additional debug messages:
import * as ecs from '@8thwall/ecs'
ecs.registerComponent({
name: 'VPS Logger',
stateMachine: ({world, eid, schemaAttribute, dataAttribute}) => {
ecs.defineState('default')
.initial()
.listen(world.events.globalId, ecs.events.REALITY_LOCATION_FOUND, (e) => {
const {name} = e.data as any
console.log(`Location Found: ${name}`)
})
.listen(world.events.globalId, ecs.events.REALITY_LOCATION_LOST, (e) => {
const {name} = e.data as any
console.log(`Location Lost: ${name}`)
})
},
})
Thanks for sharing the video! Can you share the project with the support workspace so we can take a quick look as well?
Additionally, can you try the Map Explorer project and find a nearby public location to attempt to localize to? If that doesn’t work that indicates that there’s likely something going on at the device level.
Thank you. This has been shared.
I will use the debug script over the next few days for further testing, as well as the Map Explorer project. However, we did test with a standalone VPS project and there were no issues, accept tracking being lost and then refound. Is there a way to anchor assets once the VPS has been found, so that they don’t disappear when lost?
Appreciate the help!
Your best bet for anchoring an object to the VPS location without actually using VPS is to fall-back to World Tracking by enabling SLAM tracking on the object once the location has been found. You’ll need to write a custom component for this but the logic should be fairly straightforward:
- Listen for the location found event
- When the location is found move the child entities to the Space root or some other parent entity so they don’t disappear when the location is lost.
- Ensure the Camera entity does NOT have “Disable SLAM” marked as true. (Shouldn’t be an issue but you should double check).
We’ve tested with a map project and this did work well, but I’m a little unsure how to replicate our existing Scavenger hunt project to this framework as it appears the Map project component means it launches the same AR space for each location? Or can we simply upload the scavenger hunt map point component to support multiple spaces.
We did find that the Rainbow Shader Component helped to locate VPS meshes, so this may also be making the difference. Or have I got it’s functionality wrong?
Overall, our Scavenger hunt project is working better without any real intervention apart from hiding some models in the hierarchy. We’re still experiencing one VPS location that isn’t activating, but wasn’t able to capture in Debug mode.
VPS Not activating
Map Activating
Scavenger Activating
Both map sample projects are divided into two main sections: the world map and the AR content space.
In the Scavenger Hunt project, the map contains entities that are locked to specific latitude and longitude coordinates, but they don’t necessarily have to be used with that location when clicked. It’s simply a custom component that loads a specific Space name when the object is selected.
The Rainbow Shader custom component is part of the other map project, which demonstrates how to dynamically listen for any activated VPS location on the device. Unlike the Scavenger Hunt project, it isn’t limited to one or a specific set of locations.
We’ve tested the issue and it seems that it’s specific to the VPS object itself. The object is located fine with a device that has a lidar camera, but isn’t being located with non-lidar devices.
We suspect that even though the VPS is a large object, it is particularly flat and possibly getting lost against it’s background.
We’re abandoning VPS for this location due to this and just launching the objects with standard world tracking.
Interesting results. 8th Wall doesn’t use LiDAR since it’s not available through web APIs. It’s possible that different devices handle the workload differently, and what the CPU chooses to prioritize can affect localization speed.
1 Like