OpenXR uygulaması en iyi yöntemleri

BasicXrApp'in OpenXRProgram.cpp dosyasında aşağıdaki en iyi yöntemlerin bir örneğini görebilirsiniz. Başlangıçtaki Run() işlevi, başlatmadan olaya ve işleme döngüsüne tipik bir OpenXR uygulama kodu akışı yakalar.

Görsel kalite ve kararlılık için en iyi yöntemler

Bu bölümdeki en iyi yöntemler, herhangi bir OpenXR uygulamasında en iyi görsel kalite ve kararlılığı nasıl elde etmek için açıklanmaktadır.

HoloLens 2 özgü diğer performans önerileri için aşağıdaki HoloLens 2 performans için en iyi yöntemler bölümüne bakın.

Gama düzeltmeli işleme

İşleme işlem hattınızın gama doğru olduğundan emin olmak için dikkatli olunmalıdır. Takas zincirine işlenirken, işleme hedefi görünüm biçimi takas zinciri biçimiyle eşleşmelidir. Örneğin, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB hem takas zinciri biçimi hem de işleme hedefi görünümü için. Uygulamanın işleme işlem hattı gölgelendirici kodunda el ile sRGB dönüştürmesi yaparsa bir özel durum vardır. Uygulama bir sRGB takas zinciri biçimi istemelidir ancak işleme hedefi görünümü için doğrusal biçimi kullanmalıdır. Örneğin, değiştirme zinciri biçimi olarak isteyin DXGI_FORMAT_B8G8R8A8_UNORM_SRGB , ancak içeriğin çift gama düzeltilmesini önlemek için işleme hedefi görünümü olarak kullanın DXGI_FORMAT_B8G8R8A8_UNORM .

Projeksiyon katmanları için derinlik arabelleği gönderme

her zaman uzantıyı kullanın XR_KHR_composition_layer_depth ve derinlik arabelleği ile yansıtma katmanını bir çerçeve gönderirken gönderin xrEndFrame. HoloLens 2 donanım derinliğinin yeniden üretilmesi, hologram kararlılığını artırır.

Makul bir derinlik aralığı seçin

HoloLens'te hologram kararlılığı konusunda yardımcı olmak için sanal içeriğin kapsamını daraltmak için daha dar bir derinlik aralığı tercih edin. Örneğin, OpenXrProgram.cpp örneği 0,1 metre ile 20 metre arasındadır. Daha düzgün bir derinlik çözünürlüğü için reversed-Z kullanın. HoloLens 2'da tercih edilen DXGI_FORMAT_D16_UNORM derinlik biçiminin kullanılması daha iyi kare hızı ve performans elde etmek için yardımcı olacaktır, ancak 16 bit derinlik arabellekleri 24 bit derinlik arabelleklerinden daha az derinlik çözünürlüğü sağlar. Derinlik çözünürlüğünden en iyi şekilde yararlanmak için bu en iyi yöntemlerin takip edilmesi daha önemli hale gelir.

Farklı ortam karışımı modlarına hazırlanma

Uygulamanız dünyayı tamamen engelleyen çevreleyici başlıklar üzerinde de çalışacaksa API kullanarak xrEnumerateEnvironmentBlendModes desteklenen ortam karışımı modlarını listelemeyi ve işleme içeriğinizi doğru şekilde hazırlamayı unutmayın. Örneğin, HoloLens gibi bir sistem XR_ENVIRONMENT_BLEND_MODE_ADDITIVE için uygulama saydam rengi kullanmalıdır, ile bir sistem XR_ENVIRONMENT_BLEND_MODE_OPAQUEiçin ise bazı opak renk veya arka planda bir sanal oda işlemelidir.

Uygulamanın kök alanı olarak ilişkisiz başvuru alanını seçme

Uygulamalar genellikle görünümleri, eylemleri ve hologramları birbirine bağlamak için bazı kök dünya koordinat alanı oluşturur. Uzantının dünya ölçeğinde bir koordinat sistemi oluşturması desteklendiğinde kullanınXR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT. Bu sayede kullanıcı uygulamanın başladığı yerden çok (örneğin, 5 metre uzakta) hareket ettiğinde istenmeyen hologram kaymalarını önlemeye olanak tanır. İlişkisiz alan uzantısı yoksa geri dönüş olarak kullanın XR_REFERENCE_SPACE_TYPE_LOCAL .

Hologramı uzamsal yer işaretiyle ilişkilendirme

İlişkisiz başvuru alanı kullanırken, kullanıcı uzak odalara doğru ilerlerken ve sonra geri geldiğinde doğrudan bu başvuru alanına yerleştirdiğiniz hologramlar kayabilir. Hologram kullanıcılarının dünyanın ayrı bir yerine yerleştirmesi için uzantı işlevini kullanarak xrCreateSpatialAnchorSpaceMSFTbir uzamsal yer işareti oluşturun ve hologramı kaynağında konumlandırın. Bu, hologramı zaman içinde bağımsız olarak kararlı tutar.

Karma gerçeklik yakalama desteği

HoloLens 2 birincil ekranı eklenebilir ortam karıştırmayı kullansa da, kullanıcı karma gerçeklik yakalamayı başlattığında uygulamanın işleme içeriği ortam video akışıyla alfa harmanlanır. Karma gerçeklik yakalama videolarında en iyi görsel kaliteyi elde etmek için projeksiyon katmanınızın layerFlagsiçinde öğesini XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT ayarlamak en iyisidir.

HoloLens 2 performansı için en iyi yöntemler

Donanım yeniden oluşturma desteğine sahip bir mobil cihaz olarak, HoloLens 2 en iyi performans için daha katı gereksinimlere sahiptir. Oluşturma verilerini göndermenin çeşitli yolları vardır ve bu da işlem sonrasında belirgin bir performans cezasıyla sonuçlanır.

Takas zinciri biçimi seçme

desteklenen xrEnumerateSwapchainFormatspiksel biçimlerini kullanarak her zaman numaralandırın ve uygulamanın desteklediği çalışma zamanından ilk renk ve derinlik piksel biçimini seçin çünkü çalışma zamanı en iyi performans için bunu tercih eder. HoloLens 2 ve DXGI_FORMAT_B8G8R8A8_UNORM_SRGBDXGI_FORMAT_D16_UNORM genellikle daha iyi işleme performansı elde etmek için ilk seçenektir. Bu tercih, 24 bit derinlik arabelleklerinin performansı daha az etkilediği masaüstü bilgisayarda çalışan VR kulaklıklarda farklı olabilir.

Performans Uyarısı: Birincil takas zinciri renk biçimi dışında bir biçimin kullanılması, çalışma zamanı sonrası işlemeye neden olur ve bu da önemli bir performans cezasına neden olur.

Her zaman önerilen görünüm yapılandırması genişliği/yüksekliği (recommendedImageRectWidth ve öğesindenXrViewConfigurationView) ile işleyin ve işlemeden önce önerilen görünüm pozunu, FOV'yi ve diğer işleme parametrelerini sorgulamak için her zaman API kullanın xrLocateViewsrecommendedImageRectHeight. Pozları ve görünümleri sorgularken her zaman en son xrWaitFrame çağrıdan öğesini kullanınXrFrameEndInfo.predictedDisplayTime. Bu, HoloLens'in HoloLens'i takan kişi için işlemeyi ayarlamasını ve görsel kalitesini iyileştirmesini sağlar.

Tek bir projeksiyon katmanı kullanma

HoloLens 2, içeriği işlemek için sınırlı GPU gücüne ve tek bir projeksiyon katmanı için iyileştirilmiş bir donanım biratörüne sahiptir. Her zaman tek bir projeksiyon katmanı kullanmak, uygulamanın kare hızına, hologram kararlılığına ve görsel kalitesine yardımcı olabilir.

Performans Uyarısı: Tek bir koruma katmanı dışında herhangi bir şeyin gönderilmesi, çalışma zamanı sonrası işlemeye neden olur ve bu da önemli bir performans cezasına neden olur.

Doku dizisi ve VPRT ile işleme

xrSwapchain Renk değiştirme zinciri ve derinlik için kullanarak arraySize=2 hem sol hem de sağ göz için bir tane oluşturun. Sol gözü dilim 0 ve sağ gözü dilim 1 olarak işleyin. GPU yükünü en aza indirmek için VPRT ve örnek çizim çağrıları ile bir gölgelendirici kullanın. Bu, çalışma zamanının iyileştirmesinin HoloLens 2 en iyi performansa ulaşmasını da sağlar. Çift geniş işleme veya göz başına ayrı bir takas zinciri gibi bir doku dizisi kullanmanın alternatifleri, önemli bir performans cezasına neden olan çalışma zamanı sonrası işleme ile sonuçlanır.

Dörtlü katmanlardan kaçının

ile dörtlü katmanları oluşturma katmanları XrCompositionLayerQuadolarak göndermek yerine dörtlü içeriği doğrudan projeksiyon takas zincirine işler.

Performans Uyarısı: Dörtlü katmanlar gibi tek bir projeksiyon katmanının ötesinde ek katmanlar sağlamak, çalışma zamanı sonrası işlemeye neden olur ve bu da önemli bir performans cezasına neden olur.