Hologram sabitlemesi

Performans

Temel alınan karma gerçeklik platformu ve cihazının en iyi sonuçları üretmesi için, çerçeve ücretleri gerçekleştirmek önemlidir. Hedef kare hızı (örn: 60 FPS veya 90 FPS), platformlar ve cihazlar arasında farklılık gösterecektir. Ancak, kare içinde çalışan karma gerçeklik uygulamalarında kararlı bir izleme, el ile izleme ve daha fazlası de kalıcı hologramlar olacaktır.

Ortam izleme

Kararlı holographic işleme, platform cihazına göre baş poz izlemeyi yoğun bir şekilde kullanır & . Unity, her karede sahneyi, temel alınan platform tarafından tahmin edilen ve sağlanan kamera pozlarından işleme oluşturacak. Bu izleme gerçek baş hareketi doğru izlemediğinden hologram görsel olarak yanlış görüntülenir. bu özellikle, kullanıcıların sanal hologramlar ile gerçek dünyaya ilişkilendirilebileceği HoloLens gibi AR cihazları için de belirlenir ve önemlidir. Performans, güvenilir kafa izleme için önemlidir, ancak diğer önemli özelliklerde olabilir. Kullanıcı deneyimini etkileyen ortam öğelerinin türleri, hedeflenen platform özelliklerine bağlıdır.

Windows Mixed Reality

Windows Mixed Reality platformu, platformda hologragram 'ı sabitleyen bazı başvuru malzemeleri sağlar. Geliştiricilerin, kullanıcılar için hologram görsel deneyimini geliştirmek üzere kullanabilecekleri bir çok önemli araç vardır.

Derinlik arabelleği paylaşımı

Unity geliştiricilerin, platformla birlikte uygulamanın derinlik arabelleğini paylaşma seçeneği vardır. Bu, geçerli bir çerçeve için hologram 'ların bulunduğu, platformun Late-Stage yeniden projeksiyon olarak bilinen donanım yardımlı bir işlem aracılığıyla hologragram 'leri sabitleyip kararsız hale getirebileceği bilgiler sağlar.

Geç aşama yeniden projeksiyonu

bir çerçeveyi işleme sonunda Windows Mixed Reality platformu, & uygulama tarafından üretilen renk derinliği oluşturma hedeflerini alır ve son ekran çıktısını, son kafa tahminiyle bu yana herhangi bir hafif baş hareket için hesaba dönüştürür. Uygulamanın oyun döngüsünün yürütülmesi zaman alır. Örneğin, 60 FPS 'de bu, uygulamanın bir çerçeveyi işlemek için ~ 16.667 MS alma işlemi olduğu anlamına gelir. Bu, minscc bir süre gibi görünse de, kullanıcının kafa konumu ve yönü, işleme sırasında kameranın yeni İzdüşüm matrislerine neden olur. Geç aşama yeniden projeksiyonu, bu yeni perspektifi için son görüntüdeki pikselleri hesaba dönüştürür.

Piksel başına ve sabitleştirme düzlemi LSR

Windows Mixed Reality cihazda çalışan cihaz uç noktası ve işletim sistemi sürümüne bağlı olarak, Late-Stage yeniden projeksiyon algoritması her piksel başına veya bir ayırma düzlemiaracılığıyla gerçekleştirilir.

Piksel başına derinlik tabanlı

Piksel başına derinlik tabanlı yeniden projeksiyon, her piksel için görüntü çıkışını değiştirmek ve bu nedenle çeşitli uzaklıklarda hologramlar sabitlenmesini sağlamak için derinlik arabelleğinin kullanılmasıyla ilgilidir. Örneğin, bir Sphere yok, 10 GB uzakta olan bir ve daha önce olabilir. Sphere öğesini temsil eden piksellerin, Kullanıcı kafa sallarını temsil eden en uzakta pikselden farklı bir dönüştürmesi olur. Piksel başına yeniden projeksiyon, daha doğru yeniden projeksiyon için her pikselde bu uzaklık farkını hesaba götürecektir.

Rastgele düzlem

Platformla paylaşmak için doğru bir derinlik arabelleği oluşturmak mümkün değilse, başka bir LSR formu, bir sabitleme düzlemi kullanır. Sahnedeki tüm hologramlar bazı sabitlemeyi alacaktır, ancak istenen düzlemde bulunan hologragram, en fazla donanım sabitlemeyi alacaktır. Düzlemin noktası ve normal,Unity tarafından sağlananholographicsettings. SetFocusPointForFrameAPI 'si aracılığıyla platforma sağlanabilir.

Derinlik arabelleği biçimi

geliştirme için HoloLens hedefliyorsanız, 16 bit derinlik arabelleği biçiminin 24 bit ile karşılaştırıldığında kullanılması önemle önerilir. Derinlik değerleri daha az duyarlığa sahip olsa da bu, gecenin performans üzerinde tasarruf edebilir. Daha düşük duyarlık dengelemek ve z ilemücadele etmek Için, Unity tarafından ayarlanan 1000E varsayılan değerinden en küçük düzlemi azaltmanız önerilir.

Not

16 bit derinlik biçimikullanılıyorsa, Unity Bu ayarda bir kalıp arabelleği oluşturmadığından , kalıp arabelleğinin gerekli etkileri çalışmaz. Arka uç nokta grafik platformunda varsa, genellikle 24 bit derinlik biçimini seçme, genellikle 8 bitlik bir kalıp arabelleğioluşturur.

Unity 'de derinlik arabelleği paylaşımı

Derinlik tabanlı LSR kullanmak için geliştiricilerin yapması gereken iki önemli adım vardır.

  1. Project düzenleAyarlarPlayerxr Ayarlarsanal gerçeklik sdk 'ları için derinlik arabelleği paylaşımını etkinleştir
    1. HoloLens hedefliyorsanız, 16 bit derinlik biçimini de seçmeniz önerilir.
  2. Ekranda işleme rengi, işleme derinliği de

Unity 'deki donuk GameObjects genellikle otomatik olarak derinliğe yazar. Ancak saydam & metin nesneleri, genellikle varsayılan olarak derinliğe yazmaz. mrtk standart gölgelendirici veya metin kafesi Pro kullandıysanız, bu, kolayca düzeltilebilir.

Not

bir sahnedeki hangi nesnelerin görsel olarak derinlik arabelleğine yazmadığını hızlıca öğrenmek için, bir tane, mrtk yapılandırma profilindeki düzenleyici Ayarlar , oluşturma derinlik arabelleği yardımcı programını kullanabilir.

Saydam MRTK standart gölgelendirici

Mrtk standart gölgelendiriciyikullanan saydam malzemeler için Inspector penceresinde görüntülemek üzere malzemeyi seçin. Daha sonra, malzemeyi derinliğe (Yani Z-yazma) yazmak üzere dönüştürmek için Şimdi düzeltir düğmesine tıklayın.

Önce

, MRTK standart gölgelendirici düzeltmesini yapmadan önce derinlik arabelleği

Sonra

Derinlik arabelleği sabit MRTK standart gölgelendirici

Metin ağı Pro

metin ağı Pro nesneleri için, bu nesneyi denetçisinde görüntülemek için TMP gameobject ' i seçin. Malzeme bileşeni altında, MRTK TextMeshPro gölgelendirici kullanmak için atanan malzemenin gölgelendiriciyi değiştirin.

metin kafesi Pro derinlik arabelleği onarımı

Özel gölgelendirici

Özel bir gölgelendirici yazıyorsanız, gölgelendiriciyi derinlik arabelleğine yazacak şekilde yapılandırmak için, geçiş bloğu tanımının en üstüne zwrite bayrağını ekleyin.

Shader "Custom/MyShader"
{
    SubShader
    {
        Pass
        {
            ...
            ZWrite On
            ...
        }
    }
}
Donuk geri alma

Yukarıdaki yöntemler belirli bir senaryo için çalışmazsa (Unity Kullanıcı arabirimini kullanarak), başka bir nesnenin derinlik arabelleğine yazması mümkündür. Yaygın bir örnek, bir sahnenin kayan panel üzerinde Unity Kullanıcı arabirimi metnini kullanmaktır. Paneli donuk veya en azından derinliğe yazarken, & z değerleri birbirini kapatacak olduğundan, her iki metin de platform tarafından sabitlenebilir.

Worldanchiler (HoloLens)

Görsel kararlılığı sağlamak için doğru yapılandırmaların karşılanmasını sağlamaya yönelik olarak, hologram doğru fiziksel konumlarında kararlı kalmasını sağlamak önemlidir. Platformları fiziksel bir alanda önemli konumlara bildirmek için, geliştiriciler tek bir yerde kalması gereken oyun nesnelerinde Worldanörlerin faydalanabilir. Bir Worldanchor , bu nesnenin dönüştürmesi üzerinde mutlak denetim sağlayan bir gameobject öğesine eklenen bileşendir.

HoloLens gibi aygıtlar, ortamı sürekli olarak taramakta ve öğreniyor. bu nedenle HoloLens hareket konumunu boşluk olarak izledikçe & , tahminleri güncelleştirilir ve &. örneğin, bir gameobject, başlangıçta kameradan 1 olarak yerleştirilirse, HoloLens ortamı izliyorsa, oyun nesnesinin bulunduğu fiziksel noktayı gerçekten 1.1 m olarak kullanabilir. Bu, hologram taslağı oluşturma ile sonuçlanır. Bir oyun nesnesine WorldAnchor uygulamak, nesnenin dönüştürmeyi denetlemek için bağlayıcının nesnenin dönüşümünü denetlemesine olanak tanır. bu sayede, çalışma zamanında 1m yerine 1.1 m 'ye güncelleştirme olur. Uygulamalar, uygulama oturumlarında sürekli olarak devam etmek için Worldanchorstore 'u kullanabilir ve bunları yükleyebilir.

Not

Bir oyun nesnesine bir WorldAnchor bileşeni eklendikten sonra, bu oyun nesnesinin dönüşümünü değiştirmek mümkün değildir (yani, Transform. Position = x). Bir geliştirici, dönüşümü düzenlemek için WorldAnchor öğesini kaldırmalıdır.

WorldAnchor m_anchor;

public void AddAnchor()
{
    this.m_anchor = this.gameObject.AddComponent<WorldAnchor>();
}

public void RemoveAnchor()
{
    DestroyImmediate(m_anchor);
}

Bağlayıcılarla el ile çalışmaya yönelik bir alternatif isterseniz, Microsoft World kilitleme Araçları ' na göz atın.

Ayrıca bkz.