Performans

Başlarken

Performansı rasyonalize etmenin en kolay yolu kare hızı veya uygulamanın saniye başına görüntü işleme sayısıdır. Hedeflenen platform (örneğin, Windows Mixed Reality, Oculusvb.) tarafından özetlenen hedef kare hızınauygun olması önemlidir. Örneğin, HoloLens kare hızı 60 FRAME'dir. Düşük kare hızına sahip uygulamalar kötüleşen hologramsabitleme, dünya izleme, el izleme ve daha fazlası gibi kötü kullanıcı deneyimleriyle sonuçlandırabilirsiniz. Geliştiricilerin kaliteli kare hızı izlemelerine ve başarmalarına yardımcı olmak için Karma Gerçeklik Araç Seti çeşitli araçlar ve betikler sağlar.

Görsel profil oluşturma

Geliştirme yaşam süresi boyunca performansı sürekli izlemek için, bir uygulamanın hata ayıklaması çalışırken her zaman kare hızına sahip bir görsel & göstermenizi öneririz. Karma Gerçeklik Araç Seti, uygulama görünümünde geçerliRRS ve bellek kullanımı hakkında gerçek zamanlı bilgiler sağlayan Visual Profiler tanılama aracını sağlar. Visual Profiler, MRTK Profilleri Denetçisi altında tanılama sistemi Ayarlar aracılığıyla yalıtabilirsiniz.

Ayrıca Unity düzenleyicisinde veya öykünücüde çalıştırmanın aksine, cihazda çalıştırıldıklarında kare hızı izlemek için Visual Profiler'ın kullanılması özellikle önemlidir. Yayın yapılandırması derlemeleri ile cihazda çalıştırıldıklarından en doğru performans sonuçları ortaya çıkar.

Not

Derleme için Windows Mixed Reality, MASTER yapılandırma derlemeleriyle dağıtın

Visual Profiler Arabirimi

İyileştir penceresi

MRTK İyileştir Penceresi, karma gerçeklik geliştiricilerinin ortamlarını en iyi performansa sahip sonuçlar için ayarlamalarına ve sahne varlıklarında olası performans sorunlarını belirlemelerine yardımcı olmak için bilgi ve otomasyon araçları sunar. Unity'de belirli temel yapılandırmalar, karma gerçeklik projeleri için önemli ölçüde daha iyileştirilmiş sonuçlar elde etmeye yardımcı olabilir.

Bu ayarlar genellikle karma gerçeklik için ideal olan işleme yapılandırmalarını içerir. Karma gerçeklik uygulamaları, geleneksel 3D grafik geliştirmeyle karşılaştırıldığında benzersizdir ve tüm sahne için işlanacak iki ekran (iki göz) vardır.

Aşağıda başvurulan önerilen ayarlar, MRTK İyileştir Penceresi'nin kullanılmasıyla unity projesinde otomatik olarak yalıtabilirsiniz.

MRTK İyileştir Penceresi Ayarlar

Unity Profiler

Unity Profiler, uygulama performansının ayrıntılarını kare kare düzeyinde araştırmak için kullanışlı bir araçtır.

CPU'da harcanan süre

Örnek Unity Profiler Graph

Rahat kare hızlarını korumak için (genellikle saniyede 60 kare), uygulamaların en fazla 16,6 milisaniye CPU süresi kare süresi elde etmek gerekir. MRTK işlevinin maliyetini belirlemeye yardımcı olmak için Microsoft Mixed Reality Toolkit, iç döngü (çerçeve başına) kod yolları için bir işaretçi içerir. Bu işaretçiler, kullanılan belirli işlevlerin anlaşılmasına yardımcı olmak için aşağıdaki biçimi kullanır:

[MRTK] className.methodName

Not

Yöntem adının ardından başka veriler de olabilir. Bu, uygulama kodunda yapılan küçük değişikliklerden kaçınabilecek koşullu olarak yürütülen ve pahalı olabilecek işlevleri tanımlamak için kullanılır.

Örnek Unity Profiler Hiyerarşisi

Bu örnekte hiyerarşi, WindowsMixedRealityArticulatedHand sınıfının UpdateHandData yönteminin analiz edilirken çerçevede 0,44 ms CPU süresi tükettiği gösterecek şekilde genişletildi. Bu veriler, bir performans sorunu uygulama koduyla mı yoksa sistemin başka bir yerinde mi ilgili olduğunu belirlemeye yardımcı olmak için kullanılabilir.

