Zum Hauptinhalt springen

Web SDK

Bauen Sie AR Clip VPS in Ihre eigene Webseite ein. Das Web SDK bestimmt direkt im Browser, wo der Besucher auf Ihren VPS-Karten steht, ganz ohne App-Installation.

Bevor Sie beginnen​

  • Ein API-Schlüssel. Schreiben Sie uns über den Support, um einen zu erhalten.
  • Standort-IDs Ihrer Karten. Jede Karte hat eine, siehe Einführung.
  • Eine Seite über HTTPS. Browser geben Kamera und Bewegungssensoren nur für sichere Seiten frei. localhost gilt ebenfalls als sicher.

Installieren​

npm install @web-ar-studio/webar-engine-sdk

Das Paket liegt auf npm und bringt seine TypeScript-Typen mit.

VPS starten​

VPS läuft innerhalb einer Sitzung mit Welt-Tracking. Geben Sie init() das Feld vps mit und listen Sie darin Ihre Standort-IDs auf. Das SDK zeichnet selbst nichts. Rendern Sie die Szene mit einer Engine Ihrer Wahl: three.js, Babylon.js, PlayCanvas oder reinem WebGL.

import * as THREE from "three";
import WAS, {
PROJECT_MODE_SLAM,
TRIGGER_MODE_SLAM,
CAMERA_MODE_ENVIRONMENT,
PROVIDER_8THWALL,
EVENT_FRAME,
EVENT_VPS_READY,
EVENT_VPS_LOCALIZED,
EVENT_VPS_NOT_LOCALIZED,
EVENT_VPS_ERROR,
} from "@web-ar-studio/webar-engine-sdk";

const was = new WAS();

const { canvas, context } = await was.init({
apiKey: "your-api-key",
mode: PROJECT_MODE_SLAM,
cameraMode: CAMERA_MODE_ENVIRONMENT,
container: document.querySelector("#ar"),
triggers: [{ id: 1, mode: TRIGGER_MODE_SLAM, source: null }],
vps: { locationIds: ["your-location-id"] },
});

const renderer = new THREE.WebGLRenderer({ canvas, context });

was.on(EVENT_VPS_READY, () => console.log("VPS started"));
was.on(EVENT_VPS_LOCALIZED, ({ locationId, offset }) => {
console.log("Found the place on map", locationId, offset);
});
was.on(EVENT_VPS_NOT_LOCALIZED, ({ status, statusDescription }) => {
console.log("Not found yet:", status, statusDescription);
});
was.on(EVENT_VPS_ERROR, (message) => console.warn("VPS error:", message));

// Tracking und VPS starten mit dem Frame-Callback. Registrieren Sie ihn bei einem Tippen:
// WebXR und die Bewegungssensoren auf dem iPhone brauchen eine Geste des Nutzers.
startButton.onclick = () =>
was.on(EVENT_FRAME, () => renderer.render(scene, camera));

Lassen Sie locationIds weg, lokalisiert VPS global, ohne eine bestimmte Karte. Das dauert länger, erhöhen Sie deshalb requestTimeoutMs.

vps an init() übergeben

In Chrome auf Android wird der Kamerazugriff für VPS nur beim Start der Sitzung gewährt. Starten Sie ohne vps, lässt sich VPS in dieser Sitzung nicht mehr einschalten: setupVPS() wirft VpsError.

Wo es funktioniert​

Das SDK wählt auf dem Gerät eine Tracking-Engine (provider). Mit der Voreinstellung "auto" probiert es zuerst webxr, dann 8thwall.

EngineWoVPS
webxrChrome auf AndroidJa. Das SDK setzt die Szene selbst auf die Karte.
8thwallBrowser ohne WebXR, zum Beispiel Safari auf dem iPhoneJa. offset wenden Sie selbst an.
arclip-webarNur, wenn Sie es ausdrücklich wählenNein

Inhalte auf der Karte​

Platzieren Sie Ihre Inhalte in den Koordinaten Ihrer VPS-Karte. Sobald VPS den Ort findet, liefert EVENT_VPS_LOCALIZED den Wert offset: die Verschiebung von der Tracking-Welt auf die Karte.

  • Auf webxr hat das SDK offset bereits angewendet und blendet die Korrektur weich ein. Die Inhalte der Karte stehen also an ihrem Platz.
  • Auf 8thwall meldet das SDK offset nur. Legen Sie die Inhalte der Karte in eine Gruppe und geben Sie der Gruppe bei jeder Lokalisierung die Umkehrung von offset:
