Android XR destekli Samsung Galaxy XR satışa çıktı. Bu blog yayını, Android XR Spotlight Week kapsamında yayınlanmıştır. Bu etkinlikte, Android XR için uygulamalarınızı öğrenmenize, oluşturmanıza ve hazırlamanıza yardımcı olmak üzere tasarlanmış blog yayınları, videolar, örnek kodlar ve daha birçok kaynak sunuyoruz.
Bu hafta Samsung, Google ve Qualcomm ile işbirliği içinde geliştirilen Galaxy XR'ı piyasaya sürdü. Geliştiriciler için heyecan verici bir dönemdeyiz. Biz de XR uygulamanızdan en iyi performansı elde etmenize yardımcı olmak istiyoruz.
XR olmayan 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ı hedefinizi kaçırırsanı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:
- 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 Özgü Performans Özellikleri
Öncelikle XR'a özel iki performans özelliğini ele alacağız: Odak Noktalı Görüntü Oluşturma ve Vulkan Alt Örnekleme.
Foveated Rendering
Foveated rendering, iki modu olan bir optimizasyondur. Bunlardan ilki, 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 özellik, insan görüşünün çalışma şeklini taklit eder. İnsanlar da yalnızca odaklandıkları belirli bir alandaki ince ayrıntıları görür.
Odaklı oluşturma, kullanıcının algıladığı resim kalitesinden ödün vermeden GPU iş yükünü önemli ölçüde azaltır. Odaklı 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ı odaklı görüntü oluşturma olmadan, "görüş alanındaki" her şeyi görüntülemeye çalışırken 90 fps'yi korumakta zorlanırsınız. Odak noktası odaklı 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 görüntülenir. Kullanıcılarınız farkı anlamaz ancak sahnenize daha fazla ayrıntı eklemek için yeriniz olur.
Vulkan Alt Örnekleme
Vulkan alt örnekleme, foveated oluşturmanın en iyi arkadaşıdır. Foveated rendering, farklı kalite seviyelerinde nelerin oluşturulacağına karar verirken Vulkan alt örnekleme, parça yoğunluğu haritalarını kullanarak farklı kalite seviyelerinin nasıl verimli bir şekilde oluşturulacağını belirler.
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'i Vulkan alt örnekleme ile birleştirmek, ayrıntılı kontrollerin net bir şekilde oluşturulması ancak çevresel kokpit yapısının daha az kaynak kullanması anlamına gelir. Bu ek 0, 5 ms çok fazla görünmeyebilir ancak ekstra bir etkileşimli öğe için yer açmak veya yoğun anlarda kareleri bırakmak arasındaki farkı yaratır.
Karmaşık Sahneler İçin GPU Özellikleri
Foveated Rendering ve Vulkan Subsampling'in 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, çizim çağrılarını azaltmak ve CPU işleme süresini boşaltmak için GPU örneklemeyi otomatik olarak kullanır. Bu sayede, 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çlı bir orman sahnesi düşünün. GPU Resident Drawer olmadan, GPU'yu tüketen 200 çekim çağrınız olur ve bu nedenle CPU'da yer açılır. Bu özelliği etkinleştirdiğinizde GPU, bu ağaçları akıllı bir şekilde örnekler ve bu sayede çekim çağrısı sayısını yalnızca 5-10'a düşürür. Bu, oyun mantığına veya fizik hesaplamalarına yatırabileceğiniz muazzam bir GPU tasarrufu sağlar.
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 öğeler 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 odalı 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 Occlusion Culling, bu gizli nesnelerin oluşturulmasını otomatik olarak atlayarak gerçekten görünür olan öğeler 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ı artırdığınızı tahmin etmek yerine bildiğiniz anlamına gelir.
Odaklı görüntülemeyi 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 akıcı performans sağlamak için 4 ms'lik bir pay 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.
Kare Hata Ayıklayıcısı
Frame Debugger, Unity'nin sahnenizin tam olarak nasıl oluşturulduğunu kare kare anlamak için yerleşik aracıdır. Ç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 arayın. GPU Resident Drawer'ın doğru şekilde toplu işlem yapıp yapmadığı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şleminiz 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 sahneler için 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 sahnelerde 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. Bu işlemler, çoğu uygulama için fayda sağlamadan performansı düşüren gereksiz GPU kopyalama işlemlerine neden olur.
- 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 kutusu 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 bu kritik kare hızı hedeflerine ulaşmak için kullanabileceğiniz araçlardır.
Yol haritanız:
- Foveated Rendering ve Vulkan Alt Örnekleme ile başlayın. XR'a özel 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 şekilde fayda sağlamaz. Bu nedenle, özel 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 HaberleriBugün Android Dev Summit'te, günlük sorunları ortadan kaldırmak ve size mükemmel Android uygulamaları geliştirme konusunda daha fazla esneklik sağlamak için tasarlanmış birçok araç ve API'nin genel kullanıma sunulduğunu duyuruyoruz.
Matthew McCullough • Okuma süresi: 4 dk. -
Ürün HaberleriAndroid Studio Rabbit 2 artık kararlı ve üretimde kullanıma hazır. Bu sürümde, geliştirme sürecinizi iyileştirecek önemli özellikler yer alıyor. Örneğin, kendi temsilcinizi getirme, yeni XR emülatörü özellikleri, LeakCanary güncellemesi, yeni temsilci becerileri yöneticisi aracı, yapay zeka destekli kod incelemesi ve daha fazlası.
Matthew Warner • Okuma süresi: 3 dk.
En son Android geliştirici analizlerini haftalık olarak gelen kutunuza alın.