Uzamsal eşleme
Uzamsal eşleme, HoloLens çevresindeki ortamdaki gerçek dünya yüzeylerinin ayrıntılı bir gösterimini sağlayarak geliştiricilerin ikna edici bir karma gerçeklik deneyimi oluşturmasını sağlar. Bir uygulama, gerçek dünyayı sanal dünyayla birleştirerek hologramların gerçek görünmesini sağlayabilir. Uygulamalar ayrıca tanıdık gerçek dünya davranışları ve etkileşimleri sağlayarak kullanıcı beklentileriyle daha doğal bir şekilde uyumlu hale gelebilir.
Cihaz destekler
Özellik | HoloLens (1. nesil) | HoloLens 2 | Çevreleyici kulaklıklar |
Uzamsal eşleme | ✔️ | ✔️ | ❌ |
Uzamsal eşleme neden önemlidir?
Uzamsal eşleme, nesneleri gerçek yüzeylere yerleştirmeyi mümkün kılar. Bu, kullanıcının dünyasındaki nesneleri bağlamaya yardımcı olur ve gerçek dünya derinlik ipuçlarından yararlanır. Hologramlarınızı diğer hologramlara ve gerçek dünya nesnelerine göre kapatmanız, kullanıcıyı bu hologramların gerçekten kendi alanında olduğuna ikna etmeye yardımcı olur. Uzayda yüzen veya kullanıcıyla hareket eden hologramlar gerçek gibi hissetmez. Mümkün olduğunda, rahatlık için öğeleri yerleştirin.
Hologramları yerleştirirken veya taşırken yüzeyleri görselleştirin (yansıtılmış kılavuz kullanın). Bu, kullanıcıların hologramlarını en iyi yerleştirebilecekleri yeri bilmelerine yardımcı olur ve hologramı yerleştirmeye çalıştıkları noktanın eşlenip eşlenmediğini gösterir. Çok büyük bir açıyla kullanıcıya "reklam panosu öğeleri" ekleyebilirsiniz.
Kavramsal genel bakış
Bir odayı kapsayan uzamsal haritalama ağı örneği
Uzamsal eşleme için kullanılan iki birincil nesne türü ,'Spatial Surface Observer' ve 'Spatial Surface'tır.
Uygulama, uzamsal eşleme verilerini almak istediği alan bölgelerini tanımlamak için Spatial Surface Observer'a bir veya daha fazla sınırlayıcı birim sağlar. Bu birimlerin her biri için uzamsal eşleme, uygulamaya bir dizi Uzamsal Yüzey sağlar.
Bu birimler sabit (gerçek dünyaya dayalı sabit bir konumda) veya HoloLens'e bağlı olabilir (ortamda ilerlerken HoloLens ile birlikte hareket eder, ancak dönmez). Her uzamsal yüzey, dünya kilitli uzamsal koordinat sistemine bağlı üçgen bir ağ olarak temsil edilen küçük bir alanda gerçek dünya yüzeylerini tanımlar.
HoloLens ortamla ilgili yeni veriler topladığı gibi, ortamda değişiklikler meydana geldikçe uzamsal yüzeyler görünür, kaybolur ve değişir.
Uzamsal Farkındalık tasarım kavramları tanıtımı
Uzamsal Farkındalık tasarım kavramlarını uygulamada görmek isterseniz aşağıdaki Hologram tasarlama - Uzamsal Farkındalık video tanıtımımıza göz atın. İşiniz bittiğinde, belirli konulara daha ayrıntılı bir bakış için devam edin.
Bu video "Hologram Tasarlama" HoloLens 2 uygulamasından alınmıştır. Buradan tüm deneyimi indirin ve keyfini çıkarın.
Uzamsal Eşleme ve Scene Understanding WorldMesh karşılaştırması
HoloLens 2 için, Sahne anlama SDK'sını (EnableWorldMesh ayarı) kullanarak uzamsal eşleme verilerinin statik bir sürümünü sorgulamak mümkündür. Uzamsal eşleme verilerine erişmenin iki yolu arasındaki farklar şunlardır:
- Uzamsal Eşleme API'si:
- Sınırlı aralık: Kullanıcıların çevresinde sınırlı boyutta önbelleğe alınmış 'kabarcık' içindeki uygulamaların kullanabilecekleri uzamsal eşleme verileri.
- SurfacesChanged olayları aracılığıyla değiştirilen mesh bölgelerinin düşük gecikme süreli güncelleştirmelerini sağlar.
- MetreKüp Başına Üçgen parametresi tarafından denetlenen değişken ayrıntı düzeyi.
- Sahne anlama SDK'sı:
- Sınırsız aralık : Sorgu yarıçapı içinde taranan tüm uzamsal eşleme verilerini sağlar.
- Uzamsal eşleme verilerinin statik anlık görüntüsünü sağlar. Güncelleştirilmiş uzamsal eşleme verilerini almak için ağın tamamı için yeni bir sorgu çalıştırılması gerekir.
- RequestedMeshLevelOfDetail ayarı tarafından denetlenen tutarlı ayrıntı düzeyi.
Uzamsal haritalama kalitesini etkileyen nedir?
Burada ayrıntılı olarak yer alan çeşitli faktörler, bu hataların sıklığını ve önem derecesini etkileyebilir. Ancak, uzamsal eşleme verilerinde hatalar olsa bile kullanıcının hedeflerine ulaşabilmesi için uygulamanızı tasarlamanız gerekir.
Genel kullanım senaryoları
Yerleştirme
Uzamsal eşleme, uygulamalara kullanıcıya doğal ve tanıdık etkileşim biçimleri sunma fırsatı sunar; telefonunuzu masaya yerleştirmekten daha doğal ne olabilir?
Hologramların (veya daha genel olarak herhangi bir uzamsal konum seçiminin) yüzeylere yerleştirilmesini kısıtlamak, 3B (uzay noktasından) 2B'ye (yüzey üzerinde nokta) doğal bir eşleme sağlar. Bu, kullanıcının uygulamaya sağlaması gereken bilgi miktarını azaltır ve kullanıcının etkileşimlerini daha hızlı, daha kolay ve daha hassas hale getirir. Bu doğrudur çünkü 'uzaklık' diğer kişilerle veya bilgisayarlarla fiziksel olarak iletişim kurmaya alışkın olduğumuz bir şey değildir. Parmağımızla işaret ettiğimizde, bir yön belirtiriz ancak uzaklığı belirtmeyiz.
Burada önemli bir uyarı, bir uygulama yönünden uzaklığı çıkardığında (örneğin, en yakın uzamsal yüzeyi bulmak için kullanıcının bakış yönü boyunca bir ışın yayını yaparak), bunun kullanıcının güvenilir bir şekilde tahminde bulunabileceği sonuçlar vermesi gerektiğidir. Aksi takdirde, kullanıcı denetim duygusunu kaybeder ve bu hızla sinir bozucu hale gelebilir. Bu konuda yardımcı olan yöntemlerden biri, yalnızca bir tane yerine birden çok ışın yayını yapmaktır. Toplama sonuçları daha yumuşak ve daha öngörülebilir olmalı, geçici 'aykırı' sonuçlardan etkilenmeye daha az duyarlı olmalıdır (küçük deliklerden geçen veya kullanıcının farkında olmadığı küçük geometri bitlerine isabet eden ışınlardan kaynaklanabilir). Toplama veya düzeltme de zaman içinde gerçekleştirilebilir; örneğin, bir hologramın kullanıcıdan uzaklığında değişebileceği maksimum hızı sınırlayabilirsiniz. Yalnızca minimum ve maksimum uzaklık değerini sınırlamak da yardımcı olabilir, böylece taşınan hologram aniden uzaklığa uçamaz veya kullanıcının yüzüne geri kilitlenmez.
Uygulamalar hologram yerleştirmeye yol göstermek için yüzeylerin şeklini ve yönünü de kullanabilir. Holografik bir sandalye duvarlara nüfuz etmemelidir ve biraz düzensiz olsa bile zeminle aynı hizada oturmalıdır. Bu tür işlevler büyük olasılıkla ışın yayınları yerine fizik çarpışmalarının kullanılmasına dayanacaktır, ancak benzer endişeler geçerli olacaktır. Yerleştirilmekte olan hologramda sandalyedeki bacaklar gibi dışarı çıkan birçok küçük çokgen varsa, bu çokgenlerin fizik temsilini daha geniş ve pürüzsüz bir şeye genişletmek mantıklı olabilir, böylece uzamsal yüzeylerde sarkmadan daha fazla kaydırabilirler.
Aşırı uçta, kullanıcı girişi tamamen basitleştirilebilir ve uzamsal yüzeyler tamamen otomatik hologram yerleşimi yapmak için kullanılabilir. Örneğin uygulama, kullanıcının basabileceği bir holografik ışık anahtarını duvarın herhangi bir yerine yerleştirebilir. Tahmin edilebilirlik konusunda da aynı uyarı burada iki kat geçerlidir; Kullanıcı hologram yerleşimi üzerinde denetim bekliyorsa ancak uygulama hologramları her zaman beklediği yere yerleştirmiyorsa (ışık düğmesi kullanıcının erişemediğini bir yerde görünüyorsa), bu can sıkıcı bir deneyim olacaktır. Belirli bir süre için kullanıcı düzeltmesi gerektiren otomatik yerleştirme yapmak, kullanıcının her zaman yerleştirmeyi kendi başına yapmasını gerektirmekten daha kötü olabilir; başarılı otomatik yerleştirme beklendiği için, el ile düzeltme bir yük gibi hissediyorum!
Ayrıca, bir uygulamanın yerleştirme için uzamsal yüzeyleri kullanma becerisinin büyük ölçüde uygulamanın tarama deneyimine bağlı olduğunu unutmayın. Bir yüzey taranmamışsa yerleştirme için kullanılamaz. Yeni yüzeyleri taramaya veya yeni bir konum seçmeye yardımcı olabilmesi için bunu kullanıcıya açıkça ifade etmek uygulamaya aittir.
Kullanıcıya görsel geri bildirim yerleştirme sırasında çok önemlidir. Kullanıcının hologramın topraklama efektlerine sahip en yakın yüzeyi temel aldığı yeri bilmesi gerekir. Hologramlarının hareketinin neden kısıtlandığını anlamalıdırlar (örneğin, yakındaki başka bir yüzeyle çarpışmalar nedeniyle). Hologram geçerli konuma yerleştiremiyorsa görsel geri bildirim neden olmadığını açıkça belirtmelidir. Örneğin, kullanıcı duvara yarım yol takılmış bir holografik kanepe yerleştirmeye çalışıyorsa, kanepenin duvarın arkasındaki kısımları kızgın bir renkte titremelidir. Veya tersine, uygulama kullanıcının gerçek dünya yüzeyini görebileceği bir konumda uzamsal bir yüzey bulamazsa, uygulamanın bunu net hale getirmesi gerekir. Bu alanda topraklama etkisinin belirgin olmaması bu amaca ulaşabilir.
Tıkanık -lığı
Uzamsal haritalama yüzeylerinin birincil kullanımlarından biri, hologramları tıkamaktır. Bu basit davranış, hologramların algılanan gerçekçiliği üzerinde büyük bir etkiye sahiptir ve kullanıcıyla aynı fiziksel alanda gerçekten yaşayan bir içsel his oluşturmaya yardımcı olur.
Kullanıcıya bilgi de sağlar; Hologram gerçek bir yüzey tarafından kapatılmış gibi göründüğünde, bu hologramın dünyadaki uzamsal konumuyla ilgili ek görsel geri bildirim sağlar. Buna karşılık, tıkanıklık da bilgileri kullanıcıdan yararlı bir şekilde gizleyebilir ; Duvarların arkasındaki hologramların kapatılması, görsel dağınıklığı sezgisel bir şekilde azaltabilir. Bir hologramı gizlemek veya ortaya çıkarmak için kullanıcının yalnızca kafasını hareket ettirmesi gerekir.
Tıkanıklık, tanıdık fiziksel etkileşimlere dayalı olarak doğal bir kullanıcı arabirimine yönelik beklentilerin en üst düzeye çıkarılması için de kullanılabilir; Hologram bir yüzey tarafından kapatılmışsa, bunun nedeni bu yüzeyin düz olmasıdır, bu nedenle kullanıcı hologramın bu yüzeyle çarpışacağını ve içinden geçmeyeceğini bilmelidir.
Bazen hologramların kapatılması istenmeyen bir durumdur. Bir kullanıcının hologramla etkileşim kurması gerekiyorsa, gerçek dünya yüzeyinin arkasında olsa bile bunu görmesi gerekir. Böyle durumlarda, bu tür bir hologramı kapatıldığında (örneğin, parlaklığını azaltarak) farklı bir şekilde işlemek genellikle mantıklıdır. Bu şekilde, kullanıcı hologramı görsel olarak bulabilir, ancak yine de bir şeyin arkasında olduğunu anlar.
Fizik
Fizik simülasyonunun kullanılması, uzamsal haritalamanın kullanıcının fiziksel alanındaki hologramların varlığını güçlendirmek için kullanılabilmesinin bir diğer yoludur. Holografik lastik topum masamdan gerçekçi bir şekilde yuvarlandığında, yerden zıplayıp kanepenin altında kaybolduğunda, orada olmadığına inanmak zor olabilir.
Fizik simülasyonu, bir uygulamanın doğal ve tanıdık fizik tabanlı etkileşimleri kullanmasına da olanak sağlar. Bir holografik mobilya parçasını yerde hareket ettirmek, mobilya uygun atalet ve sürtünme ile zeminde kayıyormuş gibi yanıt verirse, kullanıcı için büyük olasılıkla daha kolay olacaktır.
Gerçekçi fiziksel davranışlar oluşturmak için büyük olasılıkla delik doldurma, kayan halüsinasyonları kaldırma ve pürüzlü yüzeyleri düzeltme gibi bazı örgü işlemleri yapmanız gerekir.
Ayrıca uygulamanızın tarama deneyiminin fizik simülasyonunu nasıl etkilediğini de göz önünde bulundurmanız gerekir. İlk olarak, eksik yüzeyler hiçbir şeyle çarpışmaz; Kauçuk top koridordan aşağı yuvarlandığında ve bilinen dünyanın sonundan çıktığında ne olur? İkinci olarak, zaman içinde ortamdaki değişikliklere yanıt vermeye devam edip etmeyeceğinize karar vermeniz gerekir. Bazı durumlarda mümkün olan en kısa sürede yanıt vermek istersiniz; kullanıcının kapıları ve mobilyayı gelen Roma oklarının en geçicisine karşı savunmada taşınabilir barikatlar olarak kullanıp kullanmadiğini söyleyin. Ancak diğer durumlarda yeni güncelleştirmeleri yoksaymak isteyebilirsiniz; holografik spor arabanızı zemininizde yarış pistinin etrafında sürmek, köpeğiniz pistin ortasında oturmaya karar verirse aniden çok eğlenceli olmayabilir.
Gezinti
Uygulamalar, holografik karakterlere (veya aracılara) gerçek dünyada gerçek bir kişinin yapacağı gibi gezinme yeteneği vermek için uzamsal eşleme verilerini kullanabilir. Bu, holografik karakterlerin varlığını, kullanıcının ve arkadaşlarınınkilerle aynı doğal ve tanıdık davranış kümesiyle kısıtlayarak güçlendirmeye yardımcı olabilir.
Gezinti özellikleri kullanıcılar için de yararlı olabilir. Belirli bir alanda bir gezinti haritası oluşturulduktan sonra, bu konumla ilgili bilgisiz yeni kullanıcılara holografik yol tarifleri sağlamak üzere paylaşılabilir. Bu harita yaya 'trafiğinin' sorunsuz akmasına yardımcı olmak veya inşaat alanları gibi tehlikeli yerlerdeki kazaları önlemek için tasarlanabilir.
Gezinti işlevselliğinin uygulanmasında karşılaşılan temel teknik güçlükler, yürünebilir yüzeylerin güvenilir bir şekilde algılanması (insanlar tablolarda yürümez!) ve ortamdaki değişikliklere zarif bir şekilde uyum sağlamaktır (insanlar kapalı kapılardan geçemez!). Ağ, bir sanal karaktere göre yol planlama ve gezinti için kullanılabilir hale gelmeden önce biraz işlem gerektirebilir. Ağın düzeltilmesi ve halüsinasyonların giderilmesi karakterlerin takılmasını önlemeye yardımcı olabilir. Karakterinizin yol planlama ve gezinti hesaplamalarını hızlandırmak için ağı önemli ölçüde basitleştirmek de isteyebilirsiniz. Bu güçlükler, video oyunu teknolojisinin geliştirilmesinde büyük bir ilgi gördü ve bu konularda birçok kullanılabilir araştırma edebiyatı var.
Uygulama başlayana kadar yüzeyler bilinmediğinden Unity'deki yerleşik NavMesh işlevi uzamsal harita yüzeyleri için varsayılan olarak kullanılamaz. Ancak, NavMeshComponents'i yükleyerek çalışma zamanı sırasında bir NavMesh oluşturabilirsiniz. Uzamsal eşleme sisteminin kullanıcının geçerli konumundan uzak yüzeyler hakkında bilgi sağlamayacağını unutmayın; geniş bir alanın haritasını oluşturmak için uygulamanın yüzeyleri "hatırlaması" gerekir. Uzamsal farkındalık profilinde gözlem kapsamları ayarını da artırarak NavMesh'inizi oluşturabileceğiniz alanı artırabilirsiniz.
Görselleştirme
Çoğu zaman uzamsal yüzeylerin görünmez olması uygundur; görsel dağınıklığı en aza indirmek ve gerçek dünyanın kendi adına konuşmasına izin vermek. Ancak bazen gerçek dünyadaki benzerlerinin görünür olmasına rağmen uzamsal haritalama yüzeylerini doğrudan görselleştirmek yararlı olabilir.
Örneğin, kullanıcı bir yüzeye hologram yerleştirmeye çalıştığında (örneğin, duvara holografik bir dolap yerleştirdiğinde), hologramı yüzeye gölge atarak 'topraklama' yararlı olabilir. Bu, kullanıcıya hologram ile yüzey arasındaki fiziksel yakınlık hakkında çok daha net bir his verir. Bu ayrıca kullanıcı işlemeden önce bir değişikliği görsel olarak 'önizleme' olarak görüntülemeye yönelik daha genel bir uygulama örneğidir.
Uygulama, yüzeyleri görselleştirerek ortam hakkında bilgi edindiği bilgileri kullanıcıyla paylaşabilir. Örneğin, holografik bir tahta oyunu 'tablolar' olarak tanımladığı yatay yüzeyleri görselleştirebilir, böylece kullanıcı etkileşime geçmek için nereye gitmesi gerektiğini bilir.
Yüzeyleri görselleştirmek, kullanıcıya görünümden gizlenen yakın alanları göstermenin yararlı bir yolu olabilir. Bu, kullanıcıya mutfaklarına (ve içerdiği hologramların tümüne) oturma odasından erişim vermenin bir yolunu sağlayabilir.
Uzamsal eşleme tarafından sağlanan yüzey çizgileri özellikle 'temiz' olmayabilir. Bunları uygun şekilde görselleştirmek önemlidir. Geleneksel aydınlatma hesaplamaları yüzey normallerindeki hataları görsel olarak dikkat dağıtıcı bir şekilde vurgulayabilirken, yüzeye yansıtılan 'temiz' dokular daha düzenli bir görünüm sağlamaya yardımcı olabilir. Ayrıca, yüzeyler işlenmeden önce mesh özelliklerini geliştirmek için örgü işleme yapmak da mümkündür.
Not
HoloLens 2, Karma Gerçeklik geliştiricilerine yerleştirme, oklüzyon, fizik ve gezinti uygulamalarını basitleştirmek için tasarlanmış yapılandırılmış, üst düzey bir ortam gösterimi sağlayan yeni bir Scene Understanding Çalışma Zamanı uygular.
Surface Observer'ın kullanımı
Uzamsal haritalamanın başlangıç noktası yüzey gözlemcisidir. Program akışı aşağıdaki gibidir:
- Surface gözlemci nesnesi oluşturma
- Uygulamanın uzamsal eşleme verilerini almak istediği ilgi çekici bölgeleri tanımlamak için bir veya daha fazla uzamsal birim sağlayın. Uzamsal hacim, küre veya kutu gibi uzay bölgesini tanımlayan bir şekildir.
- Fiziksel dünyanın sabit bir bölgesini tanımlamak için dünya kilitli uzamsal koordinat sistemiyle uzamsal birim kullanın.
- Kullanıcıyla birlikte hareket eden (ancak dönmeyen) bir alan bölgesini belirlemek için gövde kilitli uzamsal koordinat sistemiyle her kareyi güncelleştiren uzamsal bir birim kullanın.
- Uygulamanın veya kullanıcının durumu değiştikçe bu uzamsal birimler daha sonra herhangi bir zamanda değiştirilebilir.
- Uzamsal yüzeylerle ilgili bilgileri almak için yoklama veya bildirim kullanma
- Yüzey gözlemcisini istediğiniz zaman uzamsal yüzey durumu için "yoklama" yapabilir. Bunun yerine, uzamsal yüzeyler değiştiğinde uygulamayı bilgilendirecek olan surface gözlemcisinin 'surfaces changed' olayına kaydolabilirsiniz.
- Görünüm frustum veya gövde kilitli birim gibi dinamik bir uzamsal birim için uygulamaların ilgilendiğiniz bölgeyi ayarlayıp geçerli uzamsal yüzey kümesini alarak her karedeki değişiklikleri yoklaması gerekir.
- Tek bir odayı kapsayan dünya kilitli bir küp gibi statik bir hacim için, uygulamalar bu birimin içindeki uzamsal yüzeyler değişmiş olabileceğinde bildirim almak üzere 'surfaces changed' olayına kaydolabilir.
- İşlem yüzeyleri değişiklikleri
- Sağlanan uzamsal yüzey kümesini yineler.
- Uzamsal yüzeyleri eklenen, değiştirilen veya kaldırılan şekilde sınıflandırabilirsiniz.
- Eklenen veya değiştirilen her uzamsal yüzey için uygunsa, yüzeyin geçerli durumunu istenen ayrıntı düzeyinde temsil eden güncelleştirilmiş ağı almak için zaman uyumsuz bir istek gönderin.
- Zaman uyumsuz mesh isteğini işleyin (aşağıdaki bölümlerde daha fazla ayrıntı).
Mesh Önbelleğe Alma
Uzamsal yüzeyler yoğun üçgen çizgiler ile temsil edilir. Bu tirelerin depolanması, işlenmesi ve işlenmesi önemli hesaplama ve depolama kaynaklarını tüketebilir. Bu nedenle, her uygulama, mesh işleme ve depolama için kullanılan kaynakları en aza indirmek için ihtiyaçlarına uygun bir ağ önbelleğe alma şeması benimsemelidir. Bu şema, hangi çizgilerin tutulup hangilerinin atılması gerektiğini ve her uzamsal yüzey için ağın ne zaman güncelleştirileceğini belirlemelidir.
Burada ele alınan konuların çoğu, uygulamanızın mesh önbelleğe alma yaklaşımını doğrudan bildirir. Kullanıcının ortamda nasıl hareket ettiği, hangi yüzeylerin gerekli olduğu, farklı yüzeylerin ne zaman gözlemlendiği ve ortamdaki değişikliklerin ne zaman yakalanması gerektiği göz önünde bulundurulmalıdır.
Yüzey gözlemcisi tarafından sağlanan 'surfaces changed' olayını yorumlarken temel mesh önbelleğe alma mantığı aşağıdaki gibidir:
- Uygulama daha önce görmediği bir uzamsal yüzey kimliği görürse, bunu yeni bir uzamsal yüzey olarak ele almalıdır.
- Uygulama bilinen bir kimlikle ancak yeni bir güncelleştirme zamanıyla uzamsal bir yüzey görüyorsa, bunu güncelleştirilmiş bir uzamsal yüzey olarak ele almalıdır.
- Uygulama artık bilinen bir kimlikle uzamsal yüzey görmüyorsa, bunu kaldırılmış bir uzamsal yüzey olarak ele almalıdır.
Ardından aşağıdaki seçimleri yapmak her uygulamaya göre yapılır:
- Yeni uzamsal yüzeyler için mesh istenmeli mi?
- Genel olarak mesh, kullanıcıya yararlı yeni bilgiler sağlayabilecek yeni uzamsal yüzeyler için hemen istenmelidir.
- Ancak, kullanıcının yakınında ve önünde yeni uzamsal yüzeylere öncelik verilmeli ve önce meshleri istenmelidir.
- Yeni ağ gerekli değilse, örneğin uygulama ortam modelini kalıcı olarak veya geçici olarak "dondurduysa" istenmemelidir.
- Güncelleştirilmiş uzamsal yüzeyler için mesh istenmeli mi?
- Kullanıcının yakınında ve önünde güncelleştirilmiş uzamsal yüzeylere öncelik verilmeli ve önce meshleri istenmelidir.
- Yeni yüzeylere, özellikle tarama deneyimi sırasında güncelleştirilmiş yüzeylere göre daha yüksek öncelik vermek de uygun olabilir.
- İşlem maliyetlerini sınırlamak için uygulamalar, uzamsal yüzeylerde güncelleştirmeleri işleme hızını kısıtlamak isteyebilir.
- Uzamsal yüzeydeki değişikliklerin küçük olduğunu, örneğin yüzeyin sınırlarının küçük olduğunu, bu durumda güncelleştirmenin işlenecek kadar önemli olmadığını çıkarsamak mümkün olabilir.
- Kullanıcının geçerli ilgilendiği bölge dışındaki uzamsal yüzeylere Güncelleştirmeler tamamen yoksayılabilir, ancak bu durumda yüzey gözlemcisi tarafından kullanılan uzamsal sınırlayıcı birimleri değiştirmek daha verimli olabilir.
- Kaldırılan uzamsal yüzeyler için mesh atılmalıdır?
- Hologram oklüzyonun doğru kalması için genellikle mesh, uzamsal yüzeylerin kaldırılması için hemen atılmalıdır.
- Ancak, uygulamanın uzamsal bir yüzeyin kısa süre içinde yeniden görüneceğine inanmak için bir nedeni varsa (kullanıcı deneyiminin tasarımına bağlı olarak), ağı atmaktan ve daha sonra yeniden oluşturmaktan daha verimli olabilir.
- Uygulama kullanıcının ortamının büyük ölçekli bir modelini oluşturuyorsa, hiç tire atmak istemeyebilir. Yine de uzamsal yüzeyler kaybolurken diske kısa çizgiler biriktirerek kaynak kullanımını sınırlaması gerekecektir.
- Uzamsal yüzey oluşturma sırasında nispeten nadir görülen bazı olaylar, uzamsal yüzeylerin benzer bir konumda ancak farklı kimliklerle yeni uzamsal yüzeylerle değiştirilmesine neden olabilir. Bu nedenle, kaldırılan bir yüzeyi atmamayı seçen uygulamalar, aynı konumu kapsayan birden fazla üst üste binen uzamsal yüzey çizgileri ile sonuçlanmamaya dikkat etmelidir.
- Mesh diğer uzamsal yüzeyler için atılmalıdır?
- Uzamsal yüzey mevcut olsa bile, kullanıcının deneyimi için artık yararlı değilse atılmalıdır. Örneğin, uygulama bir kapının diğer tarafındaki odayı alternatif bir sanal alanla 'değiştirirse' uzamsal yüzeyler artık önemli değildir.
Uzamsal ve zamana bağlı histerez kullanarak örnek bir örgü önbelleğe alma stratejisi aşağıda verilmiştir:
- Kullanıcının etrafa bakıp dolaşırken bakışını takip eden frustum şeklinde bir uzamsal ilgi hacmi kullanmak isteyen bir uygulama düşünün.
- Uzamsal bir yüzey, kullanıcı yüzeyden uzağa baktığından veya ondan daha uzakta olduğundan geçici olarak bu birimden kaybolabilir... yalnızca geriye bakmak veya bir dakika sonra yeniden yaklaşmak için. Bu durumda, bu yüzey için ağın atılması ve yeniden oluşturulması birçok yedekli işlemeyi temsil eder.
- uygulama, işlenen değişiklik sayısını azaltmak için biri diğerinde bulunan iki uzamsal yüzey gözlemcisi kullanır. Büyük hacim küreseldir ve 'lazily' kullanıcısını izler; yalnızca merkezin kullanıcının 2,0 metre içinde olduğundan emin olmak için gerektiğinde hareket eder.
- Yeni ve güncelleştirilmiş uzamsal yüzey çizgileri her zaman daha küçük iç yüzey gözlemcisinden işlenir, ancak daha büyük dış yüzey gözlemcisinden kaybolana kadar ağlar önbelleğe alınır. Bu, uygulamanın yerel kullanıcı hareketi nedeniyle birçok yedekli değişikliği işlemesini önlemesine olanak tanır.
- Uzamsal yüzey de izleme kaybı nedeniyle geçici olarak kaybolabileceğinden, uygulama izleme kaybı sırasında kaldırılan uzamsal yüzeyleri atarak da ortadan kalkar.
- Genel olarak, bir uygulama ideal önbelleğe alma stratejisini belirlemek için azaltılmış güncelleştirme işleme ve artan bellek kullanımı arasındaki dengeyi değerlendirmelidir.
İşleme
Uzamsal eşleme tirelerinin işleme için kullanılma eğiliminde olduğu üç temel yol vardır:
- Surface görselleştirmesi için
- Uzamsal yüzeyleri doğrudan görselleştirmek genellikle yararlıdır. Örneğin, nesnelerden uzamsal yüzeylere 'gölgeler' ataması, hologramları yüzeylere yerleştirirken kullanıcıya yararlı görsel geri bildirim sağlayabilir.
- Akılda bulundurulması gereken bir nokta, uzamsal küllerin bir 3B sanatçının oluşturabileceği türdeki tirelerden farklı olmasıdır. Üçgen topolojisi insan tarafından oluşturulan topoloji kadar 'temiz' olmayacaktır ve ağ çeşitli hatalardan muzdarip olacaktır.
- Hoş bir görsel estetik oluşturmak için, delikler veya düz yüzey normallerini doldurmak gibi bazı örgü işleme işlemleri yapmak isteyebilirsiniz. Ayrıca, örgü topolojisini ve normallerini doğrudan görselleştirmek yerine, sanatçı tarafından tasarlanmış dokuları ağınıza yansıtmak için bir gölgelendirici kullanmak isteyebilirsiniz.
- Gerçek dünya yüzeylerinin arkasındaki hologramları tıkama için
- Uzamsal yüzeyler yalnızca derinlik arabelleği etkileyen ve renk işleme hedeflerini etkilemeyen yalnızca derinlik geçişiyle işlenebilir.
- Bu, daha sonra uzamsal yüzeylerin arkasında işlenen hologramları tıkamak için derinlik arabelleğinin asalını oluşturur. Hologramların doğru bir şekilde tıkanması, hologramların kullanıcının fiziksel alanında gerçekten var olma hissini artırır.
- Yalnızca derinlik işlemeyi etkinleştirmek için blend durumunuzu güncelleştirerek tüm renk işleme hedeflerinde RenderTargetWriteMask değerini sıfır olarak ayarlayın.
- Gerçek dünya yüzeyleri tarafından tıkanmış hologramların görünümünü değiştirmek için
- Normalde işlenen geometri, gizlendiğinde gizlenir. Bu, derinlik kalıbı durumunuzdaki derinlik işlevini "küçük veya eşit" olarak ayarlayarak elde edilir ve bu da geometrinin yalnızca kameraya daha yakın olduğu ve daha önce işlenen tüm geometrilerden daha yakın olduğu yerlerde görünür hale getirilmesine neden olur.
- Ancak, belirli geometriyi gizli olsa bile görünür durumda tutmak ve kullanıcıya görsel geri bildirim sağlamanın bir yolu olarak gizli olduğunda görünümünü değiştirmek yararlı olabilir. Örneğin, bu, uygulamanın kullanıcıya bir nesnenin konumunu göstermesini sağlarken gerçek dünya yüzeyinin arkasında olduğunu net hale getirir.
- Bunu başarmak için geometriyi ikinci kez işlemek için istenen 'tıkanmış' görünümü oluşturan farklı bir gölgelendirici kullanın. Geometriyi ikinci kez işlemeden önce derinlik kalıbı durumunuzda iki değişiklik yapın. İlk olarak derinlik işlevini "büyüktür veya eşittir" olarak ayarlayın, böylece geometri yalnızca kameradan daha uzakta, daha önce işlenen tüm geometrilerden daha uzakta görünecektir. İkincisi, derinlik arabelleğinin değiştirilmemesi için DepthWriteMask değerini sıfır olarak ayarlayın (derinlik arabelleği kameraya en yakın geometri derinliğini temsil etmeye devam etmelidir).
Uzamsal eşleme çizgileri işlenirken performans önemli bir konudur. Uzamsal eşleme tirelerini işlemeye özgü bazı işleme performansı teknikleri şunlardır:
- Üçgen yoğunluğu ayarlama
- Yüzey gözlemcinizden uzamsal yüzey çizgileri istediğinizde, ihtiyaçlarınıza uygun en düşük üçgen çizgi yoğunluğuna sahip olması için istekte bulunun.
- Yüzeyin kullanıcıdan uzaklığı ve kullanıcı deneyimiyle ilgisine bağlı olarak yüzeydeki üçgen yoğunluğunu yüzey bazında değiştirmek mantıklı olabilir.
- Üçgen sayılarının azaltılması GPU'da bellek kullanımını ve köşe işleme maliyetlerini azaltır, ancak piksel işleme maliyetlerini etkilemez.
- Frustum culling kullanma
- Frustum culling, geçerli görüntü frustumunun dışında olduklarından görülemeyen çizim nesnelerini atlar. Bu, hem CPU hem de GPU işleme maliyetlerini azaltır.
- Örgü başına bir şekilde işleme yapıldığından ve uzamsal yüzeyler büyük olabileceğinden, her uzamsal yüzey örgüslerinin daha küçük parçalara bölünmesi daha verimli bir şekilde sonuçlanabilir (bu kadar az ekran dışı üçgen işlenir). Bununla birlikte, bir denge var; Ne kadar çok tireniz varsa, o kadar fazla çekme çağrısı yapmanız gerekir ve bu da CPU maliyetlerini artırabilir. Aşırı bir durumda frustum hesaplamalarının kendisi bile ölçülebilir bir CPU maliyetine sahip olabilir.
- İşleme sırasını ayarlama
- Uzamsal yüzeyler büyük olma eğilimindedir, çünkü kullanıcının çevresini çevreleyen tüm ortamını temsil eder. Özellikle birden fazla görünür geometri katmanının (hem uzamsal yüzeyler hem de diğer hologramlar dahil) olduğu durumlarda GPU'daki piksel işleme maliyetleri yüksek olabilir. Bu durumda, kullanıcıya en yakın katman tüm katmanları daha uzağa tıkar, bu nedenle bu daha uzak katmanları işlemek için harcanan tüm GPU süreleri boşa harcanır.
- GPU'daki bu yedekli çalışmayı azaltmak için, opak yüzeyleri önden arkaya sırada işlemeye yardımcı olur (önce daha yakın olanlar, daha uzak olanlar son sırada). 'Opak' ile, DepthWriteMask değerinin derinlik kalıbınızda bir olarak ayarlandığı yüzeyleri ifade ediyoruz. En yakın yüzeyler işlendiğinde, daha uzak yüzeylerin GPU'da piksel işlemcisi tarafından verimli bir şekilde atlanmaları için derinlik arabelleğine astarlanırlar.
Mesh İşleme
Bir uygulama, uzamsal yüzey örgüleri üzerinde ihtiyaçlarına uygun çeşitli işlemler yapmak isteyebilir. Her uzamsal yüzey ağıyla sağlanan dizin ve köşe verileri, tüm modern işleme API'lerinde üçgen çizgileri işlemek için kullanılan köşe ve dizin arabellekleriyle aynı tanıdık düzeni kullanır. Ancak, farkında olmanız gereken önemli bir gerçek, uzamsal eşleme üçgenlerinin ön saat yönünde sargı düzenine sahip olmasıdır. Her üçgen, ağın dizin arabelleğindeki üç köşe diziniyle temsil edilir ve bu dizinler üçgen ön taraftan görüntülendiğinde üçgenin köşelerini saat yönünde bir sırada tanımlar. Uzamsal yüzey çizgilerinin ön tarafı (veya dışı), gerçek dünya yüzeylerinin ön tarafına (görünür) beklediğiniz şekilde karşılık gelir.
Uygulamalar yalnızca yüzey gözlemcisi tarafından sağlanan kaba üçgen yoğunluğu hala yeterince kaba değilse mesh basitleştirmesi yapmalıdır- bu çalışma hesaplama açısından pahalıdır ve sağlanan çeşitli ayrıntı düzeylerini oluşturmak için çalışma zamanı tarafından zaten gerçekleştirilmektedir.
Her yüzey gözlemcisi birden çok bağlanmamış uzamsal yüzey sağlayabildiği için, bazı uygulamalar bu uzamsal yüzey çizgilerini birbirine kırpmak ve sonra da fermuarlarını birbirine bağlamak isteyebilir. Genel olarak, yakındaki uzamsal yüzey çizgileri genellikle hafifçe çakıştığı için kırpma adımı gereklidir.
Raycasting ve Çarpışma
Bir fizik API'sinin ( Havok gibi) uzamsal yüzeyler için ışınlama ve çarpışma işlevselliğine sahip bir uygulama sağlaması için uygulamanın fizik API'sine uzamsal yüzey çizgileri sağlaması gerekir. Fizik için kullanılan tireler genellikle aşağıdaki özelliklere sahiptir:
- Yalnızca az sayıda üçgen içerirler. Fizik işlemleri işleme işlemlerinden daha yoğun işlem gücündedir.
- Su geçirmezler. Düz olması amaçlanan yüzeylerde küçük delikler olmamalıdır; görünür olamayacak kadar küçük delikler bile sorunlara neden olabilir.
- Dışbükey gövdelere dönüştürüldüler. Dışbükey gövdelerin çok az poligonu vardır ve deliksizdir ve işlenmeleri ham üçgen çizgilere göre çok daha işlem açısından verimlidir.
Uzamsal yüzeylere karşı ışın yayınları yaparken, bu yüzeylerin genellikle karmaşık, dağınık küçük ayrıntılarla dolu şekiller olduğunu unutmayın - tıpkı masanız gibi! Bu, tek bir ışın yayınının genellikle yüzeyin şekli ve yakınındaki boş alanın şekli hakkında yeterli bilgi vermek için yetersiz olduğu anlamına gelir. Genellikle küçük bir alanda birçok ışın yayını yapmak ve yüzey hakkında daha güvenilir bir anlayış elde etmek için toplama sonuçlarını kullanmak iyi bir fikirdir. Örneğin, bir yüzeydeki hologram yerleşimini yönlendirmek için ortalama 10 raycast kullanılması, yalnızca tek bir raycast kullanan çok daha yumuşak ve daha az 'hareketli' sonuç verir.
Ancak, her raycast'in yüksek bir hesaplama maliyeti olabileceğini unutmayın. Kullanım senaryonuza bağlı olarak, uzamsal yüzeylerdeki delikleri düzeltmek ve çıkarmak için (uzamsal çizgiler güncelleştirildiğinde yapılır) fazladan ışın yayınlarının işlem maliyetini (her kareyi yapıldı) mesh işlemenin hesaplama maliyetine karşı dengelemelisiniz.
Ortam tarama deneyimi
Uzamsal eşleme kullanan her uygulama bir 'tarama deneyimi' sağlamayı göz önünde bulundurmalıdır; uygulamanın doğru çalışması için gerekli olan yüzeyleri taramak için kullanıcıya rehberlik ettiği işlem.
Tarama örneği
Bu tarama deneyiminin doğası, her uygulamanın gereksinimlerine bağlı olarak büyük ölçüde değişebilir, ancak tasarımına iki ana ilke yol göstermelidir.
İlk olarak, kullanıcıyla net iletişim birincil sorundur. Kullanıcı her zaman uygulamanın gereksinimlerinin karşılanıp karşılanmadığını bilmelidir. Karşılanmadığında, kullanıcıya bunun neden böyle olduğu hemen net olmalı ve hızlı bir şekilde uygun eylemi gerçekleştirmeye yönlendirilmelidir.
İkinci olarak , uygulamalar verimlilik ve güvenilirlik arasında bir denge kurmaya çalışmalıdır. Bunu güvenilir bir şekilde yapmak mümkün olduğunda, uygulamaların kullanıcı zamanından tasarruf etmek için uzamsal eşleme verilerini otomatik olarak analiz etmesi gerekir. Bunu güvenilir bir şekilde yapmak mümkün olmadığında, uygulamalar bunun yerine kullanıcının uygulamaya gereken ek bilgileri hızlı bir şekilde sağlamasına olanak sağlamalıdır.
Doğru tarama deneyimini tasarlamaya yardımcı olmak için aşağıdaki olasılıklardan hangisinin uygulamanız için geçerli olduğunu göz önünde bulundurun:
Tarama deneyimi yok
- Bir uygulama kılavuzlu tarama deneyimi olmadan mükemmel çalışabilir; doğal kullanıcı hareketi seyrinde gözlemlenen yüzeyleri öğrenecektir.
- Örneğin, kullanıcının holografik sprey boya ile yüzeylerde çizim yapmasını sağlayan bir uygulama, yalnızca şu anda kullanıcıya görünen yüzeylerin bilinmesini gerektirir.
- Ortam, kullanıcının HoloLens'i kullanarak zaten çok fazla zaman harcadığı bir ortamsa zaten taranabilir.
- Ancak uzamsal haritalama tarafından kullanılan kameranın kullanıcının önünde yalnızca 3,1 m'yi görebileceğini, bu nedenle uzamsal haritalamanın, kullanıcı bunları geçmişte daha yakın bir mesafeden gözlemlemediği sürece daha uzak yüzeyleri bilemeyeceğini unutmayın.
- Bu nedenle kullanıcı hangi yüzeylerin tarandığını anlayabilir, uygulama bu etkiyle ilgili görsel geri bildirim sağlamalıdır, örneğin taranan yüzeylere sanal gölgeler eklemek kullanıcının bu yüzeylere hologram yerleştirmesine yardımcı olabilir.
- Bu durumda uzamsal yüzey gözlemcisinin sınırlayıcı birimleri, kullanıcıyı takip edebilmeleri için her karenin gövde kilitli uzamsal koordinat sistemine güncelleştirilmesi gerekir.
Uygun bir konum bulma
- Bir uygulama belirli gereksinimlere sahip bir konumda kullanılmak üzere tasarlanabilir.
- Örneğin, uygulama holografik kung-fu'yu güvenle uygulayabilmeleri için kullanıcının çevresinde boş bir alan gerektirebilir.
- Uygulamalar belirli gereksinimleri kullanıcıya önceden iletmeli ve net görsel geri bildirimlerle pekiştirmelidir.
- Bu örnekte, uygulama gerekli boş alanın kapsamını görselleştirmeli ve bu bölge içindeki istenmeyen nesnelerin varlığını görsel olarak vurgulamalıdır.
- Bu durumda uzamsal yüzey gözlemcisinin sınırlayıcı birimleri, seçilen konumda dünya kilitli bir uzamsal koordinat sistemi kullanmalıdır.
Yüzeylerin uygun bir yapılandırmasını bulma
- Bir uygulama, holografik bir ayna salonu oluşturmak için iki büyük, düz, karşıt duvar gibi belirli bir yüzey yapılandırması gerektirebilir.
- Böyle durumlarda, uygulamanın uygun yüzeyleri algılamak ve kullanıcıyı bunlara yönlendirmek için uzamsal eşleme tarafından sağlanan yüzeyleri analiz etmeleri gerekir.
- Uygulamanın yüzey analizi güvenilir değilse kullanıcının bir geri dönüş seçeneği olmalıdır. Örneğin, uygulama bir kapıyı yanlış bir şekilde düz bir duvar olarak tanımlarsa, kullanıcının bu hatayı düzeltmek için basit bir yönteme ihtiyacı vardır.
Ortamın bir bölümünü tarama
- Bir uygulama, kullanıcı tarafından yönlendirilen ortamın yalnızca bir bölümünü yakalamak isteyebilir.
- Örneğin, uygulama bir odanın bir bölümünü tarar, böylece kullanıcı satmak istediği mobilyalar için holografik olarak sınıflandırılmış bir reklam gönderebilir.
- Bu durumda uygulama, tarama sırasında kullanıcı tarafından gözlemlenen bölgelerde uzamsal eşleme verilerini yakalamalıdır.
Tüm odayı tarayın
- Bir uygulama, kullanıcının arkasındakiler de dahil olmak üzere geçerli odadaki tüm yüzeylerin taranmış olmasını gerektirebilir.
- Örneğin, bir oyun kullanıcıyı her yönden yaklaşan yüzlerce küçük Lilliput'un kuşatması altında Gulliver rolüne sokabilir.
- Bu gibi durumlarda, uygulamanın geçerli odadaki yüzeylerden kaçının zaten tarandığını belirlemesi ve kullanıcının bakışını önemli boşlukları doldurmaya yönlendirmesi gerekir.
- Bu işlemin anahtarı, kullanıcıya henüz taranmayan yüzeyleri net hale getiren görsel geri bildirim sağlamaktır. Uygulama, örneğin uzamsal haritalama yüzeyleri tarafından kapsanmayan bölgeleri görsel olarak vurgulamak için mesafe tabanlı sis kullanabilir.
Ortamın ilk anlık görüntüsünü alma
- Bir uygulama, ilk 'anlık görüntü' aldıktan sonra ortamdaki tüm değişiklikleri yoksaymak isteyebilir.
- Bu, ortamın ilk durumuyla sıkı bir şekilde birleştirilmiş kullanıcı tarafından oluşturulan verilerin kesintiye uğramasını önlemek için uygun olabilir.
- Bu durumda, tarama tamamlandıktan sonra uygulamanın uzamsal eşleme verilerinin ilk durumunda bir kopyasını alması gerekir.
- Hologramlar ortam tarafından doğru şekilde kapatılmaya devam ediyorsa uygulamalar uzamsal eşleme verilerine yönelik güncelleştirmeleri almaya devam etmelidir.
- Uzamsal eşleme verilerine yönelik devam eden güncelleştirmeler, meydana gelen değişikliklerin görselleştirilmesine de olanak tanır ve kullanıcıya ortamın önceki ve mevcut durumları arasındaki farkları netleştirir.
Ortamın kullanıcı tarafından başlatılan anlık görüntülerini alma
- Bir uygulama yalnızca kullanıcı tarafından belirtildiğinde ortam değişikliklerine yanıt vermek isteyebilir.
- Örneğin, kullanıcı farklı anlarda pozlarını yakalayarak bir arkadaşınızın birden çok 3B 'heykeli' oluşturabilir.
Kullanıcının ortamı değiştirmesine izin ver
- Bir uygulama, kullanıcının ortamında yapılan değişikliklere gerçek zamanlı olarak yanıt verecek şekilde tasarlanabilir.
- Örneğin, bir perde çizen kullanıcı, diğer tarafta gerçekleşen holografik bir oyun için 'sahne değişikliğini' tetikleyebilir.
Uzamsal eşleme verilerindeki hataları önlemek için kullanıcıya yol gösterme
- Bir uygulama, kendi ortamını tararken kullanıcıya rehberlik sağlamak isteyebilir.
- Bu, kullanıcının uzamsal eşleme verilerindeki belirli tür hataları önlemesine yardımcı olabilir; örneğin, güneş ışığı alan pencerelerden veya yansıtmalardan uzak durarak.
Dikkat etmeniz gereken ek bir ayrıntı, uzamsal eşleme verilerinin 'aralığının' sınırsız olmamasıdır. Uzamsal eşleme büyük alanlardan oluşan kalıcı bir veritabanı oluştursa da, bu verileri yalnızca kullanıcı çevresinde sınırlı boyuttaki bir 'kabarcık' içindeki uygulamaların kullanımına sunar. Uzun bir koridorun başlangıcından başlayıp başlangıçtan yeterince uzaklaşırsanız, en sonunda başlangıçtaki uzamsal yüzeyler kaybolur. Kullanılabilir uzamsal eşleme verilerinden kaybolduktan sonra bu yüzeyleri uygulamanızda önbelleğe alarak bunu azaltabilirsiniz.
Mesh işleme
Yüzeylerdeki yaygın hata türlerini algılamaya ve uzamsal eşleme verilerini uygun şekilde filtrelemeye, kaldırmaya veya değiştirmeye yardımcı olabilir.
Uzamsal haritalama verilerinin gerçek dünya yüzeylerine mümkün olduğunca sadık olmasını amaçlandığını unutmayın, bu nedenle uyguladığınız her işlem, yüzeylerinizi 'gerçek'ten daha ileriye taşıyan riskler uygular.
Aşağıda yararlı bulabileceğiniz farklı ağ işleme türlerinin bazı örnekleri verilmiştir:
Delik doldurma
- Karanlık bir malzemeden yapılmış küçük bir nesne taramayı başaramazsa, çevresindeki yüzeyde bir delik bırakır.
- Delikler tıkanıklıkları etkiler: Hologramlar, sözde opak gerçek dünya yüzeyindeki bir delikten '' görülebilir.
- Delikler ışın yayınlarını etkiler: Kullanıcıların yüzeylerle etkileşime geçmesine yardımcı olmak için ışın yayınları kullanıyorsanız, bu ışınların deliklerden geçmesi istenmeyen bir durum olabilir. Bir azaltma, uygun boyuttaki bir bölgeyi kapsayan birden çok raycast paketi kullanmaktır. Bu, 'aykırı değer' sonuçlarını filtrelemenizi sağlar, böylece bir raycast küçük bir delikten geçse bile toplama sonucu geçerli olmaya devam eder. Ancak bu yaklaşımın hesaplama maliyeti vardır.
- Delikler fizik çarpışmalarını etkiler: Fizik simülasyonu tarafından kontrol edilen bir nesne yerdeki bir delikten düşebilir ve kaybolabilir.
- Yüzey ağındaki bu delikleri algoritmik olarak doldurmak mümkündür. Ancak, pencere ve kapı gibi 'gerçek deliklerin' doldurulmaması için algoritmanızı ayarlamanız gerekir. 'Gerçek delikleri' 'hayali deliklerden' güvenilir bir şekilde ayırt etmek zor olabilir, bu nedenle 'boyut' ve 'sınır şekli' gibi farklı buluşsal yöntemlerle deneme yapmanız gerekir.
Halüsinasyon kaldırma
- Yansımalar, parlak ışıklar ve hareketli nesneler havada kayan küçük kalan 'halüsinasyonlar' bırakabilir.
- Halüsinasyonlar tıkanıklıkları etkiler: Halüsinasyonlar, diğer hologramların önünde hareket eden ve kapatan koyu şekiller olarak görülebilir.
- Halüsinasyonlar ışın yayınlarını etkiler: Kullanıcıların yüzeylerle etkileşim kurmasına yardımcı olmak için ışın yayınları kullanıyorsanız, bu ışınlar arkasındaki yüzey yerine halüsinasyona isabet edebilir. Deliklerde olduğu gibi, bir hafifletme tek bir ışın yayını yerine birçok ışın yayınını kullanmaktır, ancak bu işlem maliyetine neden olacaktır.
- Halüsinasyonlar fizik çarpışmalarını etkiler: Fizik simülasyonu tarafından kontrol edilen bir nesne halüsinasyona karşı takılabilir ve görünüşte açık bir alanda hareket edemez.
- Bu tür halüsinasyonları yüzey ağından filtrelemek mümkündür. Ancak deliklerde olduğu gibi, lamba standları ve kapı tutamaçları gibi gerçek küçük nesnelerin kaldırılmaması için algoritmanızı ayarlamanız gerekir.
Yumuşatma
- Uzamsal eşleme, gerçek dünya karşılıklarına kıyasla kaba veya 'gürültülü' görünen yüzeyleri döndürebilir.
- Pürüzsüzlük fizik çarpışmalarını etkiler: Zemin kabaysa, fiziksel simülasyonlu bir golf topu düz bir çizgide düzgün bir şekilde yuvarlanmayabilir.
- Pürüzsüzlük işlemeyi etkiler: Bir yüzey doğrudan görselleştirilirse, pürüzlü yüzey normalleri görünümünü etkileyebilir ve 'temiz' bir görünümü kesintiye uğratabilir. Yüzeyi işlemek için kullanılan gölgelendiricide uygun aydınlatma ve dokuları kullanarak bunu azaltmak mümkündür.
- Bir yüzey ağındaki pürüzlülüğü düzeltmek mümkündür. Ancak bu, yüzeyi ilgili gerçek dünya yüzeyinden daha uzağa itebilir. Yakın bir yazışmanın sürdürülmesi, doğru hologram tıkanıklığı üretmek ve kullanıcıların holografik yüzeylerle hassas ve öngörülebilir etkileşimler elde etmesini sağlamak için önemlidir.
- Yalnızca kozmetik bir değişiklik gerekiyorsa, köşe konumlarını değiştirmeden köşe normallerini düzeltmek yeterli olabilir.
Uçak bulma
- Bir uygulamanın uzamsal eşleme tarafından sağlanan yüzeylerde gerçekleştirmek isteyebileceği birçok analiz biçimi vardır.
- Basit örneklerden biri 'uçak bulma'dır; yüzeylerin sınırlanmış, çoğunlukla planlı bölgelerini tanımlama.
- Planar bölgeler holografik çalışma yüzeyleri olarak kullanılabilir ve holografik içeriğin uygulama tarafından otomatik olarak yerleştirilebildiği bölgelerdir.
- Planar bölgeler, kullanıcıları ihtiyaçlarına en uygun yüzeylerle etkileşime geçmek için yönlendirmek için kullanıcı arabirimini kısıtlayabilir.
- Planar bölgeleri, LCD ekranlar, tablolar veya beyaz tahtalar gibi işlevsel nesnelere holografik karşılıklar için gerçek dünyada olduğu gibi kullanılabilir.
- Planar bölgeleri oyun alanlarını tanımlayabilir ve video oyunu düzeylerinin temelini oluşturur.
- Planar bölgeleri, gerçek insanların yürüyebileceği kat alanlarını belirleyerek sanal temsilcilerin gerçek dünyada gezinmesine yardımcı olabilir.
Prototip oluşturma ve hata ayıklama
Yararlı araçlar
- HoloLens öykünücüsü, fiziksel bir HoloLens'e erişim olmadan uzamsal eşleme kullanarak uygulama geliştirmek için kullanılabilir. HoloLens hareket, uzamsal koordinat sistemleri ve uzamsal eşleme çizgileri dahil olmak üzere uygulamanızın normalde tüketeceği tüm verilerle gerçekçi bir ortamda HoloLens'te canlı oturum simülasyonu yapmanızı sağlar. Bu, hataları ayıklamak ve kodunuzda yapılan değişiklikleri değerlendirmek için yararlı olabilecek güvenilir ve tekrarlanabilir giriş sağlamak için kullanılabilir.
- Bir senaryoyu yeniden oluşturmak için canlı bir HoloLens'ten ağ üzerinden uzamsal eşleme verilerini yakalayın, ardından diske kaydedin ve sonraki hata ayıklama oturumlarında yeniden kullanabilirsiniz.
- Windows cihaz portalı 3B görünümü, şu anda uzamsal eşleme sistemi aracılığıyla mevcut olan tüm uzamsal yüzeyleri görmenin bir yolunu sağlar. Bu, uygulamanızın içindeki uzamsal yüzeyler için bir karşılaştırma temeli sağlar; örneğin, herhangi bir uzamsal yüzeyin eksik olup olmadığını veya yanlış yerde görüntülendiğini kolayca anlayabilirsiniz.
Genel prototip oluşturma kılavuzu
- Uzamsal eşleme verilerindeki hatalar kullanıcınızın deneyimini önemli ölçüde etkileyebileceğinden, uygulamanızı çok çeşitli ortamlarda test yapmanızı öneririz.
- Her zaman aynı yerde, örneğin masanızda test yapma alışkanlığına yakalanmayın. Farklı konumların, şekillerin, boyutların ve malzemelerin çeşitli yüzeylerinde test yaptığınızdan emin olun.
- Benzer şekilde, yapay veya kaydedilen veriler hata ayıklama için yararlı olabilir, ancak aynı birkaç test çalışmasına fazla dayanmayın. Bu, daha çeşitli testlerin daha önce yakalanacağı önemli sorunları bulmayı geciktirebilir.
- Gerçek (ve ideal olarak ulaşılamayan) kullanıcılarla test gerçekleştirmek iyi bir fikirdir çünkü HoloLens'i veya uygulamanızı sizinle tam olarak aynı şekilde kullanmayabilirler. Aslında, insanların davranışları, bilgileri ve varsayımlarının ne kadar farklı olabileceği sizi şaşırtabilir!
Sorun giderme
- Yüzey örgülerinin doğru şekilde yönlendirilebilmesi için, her GameObject'in ağlarının inşa edilmesi için SurfaceObserver'a gönderilmeden önce etkin olması gerekir. Aksi takdirde, tireler alanınızda görünür ancak garip açılarda döndürülür.
- SurfaceObserver ile iletişim kuran betiği çalıştıran GameObject öğesinin kaynak olarak ayarlanması gerekir. Aksi takdirde, oluşturup surfaceobserver'a gönderdiğiniz tüm GameObject'ler, kendi mesh'lerinin oluşturulması için Üst Oyun Nesnesi'nin uzaklığıyla eşit bir ofset değerine sahip olur. Bu, mesh'lerinizin birkaç metre uzakta görünmesine neden olabilir ve bu da olup bitenlerin hatalarını ayıklamayı zorlaştırır.