Geliştiricilerin uygulama kodunu benzer bir şekilde takipleri kesinlikle önerilir. Olaylar yükseltildiklerinde bu yöntemler MRTK güncelleştirme döngüsüne ücret tahsil edildiklerinde, uygulama kodu araçlarına odaklanan birincil odak alanları olay işleyicileri içindedir. MRTK güncelleştirme döngüsü içindeki yüksek kare süreleri, olay işleyicisi yöntemlerinde pahalı kodun göstergesi olabilir.

Single-Pass işleme

Unity'de XR için varsayılan işleme yapılandırması Çoklu Geçiş'tir. Bu ayar Unity'ye işleme işlem hattının tamamını her göz için bir kez olmak için iki kez yürütmesini sağlar. Bunun yerine Tek Geçişli Örnekli işleme seçerek bu en iyi duruma getirilmiş olabilir. Bu yapılandırma, örneklerin her göz için uygun işleme hedefine tek bir çizim çağrısı gerçekleştirene kadar işleme hedef dizilerini kullanır. Ayrıca, bu mod tüm işlemelerin işleme işlem hattının tek bir yürütmesinde yapılmasına olanak sağlar. Bu nedenle karma gerçeklik uygulaması için işleme yolu olarak Tek Geçişli Örnekli işleme'yi seçmek hem CPU GPU'da hem de önerilen işleme yapılandırmasında önemli ölçüde zaman tasarrufu sağlar.

Ancak, her bir göz için her bir örgü için tek bir çizim çağrısı yapmak için GPU'nun tüm gölgelendiriciler tarafından desteklenesi gerekir. Instancing, GPU'nun çağrıları iki gözün birden çok kez çizmesi için olanak sağlar. Unity yerleşik gölgelendiricileri ve MRTK Standart gölgelendirici varsayılan olarak gölgelendirici kodunda gerekli instancing yönergelerini içerir. Unity için özel gölgelendiriciler yazıyorsanız, bu gölgelendiricilerin Tek Geçişli Örnekli işlemeyi destekleyecek şekilde güncelleştirilmiş olması gerekir.

Özel Gölgelendirici için Örnek Kod

struct appdata
{
    float4 vertex : POSITION;
    float2 uv : TEXCOORD0;

    UNITY_VERTEX_INPUT_INSTANCE_ID //Insert
};

struct v2f
{
    float2 uv : TEXCOORD0;
    float4 vertex : SV_POSITION;

    UNITY_VERTEX_OUTPUT_STEREO //Insert
};

v2f vert (appdata v)
{
    v2f o;

    UNITY_SETUP_INSTANCE_ID(v); //Insert
    UNITY_INITIALIZE_OUTPUT(v2f, o); //Insert
    UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); //Insert

    o.vertex = UnityObjectToClipPos(v.vertex);

    o.uv = v.uv;

    return o;
}

Kalite ayarları

Unity, her platform uç noktası için işleme kalitesini denetlemeye hazır ayarlar sağlar. Bu ön ayarlar gölgeler, diğer addan koruma, küresel içerik ve daha fazlası gibi hangi grafik özelliklerinin etkinleştirilip etkinleştirilenemeylerini kontrol ediyor. Bu ayarları düşürmeniz ve işleme sırasında gerçekleştirilen hesaplama sayısını iyileştirmeniz önerilir.

1. Adım: Karma gerçeklik Unity projelerini Düşük Kalite düzeyi ayarını kullanmak üzere güncelleştirme
DüzenleProject Ayarlarve ardından UWP Platformu için Düşük Kalite Seçin kategorisini seçin

2. Adım: Her Unity sahne dosyası için gerçek zamanlı Küresel Güç'leri devre dışı bırak
PencereIşlemeAydınlatma AyarlarGerçek Zamanlı Küresel Platformun Işaretini Kaldır

Derinlik arabelleği paylaşımı (HoloLens)

Windows Mixed Reality platform ve özellikle HoloLens için geliştirme yapıyorsanız, XR Ayarlar Derinlik Arabelleği Paylaşımı'nınetkinleştirilmesi hologramı sabitlemeye yardımcı olabilir. Ancak, özellikle 24 bit derinlik biçimi kullanıyorsanız derinlik arabelleğinin işlemesi bir performans maliyetine neden olabilir. Bu nedenle derinlik arabelleğinin 16 bit duyarlık olarak yapılandırılması kesinlikle önerilir.

