Porting aplikasi HoloLens (Generasi ke-1) ke HoloLens 2
Panduan ini disesuaikan untuk membantu pengembang dengan aplikasi Unity yang ada untuk HoloLens (generasi ke-1) port aplikasi mereka ke perangkat HoloLens 2. Ada empat langkah utama untuk memindahkan aplikasi Unity HoloLens (generasi ke-1) ke HoloLens 2.
Bagian di bawah ini informasi detail untuk setiap tahap:
Langkah 1 | Langkah 2 | Langkah 3 | Langkah 4 |
---|---|---|---|
Unduh alat terbaru | Memperbarui Proyek Unity | Kompilasi untuk ARM | Migrasi ke MRTK v2 |
Prasyarat
Kami sangat menyarankan Anda menggunakan kontrol sumber untuk menyimpan rekam jepret status asli aplikasi Anda sebelum memulai proses porting. Kami juga menyarankan agar Anda menyimpan status titik pemeriksaan pada berbagai waktu selama proses. Anda mungkin merasa berguna untuk memiliki instans lain dari aplikasi asli yang terbuka di Unity sehingga Anda dapat membandingkan secara berdampingan selama proses porting.
Catatan
Sebelum porting, pastikan Anda memiliki alat terbaru yang diinstal untuk pengembangan Windows Mixed Reality. Untuk sebagian besar pengembang HoloLens yang ada, ini melibatkan pembaruan ke versi terbaru Visual Studio 2019 dan menginstal Windows SDK yang sesuai. Konten yang mengikuti penyelaman lebih jauh ke versi Unity yang berbeda dan Mixed Reality Toolkit (MRTK) Versi 2.
Untuk informasi selengkapnya, lihat Menginstal alat.
Memigrasikan proyek Anda ke versi terbaru Unity
Jika Anda menggunakan MRTK v2, kami sarankan Anda memperbarui ke MRTK 2.7 sebelum meningkatkan proyek Anda ke Unity 2020.3 LTS. MRTK 2.7 mendukung Unity 2018, 2019, dan 2020, memungkinkan Anda memastikan proyek Anda siap untuk Unity 2020 bahkan sebelum Anda meningkatkan Unity. Menilai dependensi plugin apa pun yang saat ini ada di proyek Anda dan menentukan apakah DLL ini dapat dibangun untuk ARM64. Untuk proyek dengan plugin dependen ARM yang keras, Anda mungkin perlu terus membangun aplikasi Untuk ARM.
Memperbarui pengaturan adegan/proyek di Unity
Setelah memperbarui ke Unity 2020.3 LTS, kami sarankan Anda memperbarui pengaturan tertentu di Unity untuk hasil optimal pada perangkat. Pengaturan ini diuraikan secara rinci di bawah pengaturan yang direkomendasikan untuk Unity.
Untuk menegaskan kembali, back-end skrip .NET tidak digunakan lagi di Unity 2018 dan dihapus per Unity 2019. Anda harus sangat mempertimbangkan untuk mengalihkan proyek Anda ke IL2CPP.
Catatan
Backend pembuatan skrip IL2CPP dapat menyebabkan waktu build yang lebih lama dari Unity ke Visual Studio. Pengembang harus menyiapkan mesin pengembang mereka untuk mengoptimalkan waktu build IL2CPP. Anda mungkin juga mendapat manfaat dari menyiapkan server cache, terutama untuk proyek Unity dengan sejumlah besar aset (tidak termasuk file skrip) atau terus mengubah adegan dan aset. Saat membuka proyek, Unity menyimpan aset yang memenuhi syarat ke dalam format cache internal pada komputer pengembang. Item harus diimpor ulang dan diproses ulang saat dimodifikasi. Proses ini dapat dilakukan sekali, disimpan di server cache, dan kemudian dibagikan dengan pengembang lain untuk menghemat waktu, dibandingkan dengan setiap pengembang yang memproses kembali impor perubahan baru secara lokal.
Setelah mengatasi perubahan mencolok yang dihasilkan dari pindah ke versi Unity yang diperbarui, buat dan uji aplikasi Anda saat ini di HoloLens (generasi ke-1). Ini adalah waktu yang tepat untuk membuat dan menyimpan penerapan ke dalam kontrol sumber.
Mengkompilasi dependensi/plugin untuk prosesor ARM
HoloLens (generasi ke-1) menjalankan aplikasi pada prosesor x86; HoloLens 2 menggunakan prosesor ARM. Aplikasi HoloLens yang ada perlu di-port untuk mendukung ARM. Seperti disebutkan sebelumnya, Unity 2018 LTS mendukung kompilasi aplikasi ARM32 sementara Unity 2019 dan yang lebih baru mendukung kompilasi aplikasi ARM32 dan ARM64. Mengembangkan untuk aplikasi ARM64 lebih disukai karena ada perbedaan material dalam performa. Namun, ini mengharuskan semua dependensi plugin juga dibangun untuk ARM64.
Tinjau semua dependensi DLL di aplikasi Anda. Sebaiknya hapus dependensi yang tidak lagi diperlukan untuk proyek Anda. Untuk plugin yang tersisa yang diperlukan, serap biner ARM32 atau ARM64 masing-masing ke dalam proyek Unity Anda.
Setelah menyerap DLL yang relevan, buat solusi Visual Studio dari Unity dan kompilasi AppX untuk ARM di Visual Studio untuk memverifikasi bahwa aplikasi Anda dapat dibangun untuk prosesor ARM. Kami menyarankan agar Anda menyimpan aplikasi sebagai penerapan dalam solusi kontrol sumber Anda.
Penting
Aplikasi yang menggunakan MRTK v1 dapat dijalankan di HoloLens 2 setelah mengubah target build ke ARM, dengan asumsi bahwa semua persyaratan lain terpenuhi. Ini termasuk memastikan Anda memiliki versi ARM dari semua plugin Anda. Namun, aplikasi Anda tidak akan memiliki akses ke fungsi khusus HoloLens 2 seperti pelacakan tangan dan mata yang diartikulasikan. MRTK v1 dan MRTK v2 memiliki namespace layanan yang berbeda yang memungkinkan kedua versi berada dalam proyek yang sama, yang berguna untuk transisi dari satu ke yang lain.
Memperbarui ke MRTK versi 2
MRTK Versi 2 adalah toolkit baru di atas Unity yang mendukung HoloLens (generasi ke-1) dan HoloLens 2. Ini juga tempat semua kemampuan HoloLens 2 baru telah ditambahkan, seperti interaksi tangan dan pelacakan mata.
Lihat sumber daya berikut untuk informasi selengkapnya tentang penggunaan MRTK versi 2:
Mempersiapkan migrasi
Sebelum menyerap file *.unitypackage baru untuk MRTK v2, kami sarankan Anda mengambil inventarisasi (1) kode yang dibuat khusus yang terintegrasi dengan MRTK v1, dan (2) kode yang dibuat khusus untuk interaksi input atau komponen UX. Konflik yang paling umum dan lazim untuk pengembang realitas campuran yang menyerap MRTK v2 melibatkan input dan interaksi. Kami menyarankan agar Anda meninjau model input MRTK v2.
Akhirnya, MRTK v2 baru telah beralih dari model skrip dan objek manajer dalam adegan ke arsitektur penyedia konfigurasi dan layanan. Ini menghasilkan hierarki adegan dan model arsitektur yang lebih bersih, tetapi memerlukan kurva pembelajaran untuk memahami profil konfigurasi baru. Baca Panduan Konfigurasi Kotak Alat Mixed Reality untuk mulai terbiasa dengan pengaturan dan profil penting yang harus Anda sesuaikan dengan kebutuhan aplikasi Anda.
Memigrasikan proyek
Setelah mengimpor MRTK v2, proyek Unity Anda kemungkinan besar memiliki banyak kesalahan terkait kompilator. Ini umum karena struktur namespace baru dan nama komponen. Lanjutkan untuk mengatasi kesalahan ini dengan memodifikasi skrip Anda ke namespace layanan dan komponen baru.
Untuk informasi tentang perbedaan API tertentu antara HTK/MRTK dan MRTK v2, lihat panduan porting pada wiki MRTK Versi 2.
Praktik terbaik
- Berikan prioritas pada shader standar MRTK.
- Bekerja pada satu jenis perubahan yang melanggar pada satu waktu (misalnya: IFocusable ke IMixedRealityFocusHandler).
- Uji setelah setiap perubahan dan gunakan kontrol sumber.
- Gunakan MRTK UX default (tombol, slates, dan sebagainya), jika memungkinkan.
- Menahan diri dari memodifikasi file MRTK secara langsung; buat pembungkus di sekitar komponen MRTK.
- Tindakan ini memudahkan penyerapan dan pembaruan MRTK di masa mendatang.
- Tinjau dan jelajahi adegan sampel yang disediakan di MRTK, terutama HandInteractionExamples.scene.
- Bangun ulang UI berbasis kanvas dengan quad, collider, dan textMeshPro.
- Aktifkan Berbagi Buffer Kedalaman atau atur titik fokus; untuk performa yang lebih baik, gunakan buffer kedalaman 16-bit. Pastikan bahwa ketika Anda merender warna, Anda juga merender kedalaman. Unity umumnya tidak menulis kedalaman untuk gameobject transparan dan teks.
- Pilih Single Pass Instanced Rendering.
- Menggunakan profil konfigurasi HoloLens 2 untuk MRTK
Menguji aplikasi Anda
Di MRTK Versi 2, Anda dapat mensimulasikan interaksi tangan langsung di Unity dan mengembangkan dengan API baru untuk interaksi tangan dan pelacakan mata. Perangkat HoloLens 2 diperlukan untuk menciptakan pengalaman pengguna yang memuaskan. Sebaiknya Anda mempelajari dokumentasi dan alat untuk pemahaman yang lebih besar. MRTK v2 mendukung pengembangan pada HoloLens (generasi ke-1) dan model input tradisional seperti "pilih melalui ketuk udara" dapat diuji pada HoloLens (generasi ke-1).
Memperbarui model interaksi Anda untuk HoloLens 2
Perhatian
Jika proyek Anda menggunakan salah satu XR. API WSA, perhatikan bahwa ini sedang ditahapkan untuk mendukung API input XR baru Unity dalam rilis Unity di masa mendatang. Anda dapat menemukan informasi selengkapnya tentang API input XR di sini.
Setelah aplikasi Anda di-port dan disiapkan untuk HoloLens 2, Anda siap untuk mempertimbangkan untuk memperbarui model interaksi dan penempatan desain hologram Anda. Di HoloLens (gen ke-1), aplikasi Anda kemungkinan memiliki tatapan dan menerapkan model interaksi dengan hologram yang relatif jauh agar sesuai dengan bidang pandang.
Untuk memperbarui desain aplikasi Agar paling cocok untuk HoloLens 2:
- Komponen MRTK: Sesuai pra-kerja, jika Anda menambahkan MRTK v2, ada berbagai komponen/skrip untuk memanfaatkan yang telah dirancang dan dioptimalkan untuk HoloLens 2.
- Model interaksi: Pertimbangkan untuk memperbarui model interaksi Anda. Untuk sebagian besar skenario, kami sarankan Anda beralih dari tatap dan berkomitmen ke tangan. Beberapa hologram Anda mungkin berada di luar jangkauan lengan, dan beralih ke tangan menghasilkan interaksi jauh menunjuk sinar dan mengambil gerakan.
- Penempatan hologram: Setelah beralih ke model interaksi tangan, pertimbangkan untuk memindahkan beberapa hologram lebih dekat sehingga pengguna dapat langsung berinteraksi dengan mereka dengan menggunakan gerakan ambil yang hampir berinteraksi dengan tangan mereka. Jenis hologram untuk bergerak lebih dekat untuk langsung mengambil atau berinteraksi adalah:
- menu target kecil
- controls
- Tombol
- hologram yang lebih kecil yang, ketika diambil dan diperiksa, sesuai dengan bidang pandang HoloLens 2.
Aplikasi dan skenario bervariasi; kami akan terus menyempurnakan dan memposting panduan desain berdasarkan umpan balik dan pembelajaran berkelanjutan.
Tips tambahan tentang memindahkan aplikasi dari x86 ke ARM
Aplikasi Unity langsung sederhana karena Anda dapat membangun bundel aplikasi ARM atau menyebarkan langsung ke perangkat agar bundel berjalan. Beberapa plugin asli Unity dapat menghadirkan tantangan pengembangan tertentu. Karena itu, Anda harus meningkatkan semua plugin asli Unity ke Visual Studio 2019 dan kemudian membangun kembali untuk ARM.
Satu aplikasi menggunakan plugin Unity AudioKinetic Wwise. Versi Unity yang digunakan tidak memiliki plugin ARM UWP, dan ada upaya yang cukup besar untuk mengerjakan ulang kemampuan suara ke dalam aplikasi yang bersangkutan untuk dijalankan di ARM. Pastikan bahwa semua plugin yang diperlukan untuk rencana pengembangan Anda diinstal dan tersedia di Unity.
Dalam beberapa kasus, plugin UWP/ARM mungkin tidak ada untuk plugin yang diperlukan aplikasi, yang memblokir kemampuan untuk memindahkan aplikasi dan menjalankannya di HoloLens 2. Hubungi penyedia plugin Anda untuk mengatasi masalah ini dan berikan dukungan untuk ARM.
Minfloat (dan varian seperti min16float, minint, dan sebagainya) dalam shader mungkin bereaksi berbeda pada HoloLens 2 daripada pada HoloLens (generasi ke-1). Secara khusus, jaminan ini bahwa setidaknya jumlah bit yang ditentukan akan digunakan. Pada GPU Intel/Nvidia, minfloat sebagian besar diperlakukan sebagai 32 bit. Pada ARM, jumlah bit yang ditentukan sebenarnya dipatuhi. Dalam praktiknya, angka-angka ini mungkin memiliki lebih sedikit presisi atau rentang pada HoloLens 2 daripada yang mereka lakukan pada HoloLens (generasi ke-1).
Instruksi _asm tampaknya tidak berfungsi pada ARM, yang berarti kode apa pun yang menggunakan instruksi _asm harus ditulis ulang.
ARM tidak mendukung set instruksi SIMD karena berbagai header, seperti xmmintrin.h, emmintrin.h, tmmintrin.h, dan immintrin.h, tidak tersedia di ARM.
Pengkompilasi shader pada ARM berjalan selama panggilan gambar pertama setelah shader dimuat atau sesuatu yang diandalkan shader telah berubah, bukan pada waktu pemuatan shader. Dampak pada framerate dapat terlihat, tergantung pada berapa banyak shader yang perlu dikompilasi, dengan implikasi tentang bagaimana shader harus ditangani, dikemas, dan diperbarui secara berbeda pada HoloLens 2 vs HoloLens (generasi pertama).