Ürün Haberleri

Unity ile Android XR'de Performansı Optimize Etme

Okuma süresi: 6 dakika
Luke Hopkins
Geliştirici İlişkileri Mühendisi, Android

Android XR destekli Samsung Galaxy XR tanıtıldı! Bu blog yayını, Android XR Spotlight Week kapsamında yayınlanmaktadır. Bu hafta boyunca, uygulamalarınızı Android XR için öğrenmenize, oluşturmanıza ve hazırlamanıza yardımcı olmak üzere tasarlanmış kaynaklar (blog yayınları, videolar, örnek kodlar ve daha fazlası) sunacağız.  

Bu hafta Samsung, Google ve Qualcomm ile işbirliği içinde geliştirilen Galaxy XR'ı tanıttı. Bu, geliştiriciler için heyecan verici bir dönem. XR uygulamanızdan en iyi performansı elde etmenize yardımcı olmak istiyoruz.

XR olmayan cihazlardaki oyun ve uygulamalarda düşük performans kullanıcıyı rahatsız edebilir ancak XR dünyasında performans sadece isteğe bağlı değil, uygulamanızın başarısı için temel bir unsurdur. XR'da kare hızı hedefinizi tutturamazsanız hareket hastalığı gibi çok daha ciddi sorunlara yol açabilir. 

Bu rehberde, Android XR geliştirme için anlamanız gereken temel performans optimizasyonları hakkında bilgi edineceksiniz. Hangi özelliklerin en büyük performans artışlarını sağladığını, bunları ne zaman kullanmanız gerektiğini ve kare hızı hedeflerinize ulaşmanıza yardımcı olmak için nasıl birlikte çalıştıklarını öğreneceksiniz.

Hedefimiz: 

  • Minimum: 72 fps (oyun kalitesi yönergelerimizin bir parçası)
  • İsteğe bağlı: Kare başına 11 ms bütçeyle 90 FPS

Bu kadar yüksek bir kare hızını korumanın neden önemli olduğu hakkında daha fazla bilgi için performans yönergelerimize göz atın.   

XR'a Özgü Performans Özellikleri

İlk olarak XR'a özgü iki performans özelliğini ele alacağız: Foveated Rendering ve Vulkan Subsampling. 

Foveated Rendering

Foveated rendering, iki modu olan bir optimizasyondur. Birincisi, ekranın merkezini daha yüksek çözünürlükte işleyen ve daha uzağa baktıkça çözünürlüğü kademeli olarak düşüren bir statik moddur.

İkincisi ise göz izleme modu. Bu mod, özellikle baktığınız alanı tüm ayrıntılarıyla işlerken çevrenizde gösterilen kalitenin düşmesine neden olur. Bu özellik, insan görme sisteminin işleyişini taklit eder. İnsanlar yalnızca odaklandıkları belirli alandaki ince ayrıntıları görür.

Foveated rendering, kullanıcının algıladığı görüntü kalitesinden ödün vermeden GPU iş yükünü önemli ölçüde azaltır. Foveated rendering'in avantajı, kullanıcıların çevresel görüşlerinde kalite düşüşünü fark etmemesidir. Ancak GPU'nuz performansın iyileştiğini kesinlikle fark edecektir.

Karmaşık 3D eserlerle bir müze deneyimi oluşturduğunuzu düşünün. Foveated rendering olmadan, her şeyi "görüş alanında" oluşturmaya çalışırken 90 FPS'yi korumakta zorlanırsınız. Foveated rendering ile kullanıcının baktığı yerdeki yüksek poligonlu ayrıntıları koruyabilir, ancak arka plan ortamını daha düşük kalitede oluşturabilirsiniz. Kullanıcılarınız farkı anlamaz ancak sahnenize daha fazla ayrıntı eklemek için yeterli alanınız olur.

Vulkan Alt Örnekleme

Vulkan alt örnekleme, foveated rendering'in en iyi arkadaşıdır. Foveated rendering, farklı kalite seviyelerinde neyin oluşturulacağına karar verirken Vulkan Subsampling, parça yoğunluğu haritalarını kullanarak farklı kalite seviyelerinin nasıl verimli şekilde oluşturulacağını yönetir.

Vulkan Subsampling, foveated rendering ile birlikte kullanıldığında 0,5 ms daha fazla performans sağlar. Ayrıca, çevresel görüşünüzdeki tırtıklı kenarları düzeltmeye yardımcı olarak genel görüntünün daha temiz görünmesini sağlar.

Örneğin, kullanıcıların enstrümanlara ve kontrollere odaklandığı bir uçuş simülasyonu oyununda, foveated rendering ile Vulkan alt örnekleme birleştirildiğinde ayrıntılı kontroller net bir şekilde oluşturulur ancak çevresel kokpit yapısı daha az kaynak kullanır. Ekstra 0,5 ms çok fazla gibi görünmeyebilir ancak bu, ekstra bir etkileşimli öğe için yer olması veya yoğun anlarda karelerin düşmesi arasındaki farktır.