Düşük bit biçimi nedeniyle z-mücadelesi oluşursa, tüm kameraların uzak klibinin uygulama için mümkün olan en düşük değere ayar olduğunu onaylayın. Unity varsayılan olarak 1000 m'ye kadar bir uzak klibi düzlemi ayarlar. Bu HoloLens, 50m'lik uzak bir klibin düzlemi genellikle çoğu uygulama senaryosu için yeterlidir.

Not

16 bit derinlik biçimikullanıyorsanız, Unity bu ayarda şablon arabelleği oluşturmayacağı için gerekli kalıp arabelleği gerekli etkileri çalışmaz. 24 bit derinlik biçimi seçilse de genellikle uç nokta grafik platformunda varsa 8 bitlik bir kalıp arabelleği oluşturulacak.

Kalıp arabelleği gerektiren bir Maske bileşeni kullanıyorsanız, bunun yerine kalıp arabelleği gerektirmeyen ve bu nedenle 16 bit derinlik biçimiyle birlikte kullanılan RectMask2D kullanmayı göz önünde bulundurabilirsiniz.

Not

Bir sahnedeki hangi nesnelerin görsel olarak derinlik arabelleğine yazmayacaklarını hızla belirlemek için MRTK Yapılandırma profilinde düzenleyicinin Ayarlar İşleme Derinliği Arabelleği yardımcı programını kullanabilirsiniz.

Mesh Verilerini İyileştirin

Mesh Verilerini İyileştir ayarları, uygulama içinde kullanılmayan köşe özniteliklerini kaldırmaya çalışır. Ayar bunu, her gölgelendiricinin üzerinde çalıştırarak derlemenin her örgüssinde yer alan her malzemeyi iletir. Bu, oyun veri boyutu ve çalışma zamanı performansı için iyidir, ancak derleme sürelerini önemli ölçüde etkileyebilir.

Geliştirme sırasında bu ayarı devre dışı bırakmanız ve "Ana" derleme oluşturma sırasında yeniden etkinleştirmeniz önerilir. Bu ayar, Mesh Verilerini İyileştirProject AyarlarPlayerDiğer Ayarlaraltında bulunabilir.

Genel öneriler

Karma gerçeklik geliştiricileri için performans belirsiz ve sürekli değişen bir zorluk olabilir ve performansı rasyonalize etmek için bilgi spektrumu oldukça büyüktür. Ancak, bir uygulamanın performansına nasıl yaklaşmak için bazı genel öneriler vardır.

Bir uygulamanın CPU veya GPU üzerinde çalıştırilen parçalara yürütülmesini basitleştirmek ve böylece bir uygulamanın herhangi bir bileşene göre sınırlı olup olmadığını belirlemek yararlıdır. Hem işleme birimlerine hem de dikkatle araştırılması gereken bazı benzersiz senaryolara yayılan performans sorunları olabilir. Ancak, çalışmaya başlarken, bir uygulamanın en uzun süre nerede yürütülebilir olduğunu kavramak iyi bir fikirdir.

GPU sınırlı

Karma gerçeklik uygulamalarına yönelik platformların çoğu stereotipikişlemeyi kullanmakta olduğu için, "iki geniş" ekran işlemenin doğası gereği GPU sınırlı olması çok yaygındır. Ayrıca, HoloLens veya Oculus Görevi gibi mobil karma gerçeklik platformları mobil sınıf CPU GPU işleme & gücüyle sınırlı olacaktır.

GPU'ya odaklanan bir uygulamanın her kareyi tamamlaması gereken iki önemli aşama vardır.

  1. Köşe gölgelendiricisi yürütme
  2. Piksel gölgelendiriciyi (parça gölgelendiricisi olarak da bilinir) yürütün

Bilgisayar grafik işleme işlem hatlarının karmaşık alanına derinlemesine girmeden, her gölgelendirici aşaması gpu üzerinde çalıştırarak aşağıdakini üreten &&bir programdır.

  1. Köşe gölgelendiricileri, mesh köşelerini ekran boşluğundaki koordinatlara (köşe başına yürütülen kod) dönüştürmektedir
  2. Piksel gölgelendiricileri, belirli bir piksel ve örgü parçası için çizilen rengi hesaplar (kod piksel başına yürütülür)

