Yerel ve tescilli motorlar

Android'de Vulkan'ı kullanmaya başlayın

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

Oyun motorunuzda Vulkan'ı başarılı bir şekilde uygulamak için şunları yapmanız gerekir:

  • Vulkan ile kullanılacak Android cihazları belirleme
  • Eski Android cihazları desteklemenin artılarını öğrenin
  • Vulkan'ı Android derleme hedefinize ekleyin
  • Vulkan için SPIR-V oluşturmak üzere bir gölgelendirici derleyici seçin
  • Çalışma zamanında kullanılabilir Vulkan API sürümünü belirleme
  • Vulkan profilleri, kare hızı ve rotasyon öncesi ile Vulkan oluşturma işlemlerinizi nasıl optimize edeceğinizi öğrenin
  • Hata ayıklama ve performans analizi için grafik araçları seçme
    Not: Vulkan'ı Unity veya Unreal oyun motorlarıyla Android'de kullanma hakkında bilgi edinmek için aşağıdaki sayfaları inceleyin:
  • Unity'de Vulkan
  • Unreal'de Vulkan

Vulkan için minimum cihaz özelliklerini seçin

Vulkan, Android 7.0 (API seviyesi 24) ve üzeri sürümlerin ardından Android'de kullanılabilir. Android 7.0 veya sonraki sürümleri çalıştıran tüm Android cihazlar Vulkan'ı desteklemez. Oyununuzun Vulkan özellikli Android cihazları desteklediğini belirlemeniz gerekir.

Öneriler

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

  • Cihaz, Android 10.0 (API düzeyi 29) veya sonraki bir sürümü çalıştırıyor
  • Cihaz, Vulkan API'nin 1.1 veya sonraki sürümünü destekliyor
  • Cihaz, 2022 Android Baseline profili ile uyumlu donanım özelliklerine ve özelliklere sahip olmalıdır.

Eski cihaz desteği

Oyununuz, çeşitli grafik özellikleri seviyelerine sahip çok çeşitli cihazlarda çalışacak şekilde tasarlandıysa Vulkan için minimum cihaz özelliklerini seçin bölümünde önerilenlerden daha eski cihazları desteklemeniz gerekebilir. Eski cihazlar için destek oluşturmadan önce, Vulkan'ın oyununuza avantaj sağlayıp sağlamadığını değerlendirin. Çok sayıda çizim çağrısı olan ve OpenGL ES kullanan oyunlar, OpenGL ES içinde çizim çağrıları yapmanın yüksek maliyeti nedeniyle önemli miktarda sürücü ek yükü görebilir. Bu oyunlar, kare sürelerinin büyük bir bölümünü grafik sürücüsüne harcamaktan dolayı CPU'ya dönüşebilir. Oyunlar, OpenGL ES'den Vulkan'a geçildiğinde CPU ve güç kullanımında da önemli düşüşler görebilir. Bu, özellikle oyununuzda çizim çağrılarını azaltmak için içgörüleri etkili bir şekilde kullanamayan karmaşık sahneler varsa geçerlidir. Eski cihazları hedeflerken, hedef cihaz listenizdeki bazı cihazlarda oyununuzu güvenilir şekilde çalıştıramayan Vulkan uygulamaları olabileceğinden, yedek olarak OpenGL ES oluşturma desteğini ekleyin.

Eski Vulkan özellikli cihazları desteklemek istemeyebilirsiniz. Çünkü bu cihazlarda performans ve özellik eksikliği ya da kararlılık sorunları vardır.

Performans ve Özellikler

Vulkan özellikli eski Android cihazlarda, oyununuzu çalıştırmak için gereken özellikler için oluşturma performansı veya donanım desteği olmayabilir. Özellikle oyununuz yüksek kaliteli grafiklere sahipse ve Android'de hedeflediğiniz tek API Vulkan ise bu durumla karşılaşma olasılığı yüksektir. Birçok eski cihaz, Vulkan API'nin 1.0.3 sürümüyle sınırlıdır ve daha modern donanımlarda bulunan yaygın olarak kullanılan Vulkan uzantıları genellikle eksiktir.

Kararlılık

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

Projenize Vulkan'ı ekleyin

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

  • Vulkan API başlıklarını ekle
  • Gölgelendirici kodunu SPIR-V'ye derleme
  • Çalışma zamanında Vulkan API'yi çağırma

Vulkan API başlıklarını ekle