Karmaşık Sahneler İçin GPU Özellikleri

Foveated Rendering ve Vulkan Subsampling'in yanı sıra, akıllı örnekleme ve eleme yoluyla gereksiz zorlanmayı azaltan bazı GPU özellikleri de vardır. Bu yöntemler, özellikle tekrarlanan geometriye veya önemli tıkanmaya sahip karmaşık sahnelerde etkilidir.

GPU Resident Drawer

GPU Resident Drawer, çizim çağrılarını azaltmak ve CPU işlem süresini boşaltmak için GPU örneklemesini otomatik olarak kullanır. Bu nedenle, CPU her nesneyi GPU'ya tek tek bildirmek yerine GPU, benzer nesneleri birlikte gruplandırır.

Bu özellik, ormandaki ağaçlar, ofis binasındaki mobilyalar veya bir ortamda dağılmış aksesuarlar gibi tekrarlanan ağların bulunduğu büyük sahnelerde en iyi sonucu verir.

Aynı temel ağı kullanan 200 ağaçlı bir orman sahnesi düşünün. GPU Resident Drawer olmadan, GPU'yu tüketen 200 çizim çağrısı vardır ve bu nedenle CPU boşaltılır. Bu özelliği etkinleştirdiğinizde GPU, bu ağaçları akıllı bir şekilde örnekler ve bu da çizim çağrılarının sayısını 5-10'a düşürür. Bu, oyun mantığına veya fizik hesaplamalarına yatırım yapabileceğiniz büyük bir GPU tasarrufudur.

GPU Occlusion Culling

GPU Occlusion Culling, gizli nesneleri tanımlayıp oluşturmayı atlamak için CPU yerine GPU'yu kullanır. Diğer nesnelerin arkasında kalan (gizli) öğeleri otomatik olarak algıladığı için GPU'nuzu kullanıcının göremeyeceği şeyler için harcamazsınız.

Bu özellik, özellikle birden fazla odanın bulunduğu iç mekanlarda, yoğun ortamlarda veya duvarların, zeminlerin ve nesnelerin manzarayı doğal olarak engellediği mimari sahnelerde çok kullanışlıdır.

Örneğin, çok odalı bir ev deneyimi oluşturduğunuzu varsayalım. Kullanıcı oturma odasındayken, duvarın tamamen arkasında kalan ve tüm ayrıntılarıyla oluşturulmuş mutfağı oluşturmak için neden GPU döngülerini boşa harcayasınız? GPU Occlusion Culling, gizli nesnelerin oluşturulmasını otomatik olarak atlayarak görünür olanlar için daha fazla performans bütçesi sağlar.

Performansınızı İzleme

Bu özellikleri kullanmak yeterli değildir. Ayrıca, optimizasyonlarınızın etkisini ölçebilmek ve değişikliklerinizin gerçekten işe yaradığını doğrulayabilmek için optimizasyonlarınızı ölçmeniz gerekir.

Performance Metrics API

Performans Metrikleri API'si, uygulamalarınızın bellek kullanımını, CPU performansını ve GPU performansını gerçek zamanlı olarak izlemenizi sağlar. Bu araç, uygulamanızda tam olarak ne olduğunu görebilmeniz için birleştirme ve çalışma zamanı katmanlarından kapsamlı veriler sağlar.

Değişikliklerinizi yapmadan önce bir temel oluşturun, optimizasyon uygulayın, etkiyi ölçün ve yineleyin. Bu veriye dayalı yaklaşım, tahminde bulunmak yerine performansı gerçekten iyileştirdiğinizi bilmenizi sağlar.

Foveated rendering'i etkinleştirmeden önce GPU kare süreniz 13 ms olabilir. Bu, 11 ms'lik bütçenizin üzerindedir. Foveated rendering'i etkinleştirin, tekrar ölçün ve umarız 9 ms'ye düştüğünü görürsünüz. Bu, sahnenize daha fazla ayrıntı eklemek, başka yerlerde görsel kaliteyi artırmak veya daha geniş bir içerik yelpazesinde daha sorunsuz performans sağlamak için kazandığınız 4 ms'lik bir paydır.

Bu metrikler olmadan optimizasyon yaparken körü körüne hareket edersiniz. Performans Metrikleri API'si, belirli kullanım alanınızda gerçekten işe yarayanlar hakkında size doğru bilgiyi verir.

Frame Debugger

Frame Debugger, sahnenizin nasıl oluşturulduğunu kare kare anlamak için Unity'nin yerleşik aracıdır. Çizim çağrılarının sırasını gösterir ve optimizasyonlarınızın doğru şekilde çalıştığını doğrulamak için bunları adım adım incelemenize olanak tanır.

SRP Batcher'ın çalıştığını doğrulamak mı istiyorsunuz? Frame Debugger'da "RenderLoopNewBatcher" girişlerini bulun. GPU Resident Drawer'ın düzgün şekilde toplu işleme yapıp yapmadığını kontrol etme "Karma Toplu İş Grubu" girişlerini bulun. Bu görsel onaylar, optimizasyon ayarlarınızın gerçekten etkili olup olmadığını anlamanıza yardımcı olur.

Sahnenizin ilk 50 çizim çağrısını adım adım inceleyin. Benzer nesnelerin gruplandırılmış olarak değil de tek tek çizildiğini görüyorsanız bu, örnekleme veya gruplandırma işleminizin doğru şekilde çalışmadığını gösterir. Frame Debugger, bu sorunları hemen görünür hale getirerek çözmenize yardımcı olur.

Ek Optimizasyonlar

Yukarıda bahsettiğimiz optimizasyonların yanı sıra, tam performans kılavuzumuzda birkaç ek optimizasyon da ele alınmaktadır. Bu özelliğin kısa bir özetini aşağıda bulabilirsiniz:

  • URP Ayarları: Mobil XR için HDR ve son işlemeyi devre dışı bırakın. Bu özellikler, mobil donanım üzerindeki performans maliyetine kıyasla minimum görsel etki sağlar. Bu nedenle, neredeyse algılanamayan görsel farklılıklarla ölçülebilir performans artışları elde edersiniz.
  • SRP Batcher: Aynı gölgelendirici varyantını kullanan çok sayıda materyalin bulunduğu sahnelerde CPU yükünü azaltır. Çizim çağrıları arasındaki oluşturma durumu değişikliklerini en aza indirerek oluşturmaya harcanan CPU süresini önemli ölçüde azaltabilirsiniz.
  • Ekran Yenileme Hızı: Sahne karmaşıklığına göre 72 ile 90 FPS arasında dinamik olarak ayarlanır. Kararlılığı korumak için karmaşık sekanslar sırasında kare hızını düşürün, ardından ultra akıcı etkileşim için daha basit anlarda kare hızını artırın.
  • Derinlik/Opak Dokular: Shader efektleri için özellikle gerekmedikçe bunları devre dışı bırakın. Çoğu uygulamaya fayda sağlamadan performansı boşa harcayan gereksiz GPU kopyalama işlemlerine neden olurlar.
  • URP Oluşturma Ölçeği: Bu ayar, performans avantajları için daha düşük çözünürlükte oluşturmanıza veya görsel kaliteyi artırmak için oluşturmayı ölçeklendirmenize olanak tanır.

Bu ve diğer optimizasyonlarla ilgili adım adım talimatlar için Android XR'ye yönelik eksiksiz Unity Performans Kılavuzumuza göz atın.

Sonuç

XR uygulamanızın performansı sadece teknik bir onay kutusu değildir. Bu, rahat ve ilgi çekici bir deneyim ile kullanıcıların kendilerini hasta veya rahatsız hissetmesine neden olan bir deneyim arasındaki farktır. Bahsettiğimiz optimizasyonlar, en yeni XR cihazlarda kritik kare hızı hedeflerine ulaşmanızı sağlayacak araç setinizdir.

Yol haritanız:

  1. Foveated Rendering ve Vulkan Subsampling ile başlayın. XR'ye özel bu özellikler, GPU'da anında ve belirgin bir tasarruf sağlar.
  2. Tekrarlanan geometriye veya iç mekanlara sahip karmaşık sahneleriniz varsa GPU Resident Drawer ve Occlusion Culling'i ekleyin.
  3. Değişikliklerinizin gerçekten yardımcı olduğundan emin olmak için Performans Metrikleri API'si ile her şeyi izleyin
  4. Ek performans olasılığı için ek URP optimizasyonlarını keşfedin

Sürekli ölçüm yapmak ve yineleme yapmak çok önemlidir. Her optimizasyon her projeye eşit şekilde fayda sağlamaz. Bu nedenle, belirli kullanım alanınızda gerçekten neyin yardımcı olduğunu net bir şekilde anlamak için Performance Metrics API'yi kullanın.

Sıradaki adım: Becerilerinizi geliştirme

Daha kapsamlı bilgi edinmek ister misiniz? Aşağıdaki kaynaklara göz atın:

  • Android XR için Unity Performans Kılavuzu: Burada ele alınan tüm özelliklerle ilgili adım adım açıklamalı uygulama talimatları.
  • Unity ve Android XR ile Başlarken: Geliştirme ortamınızı ayarlayın ve uygulama geliştirmeye başlayın.
  • Android XR Geliştirici Belgeleri: Tüm Android XR özellikleriyle ilgili kapsamlı kılavuzlar
Yazan:

Okumaya devam edin