Samsung Galaxy XR, Android XR ile satışa çıktı. Bu blog yayını, Android XR Spotlight Week kapsamında yayınlanmıştır. Bu etkinlikte, uygulamalarınızı Android XR'a hazırlamanıza, öğrenmenize ve geliştirmenize yardımcı olmak için tasarlanmış blog yayınları, videolar, örnek kodlar ve daha birçok kaynak sunuyoruz.
Bu hafta Samsung, Google ve Qualcomm ile birlikte geliştirdiği Galaxy XR'ı kullanıma sundu. Geliştiriciler için heyecan verici bir dönemdeyiz. Biz de XR uygulamanızdan en iyi performansı almanıza yardımcı olmak istiyoruz.
XR dışı cihazlardaki oyun ve uygulamalarda düşük performans kullanıcı için can sıkıcı olabilir. Ancak XR dünyasında performans yalnızca isteğe bağlı bir özellik değil, uygulamanızın başarısı için temel bir unsurdur. XR'da kare hızı hedefinize ulaşamazsanız hareket hastalığı gibi çok daha ciddi sorunlara neden olabilir.
Bu kılavuzda, Android XR geliştirme için anlamanız gereken temel performans optimizasyonlarını adım adım açıklayacağız. En büyük performans artışını hangi özelliklerin sağladığını, 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 şunları sağlamak:
- Minimum: 72 fps (Google Play kalite yönergelerimizin bir parçasıdır)
- İ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önergelerimizi inceleyin.
XR'a Özel Performans Özellikleri
XR'a özgü iki performans özelliğiyle başlayacağız: Foveated Rendering ve Vulkan Alt Örnekleme.
Foveated Rendering
Foveated oluşturma, iki modu olan bir optimizasyondur. İlk mod, ekranın merkezini daha yüksek çözünürlükte oluşturan ve baktığınız yer merkezden uzaklaştıkça çözünürlüğü kademeli olarak düşüren statik moddur.
İkincisi, baktığınız alanı tam ayrıntılı olarak oluştururken çevrenizde görüntülenen kaliteyi azaltan göz izleme modudur. Bu, temelde insan görüşünün çalışma şeklini taklit eder. Biz de yalnızca odaklandığımız belirli alandaki ince ayrıntıları görürüz.
Foveated oluşturma, kullanıcının algıladığı görüntü kalitesinden ödün vermeden GPU iş yükünü önemli ölçüde azaltır. Odak noktası tabanlı görüntü oluşturmanın en iyi yanı, kullanıcıların çevresel görüş alanlarındaki kalite düşüşünü fark etmemesi ancak GPU'nuzun performans artışını kesinlikle fark etmesidir.
Karmaşık 3D eserlerin yer aldığı bir müze deneyimi oluşturduğunuzu düşünün. Odak noktası tabanlı görüntü oluşturma olmadan, "görüş alanındaki" her şeyi oluşturmaya çalışırken 90 fps'yi korumakta zorlanırsınız. Odak noktası tabanlı görüntü oluşturma ile, kullanıcının baktığı yerdeki yüksek poligonlu ayrıntıları koruyabilirsiniz ancak arka plan ortamı daha düşük kalitede oluşturulur. Kullanıcılarınız farkı anlamaz ancak siz sahnenize daha fazla ayrıntı ekleyebilirsiniz.
Vulkan Alt Örnekleme
Vulkan alt örnekleme, foveated rendering'in en iyi dostudur. Foveated rendering, farklı kalite seviyelerinde nelerin oluşturulacağına karar verirken Vulkan alt örnekleme, Fragment Density Maps kullanarak farklı kalite seviyelerinin nasıl verimli bir şekilde oluşturulacağını yönetir.
Odaklı görüntü oluşturma ile birleştirildiğinde Vulkan alt örnekleme, size ekstra 0,5 ms performans sağlar. Ayrıca, çevresel görüşünüzdeki pürüzlü kenarları yumuşatarak genel görüntünün daha net görünmesini sağlar.
Örneğin, kullanıcıların araçlara ve kontrollere odaklandığı bir uçuş simülatörü oyununda, foveated rendering ile Vulkan alt örneklemeyi birleştirmek, ayrıntılı kontrollerin keskin bir şekilde oluşturulması ancak çevresel kokpit yapısının daha az kaynak kullanması anlamına gelir. Bu ekstra 0, 5 ms çok fazla görünmeyebilir ancak ekstra bir etkileşimli öğe için yer açmak veya yoğun anlarda kareleri düşürmek arasındaki farkı belirler.
Karmaşık Sahneler İçin GPU Özellikleri
Odak Noktalı Görüntü Oluşturma ve Vulkan Alt Örnekleme'nin yanı sıra akıllı örnekleme ve ayıklama yoluyla gereksiz yükü azaltan bazı GPU özellikleri de vardır. Bu yöntemler, özellikle tekrarlanan geometriye veya önemli ölçüde örtüşmeye sahip karmaşık sahnelerde etkilidir.
GPU Resident Drawer
GPU Resident Drawer, çekim çağrılarını azaltmak ve CPU işleme süresini boşaltmak için GPU örneklemeyi otomatik olarak kullanır. Bu nedenle, CPU'nun GPU'ya her nesneyi ayrı ayrı bildirmesi yerine GPU, benzer nesneleri bir araya getirir.
Bu özellik, ormandaki ağaçlar, ofis binasındaki mobilyalar veya bir ortama dağılmış aksesuarlar gibi tekrarlanan mesh'lerin bulunduğu büyük sahnelerde en etkilidir.
Aynı taban mesh'i kullanan 200 ağaçtan oluşan bir orman sahnesi düşünün. GPU Resident Drawer olmadan, GPU'yu tüketen 200 çekim çağrısı olur ve bu nedenle CPU serbest kalır. Bu özelliği etkinleştirdiğinizde GPU, bu ağaçları akıllı bir şekilde örnekler ve çekim çağrısı sayısını yalnızca 5-10'a düşürür. Bu sayede GPU'da büyük bir tasarruf elde edebilir ve bu tasarrufu oyun mantığı veya fizik hesaplamalarına yatırabilirsiniz.
GPU Görünmez Nesne Ayıklama
GPU Occlusion Culling, gizli nesneleri tanımlamak ve oluşturmayı atlamak için CPU yerine GPU'yu kullanır. Diğer nesnelerin arkasında gizlenen öğeleri otomatik olarak algılar. Böylece GPU'nuzu kullanıcının göremediğ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ünümü doğal olarak engellediği mimari sahnelerde etkilidir.
Örneğin, birden fazla odası olan bir ev deneyimi oluşturduğunuzu varsayalım. Kullanıcı oturma odasındayken, tamamen bir duvarın arkasında gizli olan mutfağın tüm ayrıntılarını oluşturmak için GPU döngülerini boşa harcamaya gerek yoktur. GPU Görünmez Nesne Ayıklama, bu gizli nesnelerin oluşturulmasını otomatik olarak atlayarak gerçekte görünenler 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ı ölçmeniz gerekir. Böylece optimizasyonların etkisini ölçebilir ve değişikliklerinizin gerçekten işe yaradığını doğrulayabilirsiniz.
Performance Metrics API
Performance Metrics API, uygulamanızın bellek kullanımı, CPU performansı ve GPU performansının anlık olarak izlenmesini sağlar. Birleştirici ve çalışma zamanı katmanlarından kapsamlı veriler sunarak uygulamanızda tam olarak neler olduğunu görmenizi sağlar.
Değişikliklerinizi yapmadan önce bir referans oluşturun, optimizasyon uygulayın, etkiyi ölçün ve tekrarlayın. Bu veriye dayalı yaklaşım, performansı gerçekten artırdığınızı tahmin etmek yerine bildiğiniz anlamına gelir.
Foveated rendering'i etkinleştirmeden önce GPU kare süreniz 13 ms olabilir. Bu, 11 ms bütçenizin üzerindedir. Odaklı görüntülemeyi etkinleştirip tekrar ölçüm yaptığınızda bu sürenin 9 milisaniyeye düştüğünü görebilirsiniz. Bu sayede, sahnenize daha fazla ayrıntı eklemek, başka yerlerdeki görsel kaliteyi artırmak veya daha geniş bir içerik yelpazesinde daha sorunsuz performans sağlamak için 4 ms'lik bir boşluk elde etmiş olursunuz.
Bu metrikler olmadan optimizasyon yaparken tahminlerle hareket etmek zorunda kalırsınız. Performance Metrics API, özel kullanım alanınızda size gerçekten neyin yardımcı olduğu konusunda doğru bilgileri verir.
Frame Debugger
Frame Debugger, Unity'nin sahnenizin tam olarak nasıl oluşturulduğunu kare kare anlamak için kullandığı yerleşik bir araçtır. Bu araç, çekim ç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 bu çağrıları adım adım incelemenize olanak tanır.
SRP Batcher'ın çalıştığını doğrulamak mı istiyorsunuz? Kare Hata Ayıklayıcısı'nda "RenderLoopNewBatcher" girişlerini bulun. GPU Resident Drawer'ın düzgün şekilde gruplandırıp gruplandırmadığını kontrol etme "Hybrid Batch Group" (Karma Toplu İş Grubu) girişlerini bulun. Bu görsel onaylar, optimizasyon ayarlarınızın gerçekten geçerli olup olmadığını anlamanıza yardımcı olur.
Sahnenizin ilk 50 çekim çağrısını adım adım inceleyin. Benzer nesnelerin toplu olarak değil de tek tek çizildiğini görüyorsanız örnekleme veya toplu işleme yönteminiz doğru çalışmıyor demektir. Kare Hata Ayıklayıcı, bu sorunları hemen görünür hale getirir, böylece sorunları çözebilirsiniz.
Ek Optimizasyonlar
Yukarıda ele aldığımız optimizasyonların yanı sıra, performans kılavuzumuzun tamamında birkaç ek optimizasyon daha yer almaktadır. Kısaca özetlemek gerekirse:
- 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 sayede, neredeyse fark edilmeyen görsel farklılıklarla ölçülebilir performans kazanımları elde edersiniz.
- SRP Batcher: Aynı gölgelendirici varyantını kullanan birçok materyalin bulunduğu sahnelerde CPU ek yükünü azaltır. Çekim çağrıları arasındaki oluşturma durumu değişikliklerini en aza indirerek oluşturma için harcanan CPU süresini önemli ölçüde azaltabilirsiniz.
- Ekran yenileme hızı: Sahne karmaşıklığına göre 72 fps ile 90 fps arasında dinamik olarak ayarlanır. Kararlılığı korumak için karmaşık sekanslarda kare hızını düşürün, ardından daha basit anlarda kare hızını artırarak son derece akıcı bir etkileşim elde edin.
- Derinlik/Opak Dokular: Gölgelendirici efektleri için özel olarak gerekmediği sürece bunları devre dışı bırakın. Çoğu uygulama için 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şturma yapmanıza veya daha iyi görsel kalite için oluşturma ölçeğini artırmanıza olanak tanır.
Bu ve diğer optimizasyonlarla ilgili adım adım talimatlar için Android XR için Unity Performans Kılavuzu'nu inceleyin.
Sonuç
XR uygulamanızın performansı, yalnızca teknik bir onay kutusundan ibaret değildir. Bu, rahat ve ilgi çekici bir deneyim ile kullanıcıların kendilerini rahatsız hissetmelerine 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:
- Foveated Rendering ve Vulkan Alt Örnekleme ile başlayın. XR'a özgü bu özellikler, GPU'da anında ve fark edilir tasarruf sağlar.
- Tekrarlanan geometri veya iç mekanlar içeren karmaşık sahneleriniz varsa GPU Resident Drawer ve Occlusion Culling'i ekleyin.
- Değişikliklerinizin gerçekten işe yaradığından emin olmak için Performance Metrics API ile her şeyi izleyin.
- Ek performans potansiyeli için diğer URP optimizasyonlarını keşfedin
Sürekli ölçüm yapmak ve yinelemek çok önemlidir. Her optimizasyon her projeye eşit derecede fayda sağlamaz. Bu nedenle, kullanım alanınıza gerçekten neyin yardımcı olduğu hakkında net bir fikir edinmek 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 Rehberi: Burada ele alınan tüm özellikler için adım adım açıklamalı uygulama talimatlarının tamamı.
- Unity ve Android XR'ı kullanmaya başlama: Geliştirme ortamınızı ayarlayın ve geliştirmeye başlayın.
- Android XR Geliştirici Belgeleri: Tüm Android XR özellikleri için kapsamlı kılavuzlar
-
Ürün HaberleriAndroid XR için Unreal Engine ve Godot'ya resmi desteğin sunulduğunu duyurmaktan heyecan duyuyoruz. Ayrıca üretkenliğinizi artırmak ve yeni XR özelliklerini etkinleştirmek için tasarlanmış yeni araçları da kullanıma sunuyoruz: Android XR Engine Hub ve Android XR Interaction Framework.
Luke Hopkins, Ryan Bartley • Okuma süresi: 4 dk. -
Ürün HaberleriYakında çıkacak Android sürümünü hedefleyen uygulamalar artık WRITE_CONTACTS izniyle kişilere doğrudan yazamayacak.
Roxanna Aliabadi Walker • Okuma süresi: 6 dk. -
Ürün HaberleriTemsilci tabanlı geliştirme hızlandıkça Android mühendisliği heyecan verici yeni bir aşamaya geçiyor: yardımcı kod tamamlamadan, sizin yönlendirmenizle uçtan uca yürütülen temsilcilere geçiş. Kullandığınız modeller ve temsilciler konusunda tam bir seçim özgürlüğüne ve esnekliğe sahipsiniz.
Jason Buchel • Okuma süresi: 3 dk.
Android geliştiriciliğiyle ilgili en son analizleri her hafta gelen kutunuza alın.