Android XR ile desteklenen Samsung Galaxy XR satışa çıktı. Bu blog yayını, Android XR Spotlight Week kapsamında yayınlanmaktadır. Bu hafta boyunca, Android XR için uygulamalarınızı öğ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şbirliği içinde geliştirilen Galaxy XR'ın lansmanını yaptı. Geliştiriciler için heyecan verici bir dönemdeyiz. Bu nedenle, XR uygulamanızdan en iyi performansı elde etmenize yardımcı olmak istiyoruz.
XR olmayan cihazlarda oyun ve uygulamalarda düşük performans kullanıcı için can sıkıcı olabilir. 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çabilirsiniz.
Bu kılavuzda, Android XR geliştirme için anlamanız gereken temel performans optimizasyonlarını adım adım açıklayacağız. Hangi özelliklerin en büyük performans artışlarını 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 (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 moddur.
İkincisi ise göz izleme modu. Bu mod, baktığınız alanı ayrıntılı olarak işlerken çevrenizde gösterilen kalitenin düşürülmesini sağlar. 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 eserlerin yer aldığı bir müze deneyimi oluşturduğunuzu düşünün. Foveated rendering olmadan, "görüş alanındaki" her şeyi işlemeye ç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 işleyebilirsiniz. Kullanıcılarınız farkı anlamaz ancak sahnenize daha fazla ayrıntı ekleme olanağı elde edersiniz.
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ü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 olması veya yoğun anlarda karelerin düşmesi 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 geometri veya önemli tıkanma içeren 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 örneklemeyi otomatik olarak kullanır. Bu nedenle, CPU her nesneyi GPU'ya tek tek bildirmek yerine benzer nesneleri gruplandırır.
Bu özellik, en çok ormandaki ağaçlar, ofis binasındaki mobilyalar veya bir ortama dağılmış aksesuarlar gibi tekrarlanan ağların bulunduğu büyük sahnelerde etkilidir.
Aynı temel ağı kullanarak 200 ağaç içeren bir orman sahnesi hayal edin. GPU Resident Drawer olmadan, GPU'yu tüketen 200 çizim çağrısı vardır. Bu nedenle CPU boşta kalı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 nesneler 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çmeniz ve değişikliklerinizin gerçekten işe yaradığını doğrulamanız gerekir.
Performance Metrics API
Performans Metrikleri API'si, uygulamalarınızın bellek kullanımı, CPU performansı ve GPU performansının anlık olarak izlenmesini sağlar. Bu araç, uygulama katmanlarından ve çalışma zamanı katmanlarından kapsamlı veriler sunarak uygulamanızda tam olarak ne olduğunu görmenizi 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çüm yapı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 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 yapmanız mümkün değildir. 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 doğru ş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. Kısaca özetlemek gerekirse:
- URP Ayarları: Mobil XR için HDR ve Post Processing'i devre dışı bırakın. Bu özellikler, mobil donanım üzerindeki performans maliyetine 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 ç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şturma için 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 rahatsız veya hasta 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:
- Foveated Rendering ve Vulkan Subsampling ile başlayın. XR'a özel bu özellikler, GPU'da anında ve belirgin bir tasarruf sağlar.
- Tekrarlanan geometriye veya iç mekanlara sahip karmaşık sahneleriniz varsa GPU Resident Drawer ve Occlusion Culling'i ekleyin.
- Değişikliklerinizin gerçekten yardımcı olduğundan emin olmak için Performans Metrikleri API'si ile her şeyi izleyin
- 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 hakkında 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 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
-
Ürün HaberleriAndroid XR'da Unreal Engine ve Godot için resmi desteğin kullanıma 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 dakika -
Ürün HaberleriGoogle Play'de, büyümenizi sağlamanıza, yeni iş modellerine uyum sağlamanıza ve kullanıcılarınıza tam olarak bulundukları yerde ulaşmanıza yardımcı olmak için abonelik platformumuzu sürekli olarak genişletiyoruz.
Sheenam Mittal • Okuma süresi: 4 dakika -
Ürün HaberleriGeçen yıl Android Studio, tüm yapay zeka modellerine açıldı. Bugün, kodlama aracınızı seçme desteğini sunarak bir sonraki adımı atıyoruz.
Matthew Warner • Okuma süresi: 3 dk.
Android geliştirmeyle ilgili en son analizleri haftalık olarak gelen kutunuza alın.