Karma gerçeklik performansını anlama

Bu makale, Karma Gerçeklik uygulamanız için performansın önemini anlamaya giriş niteliğindedir. Uygulamanız en uygun kare hızında çalışmazsa kullanıcı deneyimi büyük ölçüde düşürülebilir. Hologramlar kararsız görünür ve ortamın kafa izlemesi yanlış olur ve bu da kullanıcı için kötü bir deneyime yol açar. Performans, şık bir görev değil karma gerçeklik geliştirme için birinci sınıf bir özellik olarak kabul edilmelidir.

Her hedef platform için performans kare hızı değerleri aşağıda listelenmiştir.

Platform Hedef Kare Hızı
HoloLens 60 FPS
bilgisayarları Windows Mixed Reality Ultra 90 FPS
bilgisayarları Windows Mixed Reality 60 FPS

Aşağıdaki çerçevede hedef kare hızlarına vurmaya yönelik en iyi yöntemler özetlenmiştir. Unity ortamında kare hızını ölçme ve iyileştirme hakkında ipuçları için Unity için performans önerilerini okumanızı öneririz

Performans sorunlarını anlama

Uygulamanızın az performans gösteren bir kare hızı varsa, ilk adım uygulamanızın hesaplama açısından yoğun olduğu yeri analiz etmek ve anlamaktır. Sahnenizi işleme işinden sorumlu iki birincil işlemci vardır: CPU ve GPU, her biri Karma Gerçeklik uygulamanızın farklı yönlerini işler. Performans sorunlarının ortaya çıkabileceği üç önemli nokta şunlardır:

  1. Uygulama İş Parçacığı - CPU - Giriş, animasyonlar, fizik ve diğer uygulama mantığı gibi uygulama mantığınızdan sorumludur.
  2. İş Parçacığı oluşturma - CPU'ya GPU - Çizim çağrılarınızı GPU'ya göndermekle sorumludur. Uygulamanız bir küp veya model gibi bir nesneyi işlemek istediğinde, bu iş parçacığı IŞLEMLERI yapmak için GPU'ya bir istek gönderir.
  3. GPU - 3B verileri (modeller, dokular vb.) piksellere dönüştürmek için en yaygın olarak uygulamanızın grafik işlem hattını işler. Sonuç olarak cihazınızın ekranına göndermek için bir 2B görüntü üretir.

Çerçevenin Ömrü

Genellikle HoloLens uygulamaları GPU'ya bağlı olur ancak her zaman bağlanmaz. Uygulamanızın nerede performans sorunu yaşadığınızı anlamak için aşağıdaki araçları ve teknikleri kullanın.

Uygulamanızı analiz etme

Karma gerçeklik uygulamanızdaki performans profilini ve olası performans sorunlarını anlamanıza olanak sağlayan birçok araç vardır.

Uygulamanız için ayrıntılı profil oluşturma bilgileri toplamanıza yardımcı olacak bazı yaygın araçlar aşağıdadır:

Herhangi bir ortamda profil oluşturma

Uygulamanızın GPU veya CPU sınırı olup olmadığını belirlemenin bir yolu, işleme hedef çıkışının çözünürlüğünü düşürmektir. Hesaplanması gereken piksel sayısını azaltarak GPU yükünüzü azaltacaksınız. Cihaz daha küçük bir dokuya işlenir ve ardından son görüntünüzü görüntülemek için yukarı örnek oluşturulur.

İşleme çözünürlüğü azaltıldıktan sonra, eğer:

  1. Uygulama kare hızı artar ve büyük olasılıkla GPU Bağlı olursunuz
  2. Uygulama kare hızı değiştirilmez ve büyük olasılıkla CPU Bağlı olursunuz

Not

Unity, XRSettings.renderViewportScale özelliği aracılığıyla çalışma zamanında uygulamanızın işleme hedef çözünürlüğünü kolayca değiştirme olanağı sağlar. Cihazda sunulan son görüntü sabit çözünürlüğe sahiptir. Platform, ekranlarda işleme için daha yüksek çözünürlüklü bir görüntü oluşturmak için daha düşük çözünürlüklü çıktıyı örnekleyecektir.

UnityEngine.XR.XRSettings.renderScale = 0.7f;

Uygulamanızı geliştirme

CPU performans önerileri

Genellikle, CPU üzerinde karma gerçeklik uygulamasında yapılan çoğu çalışma, sahnenin "simülasyonunu" yapmayı ve uygulama mantığınızı işlemeyi içerir. İyileştirme için aşağıdaki alanlar hedeflenmiştir:

  • Animasyonlar
  • Fizik
  • Bellek ayırmaları
  • Karmaşık algoritmalar (ters kinematik, yol bulma)

GPU performans önerileri

Bant genişliğini ve doldurma hızını anlama