const mapRoot = new THREE.Group(); // alles, was in Kartenkoordinaten platziert ist
scene.add(mapRoot);

was.on(EVENT_VPS_LOCALIZED, ({ offset }) => {
if (was.getActiveProviderId() !== PROVIDER_8THWALL) return; // webxr wendet es selbst an
const { position: p, orientation: q } = offset;
new THREE.Matrix4()
.compose(
new THREE.Vector3(p.x, p.y, p.z),
new THREE.Quaternion(q.x, q.y, q.z, q.w),
new THREE.Vector3(1, 1, 1),
)
.invert()
.decompose(mapRoot.position, mapRoot.quaternion, mapRoot.scale);
});

Das SDK übernimmt ein Ergebnis nur, wenn die Übereinstimmung sicher genug ist und der Sprung seit dem letzten Ergebnis zu Fuß machbar wäre. Alles andere kommt als EVENT_VPS_NOT_LOCALIZED an. So springen Inhalte nicht an Orten, die sich ähneln, etwa in langen Fluren.

Ereignisse​

EreignisWas Sie erhalten
EVENT_VPS_READYNichts. VPS ist gestartet.
EVENT_VPS_LOCALIZEDlocationId, offset (position, orientation), trackingPosition, trackingRotation, vpsPosition, vpsRotation, timestamp
EVENT_VPS_NOT_LOCALIZEDstatus, statusDescription, failCount
EVENT_VPS_ERROREine Fehlermeldung als String

VPS steuern​

MethodeWas sie tut
startVPS(), stopVPS()Setzt die Lokalisierung fort oder pausiert sie
isVPSActive()Sagt, ob VPS läuft
setVPSLocationIds(ids)Wechselt zu anderen Karten; eine leere Liste lokalisiert global
setupVPS(config)Ändert die VPS-Einstellungen während einer Sitzung
updateVPSSession()Startet eine neue VPS-Sitzung, sodass frühere Ergebnisse neue nicht mehr beeinflussen
resetTracking()Verwirft die VPS-Korrektur und beginnt neu, zum Beispiel nach einem falschen Ergebnis

Einstellungen​

Alle Felder von vps sind optional. apiKey übernimmt das SDK aus init(), Sie müssen ihn nicht wiederholen.

FeldStandardWas es tut
locationIdskeineKarten, mit denen das Kamerabild verglichen wird. Ohne sie lokalisiert VPS global.
captureInterval2500Abstand zwischen Lokalisierungsanfragen, in ms
requestTimeoutMs20000Wie lange auf eine Antwort gewartet wird, in ms
maxFailsCount5Fehlversuche in Folge, nach denen das SDK eine neue VPS-Sitzung beginnt
imageFormat"jpeg""jpeg" oder "webp". Nehmen Sie WebP nur mit einem Server, der es lesen kann. Kann der Browser kein WebP kodieren, sendet das SDK JPEG.
jpegQuality1Bildqualität, von 0 bis 1
targetWidth, targetHeight540, 960Größe des Bildes, das an den Server geht
minInlierRatio, minNumInliers0.6, 600Wie sicher eine Übereinstimmung sein muss, damit sie zählt
maxJumpBaseMeters, maxJumpSpeedMps3, 2Wie weit sich ein neues Ergebnis vom letzten entfernen darf: maxJumpBaseMeters plus maxJumpSpeedMps für jede Sekunde seit dem letzten Ergebnis
serverUrlAR Clip VPSEin anderer VPS-Server
sendApiKeyHeadertrueSendet den Schlüssel im Header x-vps-apikey. Schalten Sie das nur für Ihren eigenen Server ab, der diesen Header nicht annimmt.

Fehler​

Kann VPS in dieser Sitzung nicht laufen, schlägt init() oder eine VPS-Methode mit einem Fehler namens VpsError fehl (Konstante VPS_ERROR). Fehler nach dem Start, etwa eine gescheiterte Anfrage, kommen über EVENT_VPS_ERROR.

Mehr​

  • Die README des Pakets beschreibt die übrigen Tracking-Modi, Anker und die vollständige Einrichtung mit three.js.
  • Um VPS ohne Code einzurichten, nutzen Sie VPS-Szenen in AR Clip Studio.

Weiter: Unterstützte Geräte – Smartphones, Browser und Headsets.