Aracılığıyla paylaş


Yeniden sığdırma işlemleri

Dünya Kilitleme Araçları'ndaki yeniden sığdırma işlemleri, sistem sahnedeki bazı nesnelerin yeniden konumlandırılmasıyla bu nesnelerin fiziksel dünya tutturucularına daha iyi kaydedileceğini belirlediğinde kullanılabilecek işlemlerdir.

Bu bölüm, yeniden uygun operasyonlara yol açan durumlar ve işlemlerin mekaniği hakkında daha fazla içgörü vermeye çalışacaktır.

Burada, yeniden sığdırma işlemlerinin seyrek gerçekleştiğini vurgulamamak önemlidir. Yeniden çözme işlemini tetikleyen varsayılan hata toleransları uygulama tarafından özelleştirilebilir, ancak normalde karma gerçeklik ortamları yalnızca olağanüstü durumlarda yeniden çözme işlemlerini tetikler. Yeniden çözme gereksinimine katkıda bulunabilecek koşullar şunlardır:

  • Ortamın kötü olması nedeniyle izleme kaybı.
  • Çevre taramasını etkileyen başın hızlı hareketi.
  • Dinamik ortamlar.
  • Döngü kapatma (yani, daha önce ziyaret edilen bir noktaya geri dönen bir kavşak yolunda izleme hatalarını biriktirmek).

Bu sorunların kök nedeni kötü izlemedir; başka bir deyişle, izleme hatalarıdır. Makul ortamların makul düzeyde iyi bir izleme üretmesiyle ve özellikle alanda ilk taramadan sonra, yeniden sığdırma işlemleri çok nadir hale gelecektir.

Parça birleştirme

Birçok koşul birden çok parçanın varlığına yol açabilir, en yaygın neden geçici izleme kaybıdır. Parçalar ortak koordinat alanını paylaşan nesne koleksiyonları olarak tanımlanır, ancak bir parçanın koordinat alanının başka bir parçaya göre belirsiz bir şekilde bulunduğu yerdir.

Daha önce ilişkisiz iki parçanın içeriğinin aynı alana göre doğru konumlandırılabilmesi için yeterli sayıda yeni algılayıcı verisi alındığında ve işlendiğinde parça birleştirme gerçekleştirilebilir.

İki (veya daha fazla) parçanın içeriğinin birleştirileceği yeni koordinat alanı rastgeledir. Burada, son koordinat alanının boşluklardan biri olacağını belirteceğiz. Bunun tek nedeni, hedef parça dışında birleştirilmekte olan parçaların tümünün koordinatlarının ayarlanması gerektiği anlamına gelir. Birleştirmenin son hedefi olarak seçilen parçanın içeriği etkilenmez.

Birleştirilen kaynak parçaların her biri için sistem tarafından bir ayarlama dönüşümü hesaplanır. Bu parçalardaki her ek noktası için AdjustLocationDelegate, ayarlama dönüşümüyle çağrılır. Yine, hedef parçadaki ek noktaları etkilenmez ve AdjustLocationDelegates çağrılmaz.

Parçaların açıklamasında karanlık bir koridor senaryosuyla bağlantılı iki oda, böyle bir duruma örnektir. İlk aşamada, her iki parça da (odalar) taranmıştır, ancak iki parçanın göreli konumlarıyla ilgili bilgi yoktur. Bu nedenle, her bir parçanın içeriğinin yerleştirildiği koordinat sistemi, bu odadaki tüm nesneler arasında sabit olduğu sürece rastgeledir. Örneğin, her odanın içeriği, o odanın güneybatı köşesindeki kaynağıyla bir koordinat sisteminde olabilir. Aynı parçadaki iki nesnenin koordinatları, iki nesnenin birbirine göre konumlarını gösterir, ancak iki farklı parçadaki iki nesnenin koordinatları, göreli konumları hakkında hiçbir şey ifade etmez.