GPU'da bir çerçeve işlenirken, uygulama bellek bant genişliğine veya doldurma hızına bağlıdır.

  • Bellek bant genişliği , GPU'nun bellekten gerçekleştirebileceği okuma ve yazma hızıdır
    • Bant genişliği sınırlamalarını belirlemek için doku kalitesini azaltın ve kare hızının iyileşip iyileşmediğini denetleyin.
    • Doldurma hızı sınırlamalarını belirlemek için ekran çözünürlüğünü düşürerek kare hızının iyileşip iyileşmediğini görün.

Not

Unity ile çalışıyorsanız Unity'ye özgü GPU performans önerilerimize göz atın. - Unity'de XRSettings.renderViewportScale özelliğini kullanın

Bellek bant genişliği genellikle şunlardan biri için iyileştirmeler içerir:

  1. Daha düşük doku çözünürlükleri
  2. Daha az doku kullanın (normaller, belirtik vb.)

Doldurma hızı, son işlenen piksel için hesaplanması gereken işlem sayısını azaltmaya odaklanır, örneğin:

  1. İşlenen/işlenecek nesne sayısı
  2. Gölgelendirici başına işlem sayısı
  3. Sonuç olarak elde edilen GPU aşamalarının sayısı (geometri gölgelendiricileri, işleme sonrası etkiler vb.)
  4. İşlenen piksel sayısı (görüntü çözünürlüğü)

Çokgen sayısını azaltma

Çokgen sayısının yüksek olması GPU için daha fazla işlemle sonuçlanır, bu nedenle sahnenizdeki çokgen sayısını azaltmak işleme süresini azaltır. Geometriyi gölgelendirmeyi pahalı hale getiren başka faktörler de vardır, ancak çokgen sayısı bir sahneyi işlemek için ne kadar çalışma gerekeceğini belirlemek için en basit ölçümdür.

Limit overdraw

Birden çok nesne işlendiğinde, ancak bir gizli nesne tarafından gizlendiklerinden ekranda gösterilmediğinde yüksek overdraw gerçekleşir. Arkasında nesneler bulunan bir duvara baktığınızı düşünün. Tüm geometri işleme için işlenir, ancak yalnızca opak duvarın işlenmesi gerekir ve bu da gereksiz işlemlere neden olur.

Gölgelendiriciler

Gölgelendiriciler, GPU üzerinde çalışan ve işlemede iki önemli adım uygulayan küçük programlardır:

  1. Hangi köşelerin çizilmesi gerektiğini ve ekran alanında nerede olduklarını belirleme (Köşe gölgelendiricisi)
    • Köşe gölgelendiricisi her ağ için köşe başına yürütülür.
  2. Her pikselin rengini belirleme (Piksel gölgelendiricisi)
    • Piksel gölgelendiricisi piksel başına yürütülür ve geometri tarafından hedef işleme dokusuna işlenir.

Gölgelendiriciler genellikle birçok dönüştürme ve aydınlatma hesaplaması yapar. Karmaşık aydınlatma modelleri, gölgeler ve diğer işlemler harika sonuçlar üretelese de, bir fiyatı da vardır. Gölgelendiricilerde hesaplanan işlem sayısını azaltmak, kare başına GPU için gereken çalışmayı büyük ölçüde azaltabilir.

Gölgelendirici kodlama önerileri
  • Mümkün olduğunca bilinear filtreleme kullanın
  • Çarpma ve ekleme işlemini aynı anda yapmak için MAD iç bilgileri kullanmak için ifadeleri yeniden düzenleme
  • CPU üzerinde mümkün olduğunca çok ön hesaplama yapın ve malzemeye sabit olarak geçirin
  • Piksel gölgelendiricisinden köşe gölgelendiricisine taşıma işlemlerini tercih etme
    • Genellikle köşe sayısı piksel sayısından çok daha küçüktür (720p 921.600 piksel, 1080p 2.073.600 piksel vb.)

GPU aşamalarını kaldırma

İşlem sonrası etkileri pahalı olabilir ve MSAA gibi diğer ad önleme teknikleri de dahil olmak üzere uygulamanızın doldurma oranını artırabilir. HoloLens'te bu tekniklerden ve geometri, gövde ve işlem gölgelendiricileri gibi ek gölgelendirici aşamalarından kaçınmanızı öneririz.

Bellek önerileri

Aşırı bellek ayırma ve serbest bırakma işlemleri tutarsız performansa, donmuş çerçevelere ve diğer zarara neden olan davranışlara neden olabilir. Bellek yönetimi çöp toplayıcı tarafından denetlendiğinden Unity'de geliştirme yaparken bellekle ilgili dikkat edilmesi gereken noktaları anlamak özellikle önemlidir.

Nesne havuzu oluşturma

Nesne havuzu, nesnelerin sürekli ayırma ve serbest bırakma maliyetlerini azaltmaya yönelik popüler bir tekniktir. Bu, büyük bir özdeş nesne havuzu ayırarak ve nesneleri zaman içinde sürekli olarak oluşturmak ve yok etmek yerine bu havuzdan etkin olmayan, kullanılabilir örnekleri yeniden kullanarak yapılır. Nesne havuzları, bir uygulama sırasında değişken ömrü olan yeniden kullanılabilir bileşenler için mükemmeldir.

Ayrıca bkz.