Performans ayarlama açısından, piksel gölgelendiricisinde işlemleri iyileştirmeye odaklanmak genellikle daha verimlidir. Bir uygulamanın yalnızca 8 köşe olacak bir küp çizmesi gerekir. Ancak küpün kapladığı ekran alanı büyük olasılıkla milyonlarca piksellik bir düzendedir. Bu nedenle, 10 işlem tarafından gölgelendirici kodunu düşürmek, köşe gölgelendiriciden piksel gölgelendiricide azaltıldı önemli ölçüde daha fazla iş kazandırabilir.

Bu gölgelendirici genellikle, karşılaştırılabilir Aesthetic Characteristics sonuçları elde edilirken Unity k standart gölgelendiricisine göre çok daha az yönerge yürütülebileceğinden, mrtk standart gölgelendiricisi kullanmaktan en önemli nedenlerden biridir .

CPU Iyileştirmeleri GPU Iyileştirmeleri
Uygulama benzetimi mantığı İşleme işlemleri
Fizik 'yi basitleştirme Aydınlatma hesaplamalarını azaltma
Animasyonları basitleştirme &Çizilebilir nesnelerinin # poligon sayısını azalt
Çöp toplamayı Yönet Saydam nesne sayısını azalt
Önbellek başvuruları İşlem sonrası/tam ekran efektlerinden kaçının

Arama örneklemesini çiz

Unity 'de performansı azaltan en yaygın hatalardan biri, çalışma zamanında malzemeleri klonlamadır. GameObjects aynı malzemeleri paylaşıyorsa ve/veya aynı kafesse, statik topluişlem, dinamik topluişlem ve GPU örnekoluşturma gibi teknikler aracılığıyla tek çizim çağrılarında iyileştirilebilir. Ancak, geliştirici çalışma zamanında bir oluşturucunun malzemesinin özelliklerini değiştirirseniz Unity, atanan malzemenin kopya kopyasını oluşturur.

Örneğin, bir sahnede 100 küp varsa, geliştirici her çalışma zamanında her birine benzersiz bir renk atamak isteyebilir. C# ' de Renderer. materyal. Color erişimi, Unity 'nin bu özel Işleyici/oyunnesnesi için bellekte yeni bir malzeme oluşturmasını sağlayacak. 100 küplerinin her biri kendi malzemesine sahip olur ve bu nedenle tek bir çizim çağrısıyla birlikte birleştirilemez. bunun yerine, CPU 'dan GPU 'ya olan 100 olarak çağrı istekleri yapılır.

Bu engelleri aşmak ve küp başına benzersiz bir renk atamak için, geliştiriciler Materialpropertyblock'tan faydalanır.

private PropertyBlock m_PropertyBlock ;
private Renderer myRenderer;

private void Start()
{
     myRenderer = GetComponent<Renderer>();
     m_PropertyBlock = new MaterialPropertyBlock();
}

private void ChangeColor()
{
    // Creates a copy of the material once for this renderer
    myRenderer.material.color = Color.red;

    // vs.

    // Retains instancing capability for renderer
    m_PropertyBlock.SetColor("_Color", Color.red);
    myRenderer.SetPropertyBlock(m_PropertyBlock);
}

Unity performans araçları

Unity, düzenleyicide yerleşik harika performans araçları sağlar.

Tek bir gölgelendirici ve diğeri arasında kabaca performans zorunluluğunu getirir tahmin ediyorsanız, her gölgelendirici derlemek ve gölgelendirici aşamasına göre işlem sayısını görüntülemek yararlı olur. Bu, bir gölgelendirici varlığı seçilerek ve kodu derle ve göster düğmesine tıklayarak yapılabilir. Bu, tüm gölgelendirici türevlerini derler ve Visual Studio 'yu sonuçlarla açar. Note: oluşturulan istatistik sonuçları, verilen gölgelendiriciyi kullanan malzemelerde hangi özelliklerin etkinleştirildiğine bağlı olarak farklılık gösterebilir. Unity yalnızca geçerli projede doğrudan kullanılan gölgelendirici türevlerini derler.

Unity standart gölgelendirici istatistikleri örneği

Unity standart gölgelendirici Istatistikleri 1

MRTK standart gölgelendirici istatistikleri örneği

MRTK standart gölgelendirici Istatistikleri 2

Ayrıca bkz.

Unity

Windows Mixed Reality

Oculus

Kafes iyileştirmesi