Daha fazla bilgi edinildiğinde, ikinci parçanın içeriğinin koordinatlarını, içeriğinin koordinatlarının ilk parçadaki nesnelere göre anlamlı olması için ayarlama fırsatı vardır. Örneğin, koridor ışığı açılabilir ve koridor iki parça arasındaki boşluğa köprü yaparak çapraz geçiş yapılabilir. Her iki odada bulunan tüm nesnelerin koordinatları aynı tutarlı koordinat alanında olacak şekilde ayarlanırsa, iki parça arasında artık gerçek bir ayrım yoktur ve bu nedenle bunların içerikleri tek bir ortak parçaya ait olarak kabul edilebilir.

Birden çok parçayı tek bir parçaya daraltma işlemi bir birleştirme işlemidir.

Burada, dünya kilitli alanında yer alan normal Unity nesneleri için birleştirme işleminin hiçbir etkisi olmayacağına dikkat edin. Nesnelerin yeniden sığdırma işlemlerinden taşınması yalnızca ek noktaları aracılığıyla gerçekleşir.

İşlemleri yeniden çözme

Ortaya çıkan bir diğer durum da çapaların konumlarının zaman içinde rafine olmasıdır. Dönüş/uzaklık dönüşümlerinin artık ilk kaba yer işareti konumları ile fiziksel dünyadaki daha yeni geliştirilmiş konumlar arasındaki farkı telafi etmek için yeterli olmadığı ortaya çıkıyor. Tutturucuların kendilerinin sürekli olarak süngerimsi uzayda birbirlerine göre hareket ettiğini unutmayın. Ancak bu tutturuculardan türetilen ek noktaları dünya kilitli alanında sabitlenir.

Sistem, yönettiği ek noktalarının sabit konumlarda yapılan güncelleştirmeler nedeniyle fiziksel dünyaya daha iyi kaydedilebileceğini algıladığında, düzeltme olayı için başka bir fırsatı vardır. Ek noktası konumlarının yeni sensör verilerini yansıtacak şekilde ayarlanması, yeniden çözme işlemi olarak bilinir. Birleştirme işleminde parçanın içeriği tek bir dönüşümle ayarlanır ve iki parçanın koordinat alanlarını tek bir birleşik alanda birleştirir, ancak yeniden çözme işlemi, her ek noktasını etkileyen tutturucuların güncelleştirilmiş konumlarına göre ayrı ayrı ayarlar.

Birleştirme işleminde olduğu gibi, her ek noktası AdjustLocationDelegate aracılığıyla hesaplanan ayarlama dönüşümü hakkında bilgilendirilir.

Koşullar doğruysa, yeniden çözme işlemi bir birleştirme işlemi de gerçekleştirebilir. Bu birleştirme, yeniden çözmenin örtük bir parçası olarak kabul edilir: Birleştirme için ayrı bir olay oluşturulmaz ve yeniden çözmenin bir parçası olarak teslim edilen ayarlama dönüşümü hem tutturucu hareket nedeniyle bireysel ayarlamayı hem de birleştirme nedeniyle parça ayarlamasını içerir.

Yeniden sığdırma olaylarına tepki verme

Birleştirme veya yeniden çözme işleminde, olayları yeniden sığdırma tepkisi uygulamaya bağlı olur. Daha kesin olarak, farklı nesne türleri farklı tepkiler gösterebileceğinden, bu ek noktası işleyicilerinin her birine kadar olur. Genellikle, ek noktasının etkilediği nesneler, GameObject.transform aracılığıyla ayarlama dönüşümü tarafından taşınır. Bunun yerine hareket, köşeleri el ile taşıma gibi başka bir mekanizma tarafından uygulanabilir. Hatta bazı uygulamaların birleştirmeden etkilenen nesneleri atıp yeni bir oluşturma döngüsüne başlaması bile avantajlı olabilir.

Önemli olan, World Locking Tools'un uygulamanın yeniden sığdırma işlemlerine nasıl veya nasıl tepki verip vermediğine bağımlılığı olmamasıdır. Tamamen uygulama geliştiricisinin gereksinimlerine bağlı.

Yeniden sığdırma işlemleri için bildirim ve tepki için tercih edilen mekanizma Ek noktasıdır. Bu makalede daha fazla ayrıntı ve seçenek ele alınıyor.

Ayrıca bkz.