Aracılığıyla paylaş


SessionOrigin'i anlama

SessionOrigin, AR Foundation'da tanıtılan nispeten yeni bir uygulamadır, ancak fikir onlarca yıllık işleme motorlarına dayanan kamera makinelerinde ortaya çıkmıştır. MRTK Playspace düğümü olarak bunu biliyor olabilirsiniz. Oldukça güçlüdür, ancak ne yazık ki kötü açıklanmıştır ve sonuç olarak kötü anlaşılmıştır.

SessionOrigin nedir?

SessionOrigin yalnızca kameranın bağlı olduğu bir Transform nesnesidir. En basiti, kameranın sanal sahneye yerleştirilmesine izin verir. Daha da önemlisi, özel bir koordinat alanı tanımlar.

Unity'de (ve tüm modern işleme altyapılarında) üst-alt öğe dönüştürme ilişkisinde olduğu gibi, üst öğeyi "taşımak" alt öğeyi "taşır". Bu bağlamda "taşıma" teriminin amacı, üst öğesinin genel pozundaki bir değişikliğin çocuğun genel koordinatlarını değiştirmesi ve bir nesnenin genel koordinatları değiştiğinde, bu nesnenin genel koordinatları değişmemiş nesnelere göre taşınmış gibi görünmesidir.

Kamera, işlenmediği için bu anlamda oldukça özeldir. oluşturucunun bakış açısını belirler. Somut bir örnek bunu açıklığa kavuşturabilir.

SessionOrigin'in en basit örneği

Kameranın başlangıçta (AR uygulamalarında normal olduğu gibi) çıkış noktasında olduğu ve kameranın önündeki Z eksenine 10 metre (position=(0,0,10)) yerleştirilmiş tek bir kırmızı kürenin bulunduğu çok basit bir sahne düşünün.

En basit sanal sahne

Ne olursa olsun, kullanıcının küreden 1 metre uzakta başlamasını istediğimizi düşünün.

İki ilginç seçeneğimiz var:

  1. Kamerayı yeni konuma (0,0,9) taşıyın.
  2. Küreyi yeni konuma (0,0,1) taşıyın.

İki seçenek

İki seçeneğin başka bir bağlam olmadan nihai olarak eşdeğer olduğu oldukça açıktır. Her iki durumda da, başlangıçta küre kameranın önünde 1 metredir. Tek fark, iki nesnenin mutlak genel koordinatlarıdır. bunların göreli koordinatları, yani ikisi arasındaki vektör her iki durumda da aynıdır.

1. seçeneği kullanmak istiyorsak, nasıl devam ederiz? Kameranın koordinatlarını ayarlarsak, izleme sistemi tarafından bunların üzerine yazılır. Bunun yerine kamerayı bir üst nesneye ekleyip üst öğeyi taşırız. İzleyici, kameranın yerel pozunu ayarlar ve bu pozu ebeveyne göre hareket eder. Üst öğe artık SessionOrigin'dir.

Neden küre yerine kamerayı hareket ettirdin?

Bu basit durumda, iki seçenek açıkça değiştirilebilir. Ama unutmayın ki "küre" gerçekten "kamera hariç sahnedeki her şeyi" temsil eder. Sahnenin karmaşıklığı arttıkça, her şeyi taşımak daha karmaşık hale gelir. SessionOrigin aracılığıyla kamerayı hareket ettirmek her zaman aynı işlemdir.

Ayrıca, parçacık sistemleri veya gezinti kafesleri gibi yeniden konumlandırması zor veya imkansız olan nesne türleri de vardır. Ancak bunların hiçbiri dahil olmasa bile, sahnedeki tek bir nesnenin (SessionOrigin) koordinatlarını değiştirmenin, diğer her şeyin genel koordinatlarını değiştirmenin net avantajları vardır.

SessionOrigin her şeyi taşımamalıdır

En basit örneğimizi tekrar düşünün. Ancak bu bir AR uygulaması olduğundan, işlenen kırmızı küre ile birlikte kullanıcı fiziksel ortamı da görür. Basitlik açısından, fiziksel ortamımız gösterildiği gibi tek yeşil sandalye ile sınırlı olacaktır.

Hem sanal hem de fiziksel nesneler

Şimdi, kamerayı SessionOrigin aracılığıyla hareket ettirdiğimizde, kırmızı küreye göre hareket ettirdik, ancak belli ki kullanıcıyı alıp yeşil sandalyeye göre hareket ettirmedik. Küre şimdi daha yakın görünüyor, ancak sandalye tam olarak aynı konumda.

Fiziksel kullanıcıya göre sabit fiziksel nesneler

Ya sandalye koltuğunda bir çapa varsa? Çapa kırmızı küre ile hareket etmeli mi yoksa sandalye koltuğuna göre sabit mi kalmalıdır? Çapanın bütün noktası fiziksel dünyaya göre sabit kalmaktır, bu yüzden açıkça sandalyede kalmalıdır.

Başka bir örnek de uzamsal ağdır. Bu, bağlam, ray-casting vb. için fiziksel ortamın sanal bir sürümünü sağlamak için oluşturulan ağdır. Uzamsal ağın fiziksel dünyaya sabit kalmasını kesinlikle istiyoruz.

Diğer örnekler, el kafeslerinden göz bakışı vektörlerine kadar uzanır. Tümü, kameranın koordinatları ayarlanırsa (dönüştürülürse) bu nesnelerin koordinatlarının aynı ayarlamayı alması gerektiği ortak özelliğini paylaşır.

Bu nedenle kavramsal olarak, kamerayla eşgüdümlü olarak hareket eden nesnelerin tümü SessionOrigin'e de bağlanır. SessionOrigin, kırmızı küre gibi genel nesnelere göre taşındığında, bu nesnelerin tümü onunla birlikte getirilir.

Bunun, baş izleme nedeniyle kameranın hareketlerinden bağımsız olduğunu vurgulayın. İzleyici kamerayı SessionOrigin'e göre hareket eder.

Biraz daha matematiksel bir açıklama

Unity'nin genel koordinat sistemi bir AR uygulamasında varsayılan olarak rastgele bulunur. Yerçekimi vektörün (Y ekseni) "yukarı" ile hizalanması dışında, konum ve yönlendirme tamamen izleyicinin kamerayı başlangıçta nereye yerleştirdiği tarafından belirlenir.

Bu birçok uygulama için uygun olsa da, küresel koordinat alanının bu rastgeleliğini ortadan kaldırarak çok çeşitli olasılıklar açılır.

Önceki örnağa baktığımızda, sanal kırmızı kürenin gösterildiği gibi fiziksel sandalyeye göre konumlandırılması uygulamanın önemli olduğunu düşünün. Bunu SessionOrigin ayarını yaparak gerçekleştirebiliriz.

İstenen düzen

Kürenin (0,0,10) sandalyeden X ekseni boyunca 1 metre olmasını istiyorsak, sandalyenin (-1,0,10) olmasını istiyoruz. Kamera çıkış noktasındayken kameranın doğrudan negatif Z ekseni boyunca sandalyeden 2 metre geriye doğru olduğunu belirlersek, sandalye şu anda (0,0,2) konumundadır. (Unutmayın, fiziksel nesnelerin doğuştan gelen koordinatları yoktur, yalnızca kameraya ve sanal nesnelere yakınlık ile ima edilen koordinatlar vardır).

İlk düzen

Ancak SessionOrigin dönüşümünü (-1,0,8) olarak ayarlarsak kameranın konumu (-1,0,8) olur. 2 metre ilerideki sandalye (-1,0,10) konumundadır. Ve kırmızı küre, (0,0,10) sandalyenin 1 metre sağında istendiği gibi görünecektir.

Ayarlanmış düzen

Bu nedenle, Unity'nin küresel alanını yeniden konumlandırmak için SessionOrigin dönüşümünü etkin bir şekilde kullandık, böylece kırmızı küre ve diğer tüm küresel nesneler fiziksel dünyaya göre doğru konumda görünür.

Unity'nin genel koordinat alanını fiziksel dünyaya hizalamaya yönelik bu basit ama güçlü mekanizma karmaşık düzeni, koordinat alanlarının kalıcılığını, cihazlar arasında paylaşılan koordinat alanlarını ve daha fazlasını desteklemek için kullanılabilir.

Ayrıca bkz.