Yerel ve tescilli motorlar

Android'de Vulkan'ı kullanmaya başlama

Vulkan, Android'deki birincil düşük düzey grafik API'sidir. Vulkan, kendi oyun motorlarını ve oluşturucusunu uygulayan oyunlar için optimum performansı sunar.

Vulkan'ı oyun motorunuza başarıyla uygulamak için:

  • Vulkan ile kullanılacak Android cihazları belirleme
  • Eski Android cihazları desteklemenin avantajlarını ve dezavantajlarını anlama
  • Android derleme hedefinize Vulkan'ı ekleme
  • Vulkan için SPIR-V oluşturmak üzere bir gölgelendirici derleyici seçin
  • Çalışma zamanında kullanılabilen Vulkan API sürümünü belirleme
  • Vulkan profilleri, kare hızı ve ön rotasyon ile Vulkan oluşturma işlemlerinizi nasıl optimize edeceğinizi öğrenin
  • Hata ayıklama ve performans analizi için grafik araçlarını seçme

Vulkan için minimum cihaz özelliklerini seçme

Vulkan, Android 7.0 (API düzeyi 24) ve sonraki sürümlerde kullanılabilir. Android 7.0 veya sonraki sürümleri çalıştıran tüm Android cihazlar Vulkan'ı desteklemez. Oyununuzun hangi Vulkan özellikli Android cihazları desteklediğini belirlemeniz gerekir.

Öneriler

Vulkan desteği için minimum gereksinimler olarak aşağıdaki spesifikasyonları kullanın:

  • Cihazınızda Android 10.0 (API düzeyi 29) veya daha yeni bir sürüm yüklü olmalıdır.
  • Cihaz, Vulkan API 1.1 veya sonraki sürümleri desteklemelidir.
  • Cihaz, 2022 Android Temel profiliyle uyumlu donanım özelliklerine ve donanım özelliklerine sahiptir.

Eski cihaz desteği

Oyununuz, farklı grafik düzeylerine sahip çok çeşitli cihazlarda çalışacak şekilde tasarlandıysa Vulkan için minimum cihaz özelliklerini seçme bölümünde önerilenlerden daha eski cihazları desteklemeniz gerekebilir. Eski cihazlar için destek oluşturmadan önce Vulkan'ın oyununuza fayda sağlayıp sağlamadığını değerlendirin. Çok sayıda çizim çağrısı olan ve OpenGL ES kullanan oyunlarda, OpenGL ES'de çizim çağrısı yapmanın yüksek maliyeti nedeniyle önemli ölçüde sürücü yükü görülebilir. Bu oyunlar, kare sürelerinin büyük bir kısmını grafik sürücüsünde harcayarak CPU'ya bağlı hale gelebilir. OpenGL ES'den Vulkan'a geçiş yaparak oyunlarda CPU ve güç kullanımında da önemli düşüşler görülebilir. Bu, özellikle oyununuzda çizim çağrılarını azaltmak için örneklemeyi etkili bir şekilde kullanamayan karmaşık sahneler varsa geçerlidir. Hedef cihaz listenizdeki bazı cihazlarda oyununuzu güvenilir bir şekilde çalıştıramayan Vulkan uygulamaları olabileceğinden, eski cihazları hedeflerken yedek olarak OpenGL ES oluşturma desteği ekleyin.

Performans ve özellik eksikliği veya kararlılık sorunları nedeniyle Vulkan özellikli eski cihazları desteklemek istemeyebilirsiniz.

Performans ve Özellikler

Vulkan özellikli eski Android cihazlar, oyununuzu çalıştırmak için gereken özellikler için oluşturma performansına veya donanım desteğine sahip olmayabilir. Bu durum, özellikle oyununuzda yüksek kaliteli grafikler varsa ve Android'de hedeflediğiniz tek API Vulkan ise söz konusu olabilir. Birçok eski cihaz, Vulkan API'nin 1.0.3 sürümüyle sınırlıdır ve genellikle daha modern donanımlarda bulunan yaygın olarak kullanılan Vulkan uzantılarını içermez.

Kararlılık

Eski Android cihazlar güncel olmayan Vulkan sürücülerini kullanıyor olabilir. Bu sürücü sürümleri, oyununuzun kararlılığını etkileyebilecek hatalar içerebilir. Sürücü hatalarını gidermek, önemli miktarda test ve mühendislik süresi gerektirebilir.

Projenize Vulkan ekleme

Vulkan'ı projenize eklemek için şunları yapmanız gerekir:

  • Vulkan API üstbilgilerini dahil etme
  • Gölgelendirici kodunu SPIR-V olarak derleme
  • Çalışma zamanında Vulkan API'yi çağırma

Vulkan API üstbilgilerini dahil etme

Vulkan kullanan kodu derlemek için oyununuzun Vulkan API başlık dosyalarını içermesi gerekir. Vulkan üstbilgilerinin bir kopyasını Android NDK'da veya Vulkan SDK sürümlerinde paketlenmiş olarak bulabilirsiniz. Belirli bir NDK sürümü yalnızca NDK sürümü yayınlandığı sırada mevcut olan Vulkan başlıklarını içerir. NDK'nın Vulkan başlıklarını kullanıyorsanız Vulkan sürüm 1.3'ü destekleyen başlık dosyalarını içeren NDK sürüm 25 veya sonraki bir sürümü kullanın. Vulkan SDK'sında başlıkların en güncel sürümü bulunur.

Gölgelendirici kodunu SPIR-V olarak derleme

Vulkan API, gölgelendirici programların SPIR-V ikili ara biçiminde sağlanmasını bekler. Bu kural, OpenGL Shading Language (GLSL) ile yazılmış kaynak kodunu metin dizeleri olarak gönderebileceğiniz OpenGL ES'den farklıdır. GLSL veya Yüksek Seviye Gölgelendirici Dili (HLSL) gibi bir gölgelendirici dilinde yazılmış kodu alıp Vulkan ile kullanmak üzere SPIR-V modüllerine derlemek için gölgelendirici derleyici kullanın.

shaderc derleyicisi, GLSL'de yazılan gölgelendirici programlarını SPIR-V'de derlemek için kullanılabilir. Oyununuzda HLSL kullanılıyorsa DirectXShaderCompiler, SPIR-V çıkışını destekler. Gölgelendirici programlarını genellikle oyununuzun öğe oluşturma işleminin bir parçası olarak çevrimdışı olarak derler ve çalışma zamanı öğelerinizin bir parçası olarak SPIR-V modüllerini dahil edersiniz.

Çalışma zamanında Vulkan API'yi çağırın

Vulkan API'yi çağırmak için oyununuzun, Vulkan API çağrılarına yönelik işlev işaretçileri edinmesi gerekir. Bunu yapmanın en kolay yolu, Android NDK'ya dahil olan libvulkan.so paylaşılan kitaplığına bağlantı oluşturmaktır. Kitaplığa bağlamanın iki eksikliği vardır: ek işlev dağıtma yükü ve Vulkan API işlev işaretçilerinin otomatik olarak çözüldüğü sınırlamalar.

Bir Vulkan API işlevini çağırdığınızda kontrol, Vulkan yükleyici adı verilen bir yapı tarafından yönetilen bir gönderim tablosundan geçer. Android, LunarG yükleyicisini değil kendi Vulkan yükleyici uygulamasını kullanır. Bu yükleyici sistemi, Vulkan API'nin katman mimarisinin bir parçasıdır. Derleme sırasında sistem kitaplığına bağlanmak, belirli bir API çağrısı için ek bir dağıtım düzeyine neden olur. Ek maliyet küçük olsa da çok sayıda Vulkan çağrısı yapan oyunlarda fark edilebilir.

Sistem kitaplığı genellikle işaretçileri yalnızca temel API'nin bir parçası olarak kabul edilen Vulkan işlevlerine çözümler. Vulkan'da çok sayıda uzantı bulunur. Bu uzantılardan birçoğu sistem kitaplığı tarafından otomatik olarak çözümlenmeyen ek Vulkan işlevleri tanımlanır. Bu Vulkan işlevlerine ait işaretçileri kullanmadan önce manuel olarak çözmeniz gerekir.

Bu sorunları azaltmak için çalışma zamanında kullanmayı planladığınız tüm Vulkan işlevlerinin işaretçilerini dinamik olarak çözün. Bunu yapmanın bir yolu volk gibi açık kaynak bir meta yükleyici kitaplığı kullanmaktır. AGDKTunnel örnek oyunu volk'u bu amaçla entegre eder. Bir meta yükleyici kitaplığı kullanıyorsanız derleme komut dosyalarınızda libvulkan.so paylaşılan kitaplığına bağlantı vermeyin.

Kullanılabilir Vulkan API sürümünü belirleme

Android aşağıdaki Vulkan API sürümlerini destekler:

  • 1.0.3
  • 1,1
  • 1.3

Belirli bir cihazda mevcut olan en yüksek Vulkan API sürüm numarası, Android sürümü ve Vulkan sürücü desteği tarafından belirlenir.

Android sürümü

Vulkan API sürümü için platform desteği, minimum Android sürümüne (API düzeyi) bağlıdır:

  • 1.3 — Android 13.0 (API düzeyi 33) ve sonraki sürümler
  • 1.1 — Android 10.0 (API düzeyi 29) ve sonraki sürümler
  • 1.0.3 — Android 7.0 (API düzeyi 24) ve sonraki sürümler

Vulkan sürücü desteği

Bir Vulkan API sürümü için Android platform desteği, API sürümünün cihazın Vulkan sürücüsü tarafından desteklendiğini garanti etmez. Android 13 çalıştıran bir cihaz, Vulkan API'nin yalnızca 1.1 sürümünü destekleyebilir.

Vulkan'ı başlatırken aşağıdakinden daha yüksek bir API sürümü istemeyin:

Desteklenen en yüksek Vulkan API sürümünü belirleme örneği aşağıda verilmiştir:

// Minimum Android API levels for Vulkan 1.3/1.1 version support
static constexpr int kMinimum_vk13_api_level = 33;
static constexpr int kMinimum_vk11_api_level = 29;

uint32_t GetHighestSupportedVulkanVersion(VkPhysicalDevice physical_device) {
  uint32_t instance_api_version = 0;
  vkEnumerateInstanceVersion(&instance_api_version);

  VkPhysicalDeviceProperties device_properties;
  vkGetPhysicalDeviceProperties(physical_device, &device_properties);

  // Instance and device versions don't have to match, use the lowest version
  // number for API support if they don't.
  const uint32_t driver_api_version =
      (instance_api_version < device_properties.apiVersion) ?
      instance_api_version : device_properties.apiVersion;

  const int device_api_level = android_get_device_api_level();
  if (device_api_level >= kMinimum_vk13_api_level &&
      driver_api_version >= VK_API_VERSION_1_3) {
    return VK_API_VERSION_1_3;
  } else if (device_api_level >= kMinimum_vk11_api_level &&
             driver_api_version >= VK_API_VERSION_1_1) {
    return VK_API_VERSION_1_1;
  }
  return VK_API_VERSION_1_0;
}

Vulkan profili uyumluluğunu belirleme

Vulkan profilleri, bir Vulkan cihazının profille uyumlu olması için desteklemesi gereken bir dizi gerekli özellik, uzantı, özellik ve minimum parametre sınırını tanımlayan JSON dosyalarıdır. Bir cihazın 2022 Android temel profili gibi belirli bir Vulkan profiliyle uyumlu olup olmadığını belirlemek için açık kaynak Vulkan Profiles API kitaplığını kullanın. Ayrıca, profil JSON dosyasını kendiniz ayrıştırabilir ve profil uyumluluğunu belirlemek için ilgili Vulkan API'lerini kullanarak cihaz özelliklerini sorgulayabilirsiniz.

Vulkan Profilleri

Android, Android çalıştıran cihazların her biri için hangi özelliklerin ve uzantıların kullanılabileceğini tanımlayan Vulkan Profilleri'ni kullanır.

Android Temel Profili (ABP), Vulkan Profili'ni oluşturmaya yönelik ilk denemedir. ABP2021 ve ABP2022, o sıradaki etkin cihazların% 85'inden fazlasını kapsamayı amaçlayan geçmişe dönük profillerdir. Bundan sonra yeni ABP eklenmeyecek.

Android için Vulkan Profilleri (VPA), yazılım geliştiricilerin ihtiyaçlarını yansıtmayı ve donanım geliştiricileri bunları sunar sunmaz tutarlı özellikler sunmayı amaçlayan yeni ileriye dönük profildir. VPA15_minimums, Android 15'in ilk profilidir ve her büyük Android sürümünü kapsayacak yeni bir VPA olacaktır.

Kare ilerleme hızını uygulama

Doğru kare hızı, yüksek kaliteli bir oyun deneyimi sunmanın önemli bir parçasıdır. Android Game Development Kit, oyununuzun optimum kare hızına ulaşmasına yardımcı olmak için Frame Pacing kitaplığını içerir. Daha fazla uygulama ayrıntısı için Android kare hızını Vulkan oluşturma aracınıza entegre etme başlıklı makaleyi inceleyin.

Döndürme öncesini uygulama

Android cihazlar birden fazla yönde görüntülenebilir. Cihazın yönü, oluşturma yüzeyinin yönünden farklı olabilir. Android'deki OpenGL ES'den farklı olarak, Vulkan ikisi arasındaki tutarsızlıkları ele almaz. Yönlendirme sürecinin işleyiş şeklini ve Vulkan kullanılırken yön farklılıklarını işleme konusunda en uygun yöntemi anlamak için Vulkan ön döndürme özelliğiyle cihaz dönüşünü işleme başlıklı makaleyi inceleyin.

Vulkan oluşturma ile ilgili sorunları giderme ve oluşturma işlemini profilleme

Vulkan oluşturma kodundaki oluşturma ve performans sorunlarını teşhis etmenize yardımcı olacak birden fazla araç vardır.

Vulkan'ın hata ayıklama ve profil oluşturma araçları hakkında daha fazla bilgi için Araçlar ve gelişmiş özellikler bölümüne göz atın.

Vulkan doğrulama katmanları

Vulkan doğrulama katmanları, Vulkan API'ye yapılan çağrılarınızı incelemek ve yanlış ya da ideal olmayan kullanımla ilgili uyarılar veya hatalar sağlamak için etkinleştirilebilen çalışma zamanı kitaplıklarıdır. Doğrulama işlemi çalışma zamanı yükü eklediği ve oyununuzun performansını etkilediği için bu doğrulama katmanları varsayılan olarak etkin değildir. Doğrulama katmanlarını oyununuzla nasıl kullanacağınız hakkında bilgi edinmek için Doğrulama katmanı ile hata ayıklama başlıklı makaleyi inceleyin.

Kare yakalama araçları

Oyun karesi sırasında yapılan Vulkan API çağrılarını kaydetmek ve yeniden oynatmak için kare yakalama araçlarını kullanın. Bu araçlar sayesinde:

  • Etkin grafik kaynaklarıyla ilgili bilgileri ve bu kaynakların görselleştirmelerini görüntüleme
  • Oyununuz tarafından yapılan API çağrılarının sırasını görme ve API parametrelerini görme
  • Çizim çağrısı sırasında grafik ardışık düzeninin durumunu keşfetme
  • Karede belirli bir çizim çağrısına kadar oluşturma sonuçlarını görselleştirin.

Android'de çalışan oyunlardan kare yakalamak için açık kaynak RenderDoc aracını kullanın. RenderDoc, hem Vulkan hem de OpenGL ES'nin çerçeve yakalamasını destekler.

Vulkan karelerini yakalamak için Android GPU Inspector (AGI) da kullanılabilir.

Performans analizi araçları

Oyununuzda optimum olmayan kare hızlarına neden olan oluşturma sorunlarını incelemek için performans analiz araçlarını kullanın. GPU tedarikçileri, oyununuzun profilini oluşturmak ve GPU mimarilerine özgü performans verileri sağlamak için tasarlanmış araçlar sağlar. Oyununuzun performans özellikleri ve performans sorunları, farklı satıcıların GPU'larında, hatta aynı tedarikçinin farklı GPU nesillerinde oluşturma sırasında önemli ölçüde farklılık gösterebilir.

Performans verilerini toplayıp analiz etmek için Android GPU Denetleyicisi'ni de kullanabilirsiniz. Tedarikçi araçlarından farklı olarak Android GPU Denetleyicisi, farklı tedarikçilere ait birden fazla GPU ile uyumludur. Ancak, Android GPU Denetleyici eski Android cihazları desteklemez ve tüm yeni cihazlarla uyumlu olmayabilir.

CTS-D ile Vulkan testini iyileştirin

Android destekli cihaz üreticileri, cihazlarının uyumlu olduğundan emin olmak için Compatibility Test Suite (CTS) kullanır. Geliştirici Tarafından Güçlendirilmiş CTS (CTS-D), gelecekteki Android cihazların kullanım alanlarını karşıladığından ve uygulamalarının sorunsuz ve hatasız bir şekilde çalışabildiğinden emin olmak için Android uygulama geliştiricileri tarafından gönderilen testlerdir.

Vulkan uygulamanızla belirli bir Android cihazı etkileyen yeni bir hatayı tetiklemeyi başarırsanız sorununuzu ve kontrol etme yöntemlerini açıklayan yeni bir test önerisi gönderebilirsiniz. Bu, cihaz için gelecekteki bir güncellemede sorunun düzeltilmesini ve aynı hatanın başka hiçbir cihazda yaşanmamasını sağlar.

Test teklifinin nasıl gönderileceğine dair adım adım talimatlar için CTS gönderim sürecine göz atın.