Oyununuzun, Vulkan'ı kullanan kod derlemek için 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'nın yayınlanması sırasında mevcut olan Vulkan üst bilgilerini içerir. NDK'dan Vulkan başlıkları kullanıyorsanız Vulkan sürüm 1.3'ü destekleyen başlık dosyaları da dahil olmak üzere NDK 25 veya daha yeni bir sürümünü kullanın. Vulkan SDK'sı, başlıkların en güncel sürümüne sahiptir.

Gölgelendirici kodunu SPIR-V'ye derleme

Vulkan API, gölgelendirici programlarının SPIR-V ikili programda ara biçimde sağlanmasını bekler. Bu kural, OpenGL Gölgeleme Dili'nde (GLSL) yazılmış kaynak kodunu metin dizeleri olarak gönderebileceğiniz OpenGL ES'den farklıdır. GLSL veya High-level Shader Language (HLSL) gibi gölgelendirici dilde yazılan kodu almak ve Vulkan'da kullanmak üzere SPIR-V modüllerinde derlemek için gölgelendirici derleyici kullanın.

GLSL'de yazılmış gölgelendirici programlarını SPIR-V olarak derlemek için shaderc derleyicisi kullanılabilir. Oyununuz HLSL kullanıyorsa DirectXShaderCompiler SPIR-V çıkışını destekler. Genellikle oyununuzun öğe oluşturma sürecinin bir parçası olarak gölgelendirici programlarını çevrimdışı olarak derler ve SPIR-V modüllerini çalışma zamanı öğelerinizin bir parçası olarak eklersiniz.

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

Oyununuzun Vulkan API'yi çağırmak için Vulkan API çağrılarına yönelik işlev işaretçileri edinmesi gerekir. Bunu yapmanın en basit yolu, Android NDK'da yer alan libvulkan.so adlı paylaşılan kitaplıkla bağlantı oluşturmaktır. Kitaplıkla bağlantı oluşturmanın iki eksikliği vardır: Ek işlev dağıtım yükü ve Vulkan API işlevi işaretçilerinin otomatik olarak çözümleneceği sınırlamalar.

Bir Vulkan API işlevini çağırdığınızda kontrol, Vulkan yükleyicisi adlı 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'sinin katman mimarisinin bir parçasıdır. Derleme zamanında sistem kitaplığına bağlantı oluşturulması, belirli bir API çağrısı için ek bir dağıtım düzeyine sahip olunmasını sağlar. Ek yük az olsa da yüksek hacimde Vulkan çağrısı yapan oyunlarda fark edilebilir.

Sistem kitaplığı genellikle yalnızca temel API'nin bir parçası olarak kabul edilen Vulkan işlevlerine yönelik işaretçileri çözümler. Vulkan'da, ek Vulkan işlevlerini tanımlayan ve çoğu sistem kitaplığı tarafından otomatik olarak çözümlenmeyen çok sayıda uzantı bulunur. Bu Vulkan işlevlerine yönelik işaretçileri, kullanmadan önce manuel olarak çözümlemeniz gerekir.

Bu sorunları azaltmak için, çalışma zamanında kullanmayı planladığınız tüm Vulkan işlevlerine yönelik işaretçileri dinamik olarak çözümleyin. Bunu başarmanın yollarından biri, volk gibi açık kaynaklı bir meta yükleyici kitaplığı kullanmaktır. AGDKTunnel örnek oyunu, bu amaçla volk'u entegre eder. Bir meta yükleyici kitaplığı kullanıyorsanız derleme komut dosyalarınızdaki libvulkan.so adlı paylaşılan kitaplığa 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 kullanılabilen 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ü

Bir 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 platformu 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 şu seviyelerde bir API sürümü istemeyin:

En yüksek desteklenen Vulkan API sürümünü belirlemeye ilişkin bir örnek 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; Vulkan cihazının profille uyumlu olması için desteklemesi gereken bir dizi gerekli özellik, uzantı, işlev ve minimum parametre sınırını tanımlayan JSON dosyalarıdır. Bir cihazın 2022 Android Baseline 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ılabildiğini tanımlayan Vulkan Profilleri'ni kullanmaktadır.

Android Temel Profili (ABP), Vulkan Profili oluşturmada ilk denemedir. ABP2021 ve ABP2022, o tarihte etkin cihazların% 85'inden fazlasını kapsamayı amaçlayan geriye dönük profillerdir. Bundan sonra yeni ABP olmayacak.

Android için Vulkan Profilleri (VPA), yazılım geliştiricilerinin ihtiyaçlarını yansıtmayı ve donanım geliştiricileri tarafından sunulur sunulmaz tutarlı özellikler sunmayı amaçlayan yeni bir ileriye dönük profildir. VPA15_minimums, Android 15 için ilk profildir ve her yıl ana Android sürümlerini kapsayan yeni bir VPA sunulacaktır.

Kare ilerleme hızını uygulayın

Doğru kare hızı, yüksek kaliteli bir oyun deneyimi sunmanın önemli bir parçasıdır. Android Oyun Geliştirme Kiti, oyununuzun optimum kare hızına ulaşmasına yardımcı olmak için Frame Pacing kitaplığını içerir. Uygulama ayrıntıları için Android Frame Pacing'i Vulkan oluşturucunuza entegre etme bölümüne bakın.

Ön rotasyon uygulama

Android cihazlar birden fazla yönde görüntülenebilir. Cihaz yönü, oluşturma yüzeyinin yönünden farklı olabilir. Android'deki OpenGL ES'nin aksine, Vulkan ikisi arasındaki tutarsızlıkları işlemez. Vulkan kullanılırken yön işleminin nasıl çalıştığını ve yön farklılıklarını ele almanın en uygun yöntemini anlamak için Vulkan öncesi döndürme ile cihaz döndürmesini işleme konusuna bakın.

Vulkan oluşturma işlemiyle ilgili sorunları giderme ve Vulkan oluşturma profilini oluşturma

Vulkan oluşturma koduyla ilgili oluşturma sorunlarını ve performans sorunlarını teşhis etmenize yardımcı olacak birçok araç mevcuttur.

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 bakın.

Vulkan doğrulama katmanları

Vulkan doğrulama katmanları, Vulkan API'ye yaptığınız çağrıları incelemek ve yanlış ya da optimum olmayan kullanım konusunda uyarılar veya hatalar sağlamak için etkinleştirilebilen çalışma zamanı kitaplıklarıdır. Doğrulama işlemi, çalışma zamanı ek yükü eklediğinden ve oyununuzun performansını etkilediğinden bu doğrulama katmanları varsayılan olarak etkin değildir. Oyununuzda doğrulama katmanlarını nasıl kullanacağınız hakkında bilgi edinmek için Doğrulama katmanıyla hata ayıklama bölümüne bakın.

Kare yakalama araçları

Bir oyun karesi sırasında yapılan Vulkan API çağrılarını kaydedip tekrar oynatmak için kare yakalama araçlarını kullanın. Bu araçlar sayesinde:

  • Etkin grafik kaynakları hakkındaki bilgileri ve bu kaynakların görselleştirmelerini görüntüleyin
  • Oyununuz tarafından yapılan API çağrılarının sırasını ve API parametrelerini görün
  • Ç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şturmanın 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 için kare yakalamayı destekler.

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

Performans analizi araçları

Oyununuzda optimum kare hızlarına neden olan oluşturma sorunlarını araştırmak için performans analizi araçlarını kullanın. Farklı GPU tedarikçileri, oyununuzun profilini çıkarmak ve GPU mimarilerine özel performans verileri sağlamak için tasarlanmış araçlar sağlar. Oyununuzun performans özellikleri ve performans sorunları, farklı tedarikçilere ait GPU'larda, hatta aynı satıcının farklı GPU nesillerinde oluşturulurken önemli ölçüde farklılık gösterebilir.

Performans verilerini toplamak ve analiz etmek için Android GPU Inspector'ı da kullanabilirsiniz. Tedarikçi araçlarından farklı olarak, Android GPU Denetleyici farklı tedarikçi firmalara ait birden fazla GPU ile uyumludur. Bununla birlikte, Android GPU Denetleyici eski Android cihazları desteklemez ve tüm yeni cihazlarla uyumlu olmayabilir.

CTS-D ile Vulkan testini iyileştirme

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

Vulkan uygulamanızda, Android destekli herhangi bir cihazı etkileyen yeni bir hata tetiklemeyi başarırsanız sorununuzu ve nasıl kontrol edeceğinizi açıklayan yeni bir test teklifi gönderebilirsiniz. Bu, cihazın gelecekteki bir güncellemesinde sorunun düzeltilmesini ve aynı hatanın başka cihazlarda yaşanmamasını sağlar.

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