Sistem pelacakan tangan menggunakan telapak tangan dan jari seseorang sebagai input. Data pada posisi dan rotasi setiap jari, seluruh telapak tangan, dan gerakan tangan tersedia. Mulai dari Unreal 4.26, pelacakan tangan didasarkan pada plugin Unreal HeadMountedDisplay dan menggunakan API umum di semua platform dan perangkat XR. Fungsionalitas sama untuk sistem Windows Mixed Reality dan OpenXR.
Pose tangan
Pose tangan memungkinkan Anda melacak dan menggunakan tangan dan jari pengguna Anda sebagai input, yang dapat diakses di Cetak Biru dan C++. API Unreal mengirimkan data sebagai sistem koordinat, dengan kutu disinkronkan dengan Mesin Tidak Nyata.
Anda bisa mendapatkan semua data ini dari tangan pengguna menggunakan fungsi Dapatkan Data Pengontrol Gerakan. Fungsi tersebut mengembalikan struktur XRMotionControllerData . Di bawah ini adalah sampel skrip Cetak Biru yang mengurai struktur XRMotionControllerData untuk mendapatkan lokasi sendi tangan dan menggambar sistem koordinat debug di setiap lokasi bersama.
Penting untuk memeriksa apakah struktur valid dan itu adalah tangan. Jika tidak, Anda mungkin mendapatkan perilaku yang tidak terdefinisi dalam akses ke posisi, rotasi, dan array radii.
EWMRHandKeypoint Enum menggambarkan hierarki tulang Tangan. Anda dapat menemukan setiap titik kunci tangan yang tercantum dalam Cetak Biru Anda:
Anda dapat menggunakan GetHandJointTransform untuk mengembalikan data spasial dari tangan. Data memperbarui setiap bingkai, tetapi jika Anda berada di dalam bingkai, nilai yang dikembalikan di-cache. Tidak disarankan untuk memiliki logika yang berat dalam fungsi ini karena alasan performa.
Berikut adalah perincian parameter fungsi GetHandJointTransform:
Tangan – bisa menjadi pengguna di sebelah kiri atau kanan.
Keypoint – tulang tangan.
Transformasi – koordinat dan orientasi dasar tulang. Anda dapat meminta dasar tulang berikutnya untuk mendapatkan data transformasi untuk akhir tulang. Tulang Tip khusus memberikan ujung distal.
**Radius—radius pangkal tulang.
**Kembalikan Nilai—benar jika tulang dilacak bingkai ini, salah jika tulang tidak dilacak.
Animasi Tautan Langsung Tangan
Pose tangan diekspos ke Animasi menggunakan plugin Live Link.
Jika plugin Windows Mixed Reality dan Live Link diaktifkan:
Pilih Tautan Langsung Jendela > untuk membuka jendela editor Tautan Langsung.
Pilih Sumber dan aktifkan Sumber Pelacakan Tangan Windows Mixed Reality
Setelah Anda mengaktifkan sumber dan membuka aset animasi, perluas bagian Animasi di tab Adegan Pratinjau juga lihat opsi tambahan.
Hierarki animasi tangan sama seperti dalam EWMRHandKeypoint. Animasi dapat ditargetkan ulang menggunakan WindowsMixedRealityHandTrackingLiveLinkRemapAsset:
Mendapatkan jala tangan sebagai geometri terlacak di OpenXR mengharuskan Anda memanggil Atur Gunakan Jala Tangan dengan Geometri Pelacakan yang Diaktifkan.
Untuk mengaktifkan mode tersebut, Anda harus memanggil Atur Gunakan Jala Tangan dengan Geometri Pelacakan yang Diaktifkan:
Catatan
Kedua mode tidak dapat diaktifkan secara bersamaan. Jika Anda mengaktifkannya, yang lain secara otomatis dinonaktifkan.
Mengakses Data Jala Tangan
Sebelum dapat mengakses data jala tangan, Anda harus:
Pilih aset ARSessionConfig Anda, perluas pengaturan AR Pengaturan -> Pemetaan Dunia, dan centang Buat Data Jala dari Geometri Terlacak.
Di bawah ini adalah parameter jala default:
Gunakan Data Jala untuk Oklusi
Hasilkan Tabrakan untuk Data Jala
Hasilkan Nav Mesh untuk Data Jala
Render Mesh Data in Wireframe – parameter debug yang menunjukkan jala yang dihasilkan
Nilai parameter ini digunakan sebagai default jala pemetaan spasial dan jala tangan. Anda dapat mengubahnya kapan saja di Cetak Biru atau kode untuk jala apa pun.
Referensi API C++
Gunakan EEARObjectClassification untuk menemukan nilai jala tangan di semua objek yang dapat dilacak.
enum class EARObjectClassification : uint8
{
// Other types
HandMesh,
};
Delegasi berikut dipanggil ketika sistem mendeteksi objek yang dapat dilacak, termasuk jala tangan.
class FARSupportInterface
{
public:
// Other params
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableAdded)
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableUpdated)
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableRemoved)
};
Pastikan penangan delegasi Anda mengikuti tanda tangan fungsi di bawah ini:
Menambahkan Komponen ARTrackableNotify ke aktor Blueprint
Buka panel Detail dan perluas bagian Peristiwa .
Timpa Add/Update/Remove Tracked Geometry dengan node berikut di Event Graph Anda:
Visualisasi Jala Tangan di OpenXR
Cara yang disarankan untuk memvisualisasikan jala tangan adalah dengan menggunakan plugin XRVisualization Epic bersama dengan plugin Microsoft OpenXR.
Kemudian di editor cetak biru, Anda harus menggunakan fungsi Atur Gunakan Jala Tangan dari plugin Microsoft OpenXR dengan XRVisualization yang Diaktifkan sebagai parameter:
Untuk mengelola proses penyajian, Anda harus menggunakan Render Motion Controller dari XRVisualization:
Hasilnya:
Jika Anda membutuhkan sesuatu yang lebih rumit, seperti menggambar jala tangan dengan shader kustom, Anda perlu mendapatkan jala sebagai geometri terlacak.
Sinar tangan
Mendapatkan pose tangan berfungsi untuk interaksi dekat seperti mengambil objek atau menekan tombol. Namun, terkadang Anda perlu bekerja dengan hologram yang jauh dari pengguna Anda. Ini dapat dicapai dengan sinar tangan, yang dapat digunakan sebagai perangkat penunjuk di C++ dan Cetak Biru. Anda dapat menarik sinar dari tangan Anda ke titik yang jauh dan, dengan beberapa bantuan dari pelacakan sinar tidak nyata, pilih hologram yang jika tidak akan berada di luar jangkauan.
Penting
Karena semua hasil fungsi mengubah setiap bingkai, semuanya dibuat dapat dipanggil. Untuk informasi selengkapnya tentang fungsi murni dan tidak murni atau dapat dipanggil, lihat panduan pengguna Cetak biru tentang fungsi.
Untuk mendapatkan data untuk sinar tangan, Anda harus menggunakan fungsi Dapatkan Data Pengontrol Gerakan dari bagian sebelumnya. Struktur yang dikembalikan berisi dua parameter yang dapat Anda gunakan untuk membuat sinar tangan – Aim Position dan Aim Rotation. Parameter ini membentuk sinar yang diarahkan oleh siku Anda. Anda harus membawanya dan menemukan hologram yang diarahkan oleh.
Di bawah ini adalah contoh menentukan apakah sinar tangan mengenai Widget dan mengatur hasil hit kustom:
Untuk menggunakan Sinar Tangan di Cetak Biru, cari salah satu tindakan di bawah HMD Windows Mixed Reality:
Untuk mengaksesnya di C++, sertakan WindowsMixedRealityFunctionLibrary.h ke bagian atas file kode panggilan Anda.
Enum
Anda juga memiliki akses ke kasus input di bawah EHMDInputControllerButtons, yang dapat digunakan dalam Cetak Biru:
Untuk akses di C++, gunakan EHMDInputControllerButtons kelas enum:
enum class EHMDInputControllerButtons : uint8
{
Select,
Grasp,
//......
};
Di bawah ini adalah perincian dari dua kasus enum yang berlaku:
Pilih - Pengguna dipicu Pilih peristiwa.
Dipicu di HoloLens 2 dengan ketukan udara, tatapan, dan penerapan, atau dengan mengatakan "Pilih" dengan input suara diaktifkan.
Grasp - Peristiwa Grasp yang dipicu pengguna.
Dipicu di HoloLens 2 dengan menutup jari pengguna pada hologram.
Anda dapat mengakses status pelacakan jala tangan Anda di C++ melalui enum yang EHMDTrackingStatus ditunjukkan di bawah ini:
enum class EHMDTrackingStatus : uint8
{
NotTracked,
//......
Tracked
};
Di bawah ini adalah perincian dari dua kasus enum yang berlaku:
NotTracked –- tangan tidak terlihat
Terlacak –- tangan dilacak sepenuhnya
Struktur
Struktur PointerPoseInfo dapat memberi Anda informasi tentang data tangan berikut:
Asal – asal tangan
Arah – arah tangan
Up – atas vektor tangan
Orientasi – kuaternion orientasi
Status Pelacakan – status pelacakan saat ini
Anda dapat mengakses struct PointerPoseInfo melalui Blueprints, seperti yang ditunjukkan di bawah ini:
HoloLens 2 melacak gerakan spasial, yang berarti Anda dapat menangkap gerakan tersebut sebagai input. Pelacakan gerakan didasarkan pada model langganan. Anda harus menggunakan fungsi "Konfigurasi Gerakan" untuk memberi tahu perangkat gerakan mana yang ingin Anda lacak. Anda dapat menemukan detail selengkapnya tentang gerakan adalah dokumen Penggunaan Dasar HoloLens 2.
Kemudian Anda harus menambahkan kode untuk berlangganan peristiwa berikut:
OpenXR
Di OpenXR, peristiwa gerakan dilacak melalui alur input. Menggunakan interaksi tangan, perangkat dapat secara otomatis mengenali gerakan Ketuk dan Tahan, tetapi bukan yang lain. Mereka dinamai sebagai Pemetaan OpenXRMsftHandInteraction Select dan Grip. Anda tidak perlu mengaktifkan langganan, Anda harus mendeklarasikan peristiwa di Project Pengaturan/Engine/Input, seperti ini:
Anda dapat menemukan fungsi Cetak Biru di bawah Input Spasial Windows Mixed Reality, dan fungsi C++ dengan menambahkan WindowsMixedRealitySpatialInputFunctionLibrary.h dalam file kode panggilan Anda.
Anda dapat mengaktifkan dan menonaktifkan pengambilan gerakan dengan CaptureGestures fungsi . Saat gerakan yang diaktifkan mengaktifkan peristiwa input, fungsi mengembalikan true jika tangkapan gerakan berhasil, dan false jika ada kesalahan.
Jika Anda mengikuti perjalanan pengembangan Unreal yang telah kami susun, Anda berada di tengah-tengah menjelajahi blok bangunan inti MRTK. Dari sini, Anda dapat melanjutkan ke blok penyusun berikutnya: