A kézkövető rendszer egy személy tenyerét és ujjait használja bemenetként. Minden ujj, a teljes tenyér és kézmozdulat helyzetéről és elforgatásáról rendelkezésre állnak adatok. Az Unreal 4.26-tól kezdve a kézkövetés az Unreal HeadMountedDisplay beépülő modulon alapul, és egy közös API-t használ az összes XR platformon és eszközön. A Windows Mixed Reality és az OpenXR rendszerek esetében is ugyanaz a funkció.
Kézi póz
A kézi póz lehetővé teszi a felhasználók kezeinek és ujjainak nyomon követését és használatát bemenetként, amely a Blueprintsben és a C++-ban is elérhető. Az Unreal API koordinátarendszerként küldi el az adatokat az Unreal Engine-rel szinkronizált kullancsokkal.
A hierarchiát enumerálás ismerteti EHandKeypoint :
Ezeket az adatokat a felhasználó kezéből is lekérheti a Mozgásvezérlő adatainak lekérése funkcióval. Ez a függvény egy XRMotionControllerData struktúrát ad vissza. Az alábbiakban egy tervmintaszkript látható, amely elemzi az XRMotionControllerData struktúrát, hogy lekérje a közös helyeket, és egy hibakeresési koordinátarendszert rajzoljon az egyes illesztések helyére.
Fontos ellenőrizni, hogy a struktúra érvényes-e, és hogy kézről van-e szó. Ellenkező esetben meghatározatlan viselkedést kaphat a pozíciókhoz, a rotációkhoz és a radiitömbökhöz való hozzáférésben.
Az EWMRHandKeypoint enumerálás a Hand csonthierarchiáját írja le. Az egyes kézkulcspontokat megtalálja a tervek között:
A GetHandJointTransform használatával térbeli adatokat adhat vissza a kézből. Az adatok minden keretet frissítenek, de ha egy kereten belül van, a visszaadott értékek gyorsítótárazva lesznek. Teljesítménybeli okokból nem ajánlott nehéz logikát alkalmazni ebben a függvényben.
Íme a GetHandJointTransform függvényparamétereinek lebontása:
Hand – lehet a felhasználók bal vagy jobb keze.
Kulcspont – a kéz csontja.
Átalakítás – a csontbázis koordinátái és tájolása. Kérheti a következő csont alapjaként, hogy lekérje a csont végére vonatkozó transzformációs adatokat. Egy speciális hegycsont véget vet a distálisnak.
**Radius – a csont aljának sugara.
**Visszatérési érték – igaz, ha a csont nyomon követi ezt a keretet, hamis, ha a csont nincs nyomon követve.
Ha a Windows Mixed Reality és a Live Link beépülő modul engedélyezve van:
Válassza az Élő hivatkozás ablak > lehetőséget a Live Link szerkesztőablak megnyitásához.
Válassza a Forrás lehetőséget, és engedélyezze Windows Mixed Reality Hand Tracking Source (Kézkövetési forrás) lehetőséget
Miután engedélyezte a forrást, és megnyitott egy animációs objektumot, bontsa ki az Animáció szakaszt a Jelenet előnézete lapon is, és tekintse meg a további beállításokat.
A kézanimáció hierarchiája megegyezik a következővel EWMRHandKeypoint: . Az animáció a WindowsMixedRealityHandTrackingLiveLinkRemapAsset használatával újracélozható:
Az OpenXR-ben a kézi hálószemek nyomon követett geometriaként való lekéréséhez meg kell hívnia a Set Use Hand Mesh with Enabled Tracking Geometry (Kézi háló használata engedélyezett nyomkövetési geometriával) meghívását.
Ennek a módnak az engedélyezéséhez hívja meg a Set Use Hand Mesh with Enabled Tracking Geometry (A Hand Mesh használata engedélyezett nyomkövetési geometriával) lehetőséget:
Megjegyzés
Nem lehetséges, hogy mindkét mód egyszerre legyen engedélyezve. Ha engedélyezi az egyiket, a másik automatikusan le lesz tiltva.
A Hand Mesh-adatok elérése
A kézi háló adatainak elérése előtt a következőket kell elvégeznie:
Válassza ki az ARSessionConfig objektumot, bontsa ki az AR-beállítások –> Világleképezési beállítások elemet, és jelölje be a Hálóadatok létrehozása a követett geometriából jelölőnégyzetet.
Az alábbiakban az alapértelmezett hálóparaméterek találhatók:
Mesh-adatok használata az occlusionhoz
Ütközés generálása Mesh-adatokhoz
Nav Mesh létrehozása Mesh-adatokhoz
Mesh-adatok renderelése Drótvázban – a létrehozott hálót megjelenítő hibakeresési paraméter
A rendszer ezeket a paraméterértékeket használja a térbeli leképezési háló és a kézi háló alapértelmezett értékeiként. Ezeket bármikor módosíthatja a Tervek vagy bármely háló kódjában.
C++ API-referencia
A segítségével EEARObjectClassification kézzel készített hálóértékeket kereshet az összes nyomon követhető objektumban.
enum class EARObjectClassification : uint8
{
// Other types
HandMesh,
};
A rendszer akkor hívja meg a következő meghatalmazottakat, ha a rendszer bármilyen nyomon követhető objektumot észlel, beleértve a kézi hálót is.
class FARSupportInterface
{
public:
// Other params
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableAdded)
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableUpdated)
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableRemoved)
};
Győződjön meg arról, hogy a delegált kezelők az alábbi függvényaírást követik:
ARTrackableNotify összetevő hozzáadása terv aktorhoz
Lépjen a Részletek panelre, és bontsa ki az Események szakaszt.
Írja felül a Követett geometria hozzáadása/frissítése/eltávolítása parancsot az eseménygrafikon következő csomópontjaival:
Hand Mesh-vizualizáció az OpenXR-ben
A kézháló megjelenítésének ajánlott módja az Epic XRVisualization beépülő moduljának használata a Microsoft OpenXR beépülő modullal együtt.
Ezután a tervszerkesztőben az Enabled XRVisualization paraméterrel használja a Microsoft OpenXR beépülő modulHand Mesh használata beállítása függvényét:
A renderelési folyamat kezeléséhez az XRVisualization renderelési mozgásvezérlőt kell használnia:
Az eredmény:
Ha valami összetettebbre van szüksége, például egy kézi hálót egyéni árnyékolóval rajzolni, akkor a hálókat nyomon követett geometriaként kell beszereznie.
Kézi sugarak
A kéz pózolása olyan szoros interakciókhoz használható, mint az objektumok megragadása vagy a gombok lenyomása. Néha azonban olyan hologramokkal kell dolgoznia, amelyek távol vannak a felhasználóktól. Ez kézi sugarakkal is elvégezhető, amelyek a C++ és a Blueprints mutatóeszközeiként is használhatók. Rajzolhat egy sugarat a kezéből egy távoli pontra, és az Unreal ray tracing segítségével kiválaszthat egy hologramot, amely egyébként elérhetetlen lenne.
Fontos
Mivel az összes függvényeredmény minden keretet módosít, az összes képkocka hívhatóvá vált. A tiszta és nem kifogástalan vagy hívható függvényekkel kapcsolatos további információkért tekintse meg a blueprint felhasználói guidját a függvényeken.
A kézsugarak adatainak lekéréséhez használja a Mozgásvezérlő adatainak lekérése függvényt az előző szakaszban. A visszaadott struktúra két paramétert tartalmaz, amellyel kézi sugárt hozhat létre – a célpozíciót és a célforgatást. Ezek a paraméterek egy sugarat képeznek, amelyet a könyöke irányít. Vegye őket, és keresse meg a hologramot, amely rámutat.
Az alábbiakban egy példát mutatunk be annak meghatározására, hogy egy kézi sugár eléri-e a widgetet, és egyéni találati eredményt ad-e:
A Hand Rays a Blueprintsben való használatához keresse meg az Windows Mixed Reality HMD alatt található műveletek bármelyikét:
A C++-ban való hozzáféréshez a hívókódfájl tetejére is fel kell vennie WindowsMixedRealityFunctionLibrary.h őket.
Enumeráció
Az EHMDInputControllerButtons területen is hozzáférhet a bemeneti esetekhez, amelyek a Blueprintsben használhatók:
A C++-ban való hozzáféréshez használja az enumerálási EHMDInputControllerButtons osztályt:
enum class EHMDInputControllerButtons : uint8
{
Select,
Grasp,
//......
};
Az alábbiakban a két alkalmazható enumerálási esetet soroljuk fel:
Select – Felhasználó által aktivált Select esemény.
A HoloLens 2 a légi koppintással, a tekintettel és a véglegesítéssel, vagy a "Kiválasztás" beállítással aktiválódik, amelyen engedélyezve van a hangbemenet.
Grasp – A felhasználó aktiválta a Grasp eseményt.
A HoloLens 2 aktiválja a felhasználó ujjainak hologramon való bezárásával.
A kézi háló nyomkövetési állapotát az alábbi számon keresztül EHMDTrackingStatus érheti el c++ nyelven:
enum class EHMDTrackingStatus : uint8
{
NotTracked,
//......
Tracked
};
Az alábbiakban a két alkalmazható enumerálási esetet soroljuk fel:
NotTracked – a kéz nem látható
Nyomon követve – a kéz teljes mértékben nyomon van követve
Struktúra
A PointerPoseInfo struktúra a következő kézadatokkal kapcsolatos információkat nyújt:
Forrás – a kéz eredete
Irány – a kéz iránya
Fel – a kéz felfelé vektora
Tájolás – tájolás kvaternion
Nyomon követés állapota – aktuális nyomkövetési állapot
A PointerPoseInfo szerkezetet a Terveken keresztül érheti el az alábbiak szerint:
A HoloLens 2 nyomon követi a térbeli kézmozdulatokat, ami azt jelenti, hogy ezeket a kézmozdulatokat bemenetként rögzítheti. A kézmozdulatkövetés egy előfizetési modellen alapul. A "Kézmozdulatok konfigurálása" függvénnyel jelezheti az eszköznek, hogy mely kézmozdulatokat szeretné nyomon követni. A kézmozdulatokkal kapcsolatos további részletek a HoloLens 2 Alapszintű használat dokumentum.
Ezután kódot kell hozzáadnia a következő eseményekre való feliratkozáshoz:
OpenXR
Az OpenXR-ben a kézmozdulat-események nyomon követése a bemeneti folyamaton keresztül történik. A kézművelet használatával az eszköz automatikusan felismeri a Koppintás és a Kéztartás kézmozdulatokat, a többit azonban nem. Ezek neve OpenXRMsftHandInteraction Select and Grip mappings ( OpenXRMsftHandInteraction Select and Grip mappings). Nem kell engedélyeznie az előfizetést, deklarálnia kell az eseményeket a Project Settings/Engine/Input fájlban, a következőképpen:
A Blueprint függvényt a Windows Mixed Reality Térbeli bemenet területen, a C++ függvényt pedig a hívókódfájlba való hozzáadásával WindowsMixedRealitySpatialInputFunctionLibrary.h találja meg.
A funkcióval engedélyezheti és letilthatja a kézmozdulat-rögzítést CaptureGestures . Amikor egy engedélyezett kézmozdulat aktiválja a bemeneti eseményeket, a függvény visszaadja true , ha a kézmozdulatok rögzítése sikeres volt, és false hiba történt.
Ha az Általunk meghatározott Unreal fejlesztési utat követi, akkor az MRTK alapvető építőelemeinek felfedezése közben jár. Innen továbbléphet a következő építőelemre: