Ü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 ile tanışın. 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ı) sunuyoruz.  

Bu hafta Samsung, Google ve Qualcomm ile iş ortaklığı yaparak geliştirdiği Galaxy XR'ın lansmanını yaptı. Geliştiriciler için heyecan verici bir dönemdeyiz ve 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 kılavuzda, Android XR geliştirme için anlamanız gereken temel performans optimizasyonları adım adım açıklanmıştır. En büyük performans artışlarını sağlayan özellikleri, bunları ne zaman kullanacağınızı 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 oluşturup baktığınız nokta uzaklaştıkça çözünürlüğü kademeli olarak düşüren bir statik mod.

İkincisi ise göz izleme modu. Bu mod, baktığınız alanı tam ayrıntılı olarak işlerken çevrenizde gösterilen kaliteyi düşürür. 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 güzelliği, 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 eserlerin yer aldığı 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 polili ayrıntıları koruyabilir, ancak arka plan ortamını daha düşük kalitede oluşturabilirsiniz. Kullanıcılarınız bu farkı görmez ancak sahnenize daha fazla ayrıntı ekleme olanağı elde edersiniz.

Vulkan Alt Örnekleme

Vulkan Subsampling, foveated rendering'in en iyi dostudur. 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 bir ş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üzleştirerek genel görüntünün daha net görünmesini sağlar.

Örneğin, kullanıcıların enstrümanlara ve kontrollere odaklandığı bir uçuş simülatörü 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 açmak veya yoğun anlarda kare düşürmek arasındaki farktır.

Karmaşık sahneler iç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öntem, ö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 nesne hakkında GPU'ya ayrı ayrı bilgi vermek yerine GPU, benzer nesneleri birlikte gruplandırır.

Bu özellik, ormandaki ağaçlar, ofis binasındaki mobilyalar veya bir ortamda dağılmış öğeler 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ıca örnekleyerek yalnızca 5-10 çizim çağrısına 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 görüşü 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ı salondayken neden GPU döngülerini, duvarın tamamen arkasında kalan ve ayrıntılı bir şekilde oluşturulmuş mutfağı oluşturmak için harcasın? 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örmeniz 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 sayesinde, tahminde bulunmak yerine performansı gerçekten iyileştirdiğinizi bilirsiniz.

Foveated rendering'i etkinleştirmeden önce GPU kare süreniz 13 ms olabilir. Bu süre, 11 ms'lik bütçenizi aşar. Foveated rendering'i etkinleştirin, tekrar ölçüm yapın ve umarız bu değerin 9 ms'ye düştüğünü görürsünüz. Bu, sahnenize daha fazla ayrıntı eklemek, başka yerlerde görsel kaliteyi iyileştirmek 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 yapamazsınız. Performans Metrikleri API'si, belirli kullanım alanınızda gerçekten neyin yardımcı olduğu hakkında size doğru bilgiyi verir.

Frame Debugger

Frame Debugger, sahnenizin kare kare nasıl oluşturulduğunu tam olarak 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 ç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 maliyetlerine kıyasla minimum görsel etki sağlar. Bu nedenle, neredeyse fark edilmeyen görsel farklılıklarla ölçülebilir performans artışları elde edersiniz.
  • SRP Batcher: Aynı gölgelendirici varyantını kullanan birçok 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şturma işleminde 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'de Unity Performans Kılavuzu'nun tamamını inceleyin.

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ıza gerçekten neyin yardımcı olduğu konusunda net bir fikir edinmek için Performans Metrikleri API'sini kullanın.

Sonraki 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 uygulama talimatları.
  • Unity ve Android XR'yi kullanmaya başlama: 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