Hit-teszt a mesternél · magával ragadó-webhit-teszt · GitHub

A GitHub több mint 50 millió fejlesztőnek ad otthont, amelyek együttesen működnek együtt kódok befogadásában és felülvizsgálatában, projektek kezelésében és szoftverek építésében.

hit-teszt

A GitHub az, ahol a világ szoftvereket épít

Fejlesztők és vállalatok milliói építik, szállítják és tartják karban szoftverüket a GitHubon - a világ legnagyobb és legfejlettebb fejlesztői platformján.

hit-test/hit-testing-explainer.md

WebXR Device API - Találati tesztelés

Ezt a dokumentumot eredetileg az Immersive Web munkacsoportban tervezték, hogy a WebXR Device API-ra építsen. A tartalom tulajdonjogát az Immersive Web Community csoportba helyezték át további inkubálás céljából.

A dokumentum célja egy olyan terv leírása, amely lehetővé teszi a fejlesztők számára, hogy teszteljék a valós környezetet. A kontextus szempontjából hasznos lehet, ha először elolvastuk a WebXR munkamenet létrehozását, a térbeli nyomon követést, a beviteli mechanizmusokat és a kiterjesztett valóság modult.

A "találati teszt" (más néven "sugárzás") a 3D geometria és egy sugár kereszteződésének megtalálásának folyamata, amely eredetből és irányból áll. Fogalmilag a találati tesztek elvégezhetők a virtuális 3D geometria vagy a valós 3D geometria ellen. Mivel a WebXR semmilyen ismerettel nem rendelkezik a fejlesztő 3D-s jelenetdiagramjáról, nem biztosít API-kat a virtuális találati teszteléshez. Ugyanakkor rendelkezik információkkal a való világról, és módszert biztosít a fejlesztők számára, hogy teszteljék őket. A WebXR-ben a fejlesztők leggyakrabban az XRInputSource s vagy a "viewer" típusú XRReferenceSpace használatával találják meg a tesztet annak nyomon követésére, hogy hol kell rajzolni a kurzort a kézi eszközökön, vagy akár egy virtuális objektumot visszaverni a valós geometriától. A WebXR-ben az 'inline' és az 'immersive-vr' munkamenetek virtuális találati tesztek végrehajtására korlátozódnak, míg az 'immersive-ar' munkamenetek virtuális és valós találati teszteket egyaránt képesek végrehajtani.

A találati tesztelési API által engedélyezett főbb esetek a következők:

  • Olyan objektum megjelenítése, amely látszólag követi a valós felületeket, amelyekre az eszköz vagy a vezérlő mutat.
    • Az AR alkalmazások gyakran olyasmit akarnak megjeleníteni, amely a valós felületekhez tapad, amikor a felhasználó mozgatja a mutatóeszközt. Az objektum helyzetének tükröznie kell a valós világ legfrissebb ismereteit a megjelenített keretben.
    • Gyakoriság: ezt a műveletet minden egyes képkockán elvégzik.
  • Virtuális objektum elhelyezése a való világban.
    • Annak érdekében, hogy a virtuális tárgyak lehorgonyzódjanak a való világban, azokat a valós tárgyakkal azonos magasságban kell elhelyezni (padló, asztal, fal, stb.).
    • Gyakoriság: ez a művelet általában a felhasználói bevitelre válaszul történik, és minden képkockán előfordulhat.

Az alkalmazás virtuális jelenetelemeivel szembeni találatteszt kifejezetten kívül esik ezen API-n.

A találat-teszteléssel potenciálisan fel lehet használni a valós geometria elhelyezkedésének becslését az alkalmazás segítségével (például azzal, hogy több tucat sugár felhasználásával próbálunk meg találati tesztet végrehajtani) - ezt a felhasználási esetet az API nem támogatja közvetlenül, de nem fogja használni. aktívan blokkolva.

Mivel a találati teszt API potenciálisan felhasználható a felhasználói környezetre vonatkozó adatok kinyerésére, hasonlóan a valós geometriai API-khoz (bár alacsonyabb hűséggel), az UA-knak óvatosnak kell lenniük az API-hoz való hozzáférés ellenőrzésében - ennek konkrét mechanizmusai elért eredmények nem tartoznak ennek a magyarázónak a hatálya alá.

A találati teszt API alternatívájaként az alkalmazások megpróbálhattak tetszőleges találati teszteket végrehajtani, felhasználva a valós-geometriai API-kból nyert adatokat. Emiatt nem világos, hogy hasznos lenne-e egy webes expozíciós teszt, és különösen fontos lesz az API korai alkalmazóinak visszajelzése.

Valós sikertesztelés

A valós találati tesztek WebXR-ben való engedélyezésének egyik legfontosabb kihívása az, hogy a valós találati teszt eredményeinek kiszámítása teljesítmény-befolyásoló lehet, és függhet a másodlagos szálaktól számos mögöttes megvalósításban. Fejlesztői szempontból azonban az elavult aszinkron találati teszt eredményei gyakran kevésbé hasznosak.

A WebXR ezt a kihívást az XRHitTestSource & XRTransientInputHitTestSource interfészek használatával oldja meg, amelyek a tesztelőfizetés elérésének fogantyúiként szolgálnak. A találati tesztforrás jelenléte jelzi a felhasználói ügynök számára, hogy a fejlesztő a találati teszt eredményeit kívánja lekérdezni a következő XRFrame-ekben. A felhasználói ügynök ezután előre kiszámíthatja a találati teszt eredményeit a találati teszt forrása tulajdonságai alapján úgy, hogy minden XRFrame együtt lesz az összes "feliratkozott" találati teszt eredményével.

Találati tesztforrás kérése

XRHitTestSource létrehozásához a fejlesztők hívják meg az XRSession.requestHitTestSource () függvényt. Ez a függvény elfogad egy XRHitTestOptionsInit szótárt a következő kulcs-érték párokkal:

  • hely szükséges, és az XRStér a nyomonkövetési forrás által követendő. Mivel ez az XRSpace minden képkockáját frissíti, az XRHitTestSource együtt fog mozogni vele.
  • entityTypes - lásd az eredmények korlátozását egy adott entitásra.
  • Az offsetRay opcionális, és ha rendelkezésre áll, akkor az az XRRay, amelyből a találati tesztet el kell végezni. A sugár koordinátáit a tér definiálja kiindulópontként. Ha nincs megadva egy offsetRay, akkor a találati tesztet egy olyan sugár segítségével hajtják végre, amely egybeesik az űr eredetével és "előre" irányban mutat (lásd: Sugárzás szakasz).

Ebben a példában egy XRHitTestSource jön létre kissé a "néző" XRReferenceSpace közepe felett. A fejlesztő ugyanis azt tervezi, hogy felhasználói felület elemeket rajzol a kézi AR eszköz magával ragadó nézete aljára, miközben továbbra is egy középre mutató kurzort szeretne érzékeltetni. További információ: Kurzorok és kiemelések megjelenítése az Input Explainer részben.

Előzetes regisztráció tranziens bemeneti forrásokhoz

Míg az aszinkron találati tesztforrás létrehozása sok esetben hasznos, átmeneti bemeneti források esetében problematikus. Ha XRHitTestSource-t kérnek az XRSession.requestHitTestSource () API-t használó bemeneti források cseréje eseményre válaszolva, akkor több képkockát is igénybe vehet, mire a válaszként létrehozott találati tesztforrás képes lesz találati teszt eredményeinek biztosítására, mire a bemeneti forrás már nem biztos, hogy megfelel létezik. Ez még akkor is így lehet, ha egy képkockás késleltetés van a találati tesztforrás létrehozási kérelme és létrehozása között. A valós találati tesztelés részben említett lehetséges teljesítményhatások miatt azonban fontos, hogy a WebXR ne végezzen találati teszteket a fejlesztőnek nem szükséges bemeneti forrásoknál.

A probléma megoldása érdekében, és továbbra is lehetővé téve a webalkalmazások számára, hogy átmeneti bemeneti forrásokhoz lekérési tesztforrásokat kérjenek, az alkalmazások használhatják az XRSession.requestHitTestSourceForTransientInput ():

Az XRSession.requestHitTestSourceForTransientInput () metódus elfogadja a szótárat a következő kulcs-érték párokkal:

  • profil szükséges, és meghatározza a bemeneti profil nevét (lásd a bemeneti profil nevét), amelynek az átmeneti bemeneti forrásnak meg kell egyeznie ahhoz, hogy a létrehozásakor találati tesztként vegyék figyelembe (például válaszként a felhasználói bemenetre).
  • entityTypes - lásd az eredmények korlátozását egy adott entitásra.
  • Az offsetRay opcionális, és meghatároz egy XRRay-t, amelyhez a találati tesztet el kell végezni. A sugarat úgy értelmezzük, mintha a fent említett profilnak megfelelő átmeneti bemeneti forrás a targetRaySpace-hez viszonyulna.

Találati teszt eredményei

Ahhoz, hogy szinkron találati teszt eredményeket kapjon egy adott keretről, a fejlesztők az XRFrame.getHitTestResults () függvényt hívják meg, amely egy XRHitTestSource-t ad át hitTestSource paraméterként. Ez a funkció egy FrozenArray-t ad vissza, amelyben az XRHitTestResult s távolságot rendezi a találati teszt elvégzéséhez használt XRRay mentén, a legközelebbi a 0. pozícióban. Ha nincs eredmény, a tömbnek nulla lesz a hossza. Az XRHitTestResult felület feltár egy olyan módszert, getPose (XRSpace baseSpace), amely felhasználható az eredmény jelentésének lekérdezésére. Ha az aktuális keretben az baseSpace paraméternek átadott XRSpace kapcsolata nem található a találati teszt eredményéhez viszonyítva, akkor a függvény nullát ad vissza .

Az átmeneti bemeneti forrás találati teszt-előfizetésének találati teszt eredményeinek megszerzéséhez egy adott keretben a fejlesztők az XRFrame.getHitTestResultsForTransientInput () -t hívják meg, amely az XRTransientInputHitTestSource paramétert adja át hitTestSource paraméterként. Ez a funkció egy FrozenArray-t ad vissza. A tömb minden eleme tartalmazni fogja a bemeneti forrás egy példányát, amelyet az eredmények megszerzéséhez használtak, és a tényleges találati teszt eredményei a FrozenArray eredményekben lesznek feltüntetve, a találati teszt végrehajtásához használt sugár távolsága szerint rendezve. legközelebbi eredmény a 0. pozíciónál.

Az eredmények korlátozása meghatározott entitásokra

Az alapul szolgáló platformról visszaküldött találati teszt eredményei információt hordozhatnak a valós entitásról, amely a találati teszt eredményét okozta. Példák az entitásokra: síkok és jellemző pontok. Az alkalmazás meghatározhatja, hogy milyen entitásokat kell használni egy adott találati teszt-előfizetéshez azáltal, hogy beállítja az entitásTípusok kulcs értékét az XRHitTestOptionsInit/XRTransientInputHitTestOptionsInit mezőben:

Ha több értéket használ az entitásTypes kulcs tömbjében, logikai "vagy" szűrőként kezeljük. Például az entitásTípusok: ["sík", "pont"] azt jelentené, hogy az XRFrame.getHitTestResults ()/XRFrame.getHitTestResultsForTransientInput () eredményeként visszakapott tömbök tartalmazzák a valós síkokon kívüli találati teszteket, valamint a a felhasználó környezetében észlelt jellemző pontok; ezek azok a találati teszt eredmények, amelyek entitásai megfelelnek egy feltételnek (type == "sík") vagy (type == "point"), feltételezve, hogy a típus tartalmazza az adott entitás egy típusát. Ha az alkalmazás nem talál értéket az entitásTypes kulcshoz a találati tesztforrás kérésekor, akkor a ["sík"] alapértelmezett értéke lesz használva.

A találati teszt leiratkozása

Annak érdekében, hogy az alkalmazások leiratkozhassanak a találati tesztforrásokról, a találati tesztforrás és az átmeneti bemenethez használt tesztforrás egy Cancel () metódust tesznek lehetővé:

Az XRRay objektum mind origót, mind irányt tartalmaz, mindkettő DOMPointReadOnly s néven megadva. Az origó egy 3D koordinátát képvisel a térben, aw komponenssel, amelynek egyenlőnek kell lennie 1-nek, az irány pedig egy normalizált 3D irányú vektor, amelynek aw komponense 0-nak kell lennie. Az XRRay meghatároz egy mátrixot is, amely a sugárból származó transzformációt ábrázolja. a [0, 0, 0] pontnál kezdődik és a negatív Z tengelyen lefelé nyúlik az XRRay eredete és iránya által leírt sugárig. Ez hasznos a sugár grafikus ábrázolásának pozícionálásához.

A virtuális és a valós slágerteszt kombinálása

Az XR-élmények reális jelenlétének megteremtésének egyik kulcsfontosságú eleme azon a képességen alapszik, hogy megtudja, hogy a találati teszt keresztezi-e a virtuális vagy a valós geometriát. Például a fejlesztők egy virtuális objektumot el akarnak helyezni a való világba, de csak akkor, ha egy másik virtuális objektum még nincs jelen. A jövőbeli specifikációk felülvizsgálatakor, amikor a valós elzáródás lehetséges a WebXR használatával, a fejlesztők valószínűleg képesek virtuális gombokat létrehozni, amelyek csak "kattinthatók", ha nincs fizikai objektum.

Van egy csomó technika, amellyel meghatározható a kombinált találati teszt eredménye. Például a fejlesztő dönthet úgy, hogy másként súlyozza a találati teszt eredményeit, ha a felhasználó már interakcióba lép egy adott objektummal. Ebben a magyarázóban egy egyszerű példa található a találati teszt eredményeinek ötvözésére: ha találunk virtuális találati tesztet, akkor azt visszaküldjük, különben a minta a legközelebbi valós találati teszt eredményt adja. Mivel a WebXR semmilyen ismerettel nem rendelkezik a fejlesztő 3D jelenetdiagramjáról, ez a minta az XRFrame.getPose () függvényt használja egy sugár létrehozására, és átadja azt a 3D motor virtuális találati teszt funkciójának.

Biztonsági és adatvédelmi szempontok

Ez a funkció segít a webhelynek a felhasználó fizikai környezetének kissé alacsony pontossággal történő feltérképezésében. A specifikáció lehetővé teszi az UA számára, hogy korlátozza a találati teszt-előfizetések használatát egy XRRay alapján. A sok sugár használata lehetővé tenné, hogy az oldal részletesebben lássa a környezetet, és az UA dönthet úgy, hogy egy bizonyos szám után a kérések feleslegesek.

Ez a szolgáltatás alapértelmezés szerint blokkolva van harmadik fél környezetében, és egy Szolgáltatás-házirend jelzőn keresztül vezérelhető.

A. függelék: Javasolt részleges IDL

Ez egy részleges IDL, és additívnak tekinthető a fő magyarázatban található alapvető IDL-hez.

Jelenleg nem hajthatja végre ezt a műveletet.

Egy másik füllel vagy ablakkal jelentkezett be. Töltse be újra a munkamenet frissítéséhez. Kijelentkezett egy másik fülön vagy ablakban. Töltse be újra a munkamenet frissítéséhez.