BAGIAN II MEMBANGUN PENGALAMAN HOLOGRAPHIC
BAB 6 MENGGUNAKAN MAPPING SPASIAL
6.3 Tutorial Menemukan Bidang Spasial
Gambar 6-5. Untuk menerapkan Spatial Mapping ke aplikasi Anda, cukup terapkan prefab Spatial Mapping dari HoloToolkit ke Hierarki scene Anda
Anda juga harus mengaktifkan SpatialPerception ke aplikasi Unity Anda dengan masuk ke Edit ➤ Project Settings ➤ Player ➤ Settings for Windows Store ➤ Publishing Settings ➤ Capabilities. Lihat Gambar 6-6 untuk ilustrasi setelan ini.
Gambar 6-6. Pastikan untuk mengaktifkan SpatialPerception di pengaturan Penerbitan Unity agar Spatial Mapping berfungsi
Gambar 6-7. Buka scene PlaneFinding untuk menjelajahi fitur penemuan Plane Spatial Mapping HoloToolkit
Saat memuat scene, Anda akan melihat model ruangan 3D. Anda mungkin memperhatikan bahwa scene ini tidak menggunakan Spatial Mapping melainkan model ruangan yang sudah ada sebelumnya. Kita akan mencoba pencarian bidang pada mesh Spatial Mapping nyata nanti di bagian ini.
Langkah 2: Cobalah!
Silakan dan klik tombol play untuk mulai menjelajahi scene. Scene ini dimaksudkan untuk dialami dalam Unity Editor, jadi kita tidak akan menggunakan headset. Untuk melihat
bidang yang teridentifikasi, alihkan ke tampilan pemandangan saat dalam mode Putar. Anda akan dapat memvisualisasikan bidang, seperti yang ditunjukkan pada Gambar 6-8.
Gambar 6-8. Plane yang diidentifikasi dapat dilihat saat scene sedang berjalan dan Anda berada di tampilan pemandangan
Saat dalam tampilan pemandangan, jangan ragu untuk menyesuaikan parameter untuk PlaneFindingTest.cs di panel Inspector (Anda harus memilih item PlaneFinding di Hierarchy untuk melihat Script). Scene ini menyediakan lingkungan yang terkendali untuk menguji penemuan Plane dan memungkinkan Anda menjelajahi parameter dengan cermat.
Gambar 6-9. Muat scene SpatialProcessing dan nonaktifkan scene PlaneFinding
Langkah 3: Muat Scene Pemrosesan Spasial
Sekarang setelah Anda memiliki kesempatan untuk menjelajahi scene dan implementasi penemuan rencana dasar, mari kita perluas kemampuan ini ke mesh Spatial Mapping yang sebenarnya. Temukan dan muat scene SpatialProcessing
(SpatialProcessing.unity), seperti yang ditunjukkan pada Gambar 6-9, dan bongkar scene PlaneFinding.
Langkah 4: Cobalah Scene Pemrosesan Spasial
Cobalah scene pemrosesan spasial dengan mengklik tombol play biru saat menggunakan emulasi holografik Unity atau menerapkannya ke perangkat Anda. Pada awalnya Anda akan melihat mesh Spatial Mapping biasa, tetapi setelah beberapa detik mesh Spatial Mapping akan diganti dengan persegi panjang putih besar yang mewakili bidang ruangan yang teridentifikasi, seperti yang ditunjukkan pada Gambar 6-10.
Gambar 6-10. Setelah beberapa detik, fitur pemrosesan spasial akan mengidentifikasi bidang dan mengganti mesh Spatial Mapping dengan bidang putih
Gambar 6-11. Objek SpatialProcessing (disorot dengan warna biru) berisi tiga Script penting, seperti yang dapat dilihat di panel Inspector
Langkah 5: Pahami Scene Pemrosesan Spasial
Ketika saya pertama kali mencoba scene SpatialProcessing saat mengenakan HoloLens, saya sangat senang melihat betapa sempurnanya bidang-bidang itu sejajar dengan dinding saya. SpatialProcessing dimungkinkan oleh item SpatialProcessing di Hierarchy, yang mencakup tiga Script penting, seperti yang ditunjukkan pada Gambar 6-11.
Mari kita telusuri masing-masing dari ketiga Script ini untuk melihat bagaimana mereka bersatu untuk memvisualisasikan Plane di lingkungan kita:
SpatialProcessingTest.cs: Script ini memungkinkan Anda untuk mengontrol berbagai pengaturan yang terkait dengan pemrosesan spasial. Anda akan melihat bahwa Anda dapat menyesuaikan pengaturan ini langsung dari panel Inspector. Bidang pertama adalah Waktu Pemindaian, yang merupakan jumlah detik untuk memungkinkan SurfaceObserver memindai lingkungan. Semakin lama waktu pemindaian, semakin banyak waktu yang Anda miliki untuk membangun jaringan Spatial Mapping yang baik dari lingkungan Anda. Setelah waktu berakhir, Script ini akan menghentikan SurfaceObserver (yaitu, berhenti memindai lingkungan) dan memulai pemrosesan mesh. Script ini juga memungkinkan Anda menyetel materi default, yang memungkinkan Anda memvisualisasikan jaring Spatial Mapping selama pemindaian.
Materi sekunder memungkinkan Anda memvisualisasikan jaring Spatial Mapping setelah pemindaian selesai. Bidang Minimum Floors adalah jumlah minimum bidang lantai yang diperlukan untuk keluar dari pemrosesan. Jika Anda mengatur jumlah minimum lantai ke 1, tetapi tidak ada lantai yang terdeteksi, Script akan terus mencoba menemukan bidang lantai.
SurfaceMeshesToPlanes.cs: Script ini bertanggung jawab untuk menemukan bidang dari mesh dan menghasilkan bidang. Di Inspector, Anda dapat mengatur MinArea, yang merupakan area minimum yang diperlukan sebelum Plane dibuat. Angka yang lebih besar berarti Anda akan memiliki bidang yang lebih besar tetapi lebih sedikit di scene Anda, sedangkan angka yang lebih kecil berarti Anda akan membuat rencana untuk permukaan yang lebih kecil di scene Anda. Ada juga dua daftar drop-down di Inspector di mana Anda dapat menentukan jenis permukaan mana yang akan digambar Plane dan jenis permukaan mana yang akan dihancurkan. Variabel snapToGravityThreshhold (dalam Script tetapi tidak ditampilkan di Inspector) digunakan untuk menyelaraskan bidang dengan gravitasi sehingga tampak lebih rata.
Prefab Surface Plane menentukan tampilan Plane. Jangan ragu untuk mengedit cetakan ini jika Anda ingin mengubah tampilan bidang—misalnya, jika Anda ingin bidang lantai memiliki warna yang berbeda dari bidang dinding.
RemoveSurfaceVertices.cs: Script ini bertanggung jawab untuk menghapus simpul (menghapus bagian dari jaring Spatial Mapping) yang berada dalam batas yang Anda tentukan. Anda mungkin ingin menghapus simpul jika Anda membutuhkan lubang di mesh Spatial Mapping Anda atau jika Anda ingin mengurangi jumlah poligon untuk meningkatkan kinerja aplikasi Anda. Dalam scene SpatialProcessing kita, Script SpatialProcessingTest.cs menggunakan bidang yang dihasilkan oleh SurfaceMeshesToPlanes.cs sebagai batas. Ini mengirimkan batas-batas ini ke Script
RemoveSurfaceVertices.cs, yang kemudian menghapus mesh Spatial Mapping di dekat bidang yang dihasilkan. Parameter Bounds Expansion yang terlihat di Inspector memungkinkan Anda memperluas batas yang Anda berikan, untuk menghapus lebih banyak simpul di sekitar batas.
Tip Karena Script surfaceMeshestoplanes memungkinkan Anda untuk menentukan tipe bidang (dinding, lantai, sel, tabel, dan sebagainya), Anda dapat secara selektif mengirim beberapa bidang ini ke Script removesurfaceVertices. ini berguna jika Anda ingin secara selektif menghapus bagian dari jaring Spatial Mapping Anda—misalnya, jika Anda hanya ingin menghapus langit-langit Anda.
Langkah 6: Gunakan Pemrosesan Spasial di Aplikasi Anda
Untuk mengaktifkan pemrosesan spasial di aplikasi Anda, Anda perlu melakukan hal berikut:
Pastikan untuk mengaktifkan Spatial Mapping, seperti yang dijelaskan dalam tutorial sebelumnya.
Pastikan untuk mengaktifkan persepsi spasial, seperti yang dijelaskan dalam tutorial sebelumnya.
Temukan dan tambahkan Script SpatialProcessingTest.cs ke Hierarchy Anda untuk mengontrol waktu pemindaian dan visualisasi mesh.
Temukan dan tambahkan Script SurfaceMeshesToPlanes.cs ke Hierarchy Anda.
Sesuaikan pengaturan di panel Inspector sesuai kebutuhan proyek Anda.
Opsional, Anda juga dapat menemukan dan menambahkan Script RemoveSurfaceVertices.cs ke Hierarchy Anda untuk menghapus bagian dari jerat Anda yang Anda ganti dengan Plane.
Pemrosesan spasial sangat baik untuk skenario di mana Anda perlu mengidentifikasi bidang tanpa harus memvisualisasikannya. Misalnya, jika saya perlu menempatkan hologram di lantai, saya dapat menggunakan pemrosesan spasial untuk mengidentifikasi dan membuat bidang lantai yang tidak terlihat dan kemudian melanjutkan untuk menempatkan hologram di lantai.
Contoh lain termasuk menempatkan benda di dinding, menggantung hologram dari langit- langit, menghitung ketinggian headset di atas lantai, dan banyak lagi.