Yerel ve tescilli motorlar

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

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

Vulkan'ı oyun motorunuza 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ı ve eksilerini anlayın
  • 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 ö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çin

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

Öneriler

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

  • Cihazda Android 10.0 (API düzeyi 29) veya sonraki bir sürüm yüklüyse
  • Cihaz, Vulkan API'nin 1.1 veya sonraki bir sürümünü destekler
  • Cihaz, 2022 Android Baseline profili ile uyumlu donanım özelliklerine ve özelliklere sahip

Eski cihaz desteği

Oyununuz farklı grafik yeteneklerine 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ı içeren ve OpenGL ES kullanan oyunlar, OpenGL ES'de çizim çağrısı yapmanın yüksek maliyeti nedeniyle önemli miktarda sürücü ek yüküne neden olabilir. Bu oyunlar, kare sürelerinin büyük bir kısmını grafik sürücüsünde harcamaları için CPU'ya bağlı olmayabilir. Oyunlarda OpenGL ES'den Vulkan'a geçiş yapıldığında da CPU ve güç kullanımında ö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. Eski cihazları hedeflerken yedek olarak OpenGL ES oluşturma desteğini ekleyin. Bunun nedeni, hedef cihaz listenizdeki bazı cihazlar, oyununuzu güvenilir bir şekilde çalıştıramayan Vulkan uygulamaları olabilir.

Performans ve özellik açısından eksiklikleri veya kararlılık sorunları olduğundan 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. Özellikle oyununuzda yüksek kaliteli grafiklere sahip ve Vulkan, Android'de hedeflediğiniz tek API'yse bu durumla karşılaşabilirsiniz. Eski cihazların çoğu Vulkan API'nin 1.0.3 sürümüyle sınırlıdır ve daha modern donanımlarda bulunan ve yaygın olarak kullanılan Vulkan uzantıları genellikle eksiktir.

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ın giderilmesi için çalışmak, önemli miktarda test ve mühendislik süresi gerektirebilir.

Vulkan'ı projenize ekleyin

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

  • Vulkan API başlıklarını dahil et
  • Gölgelendirici kodunu SPIR-V için derleyin
  • Çalışma zamanında Vulkan API'yi çağırın

Vulkan API başlıklarını dahil et

Vulkan kullanan kodu derlemek için oyununuzun Vulkan API başlık dosyalarını içermesi gerekir. Vulkan başlıklarının bir kopyasını Android NDK'da veya Vulkan SDK sürümlerinde paketlenmiş olarak bulabilirsiniz. Herhangi bir NDK sürümü, yalnızca NDK sürümü sırasında kullanılabilen 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ı başlıkların en güncel sürümüne sahiptir.

Gölgelendirici kodunu SPIR-V için derleyin

Vulkan API, gölgelendirici programlarının SPIR-V ikili orta biçiminde sağlanmasını bekler. Bu kural, OpenGL Gölgelendirme Dili (GLSL) ile yazılan kaynak kodunu metin dizeleri olarak gönderebildiğiniz OpenGL ES'den farklıdır. GLSL veya High-level Shader Language (HLSL) gibi bir gölgelendirici dilinde yazılan kodu almak ve Vulkan ile kullanılmak üzere SPIR-V modüllerinde derlemek için bir 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 basit yolu, Android NDK'da bulunan libvulkan.so paylaşılan kitaplığına bağlantı oluşturmaktır. Kitaplığa bağlantı oluşturmanın iki eksikliği vardır: ek işlev dağılımı ek yükü ve Vulkan API işlevi işaretçilerinin otomatik olarak giderildiği 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ğlantı oluşturulması, belirli bir API çağrısı için ek bir dağıtım düzeyi elde edilmesini sağlar. Ek yük küçük olsa da yüksek hacimde 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şlevlerini kullanmadan önce işaretçileri manuel olarak çözümlemeniz gerekir.

Bu sorunları azaltmak için işaretçileri, çalışma zamanında kullanmayı planladığınız tüm Vulkan işlevlerine dinamik olarak çözümleyin. 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ümleri 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

Vulkan API sürümleri 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 şundan yüksek bir API sürümü istemeyin:

Desteklenen en yüksek Vulkan API sürümünü belirleme örneği şu şekildedir:

// 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 özelliği, uzantıyı, yetkiyi ve minimum parametre sınırını tanımlayan JSON dosyalarıdır. Bir cihazın belirli bir Vulkan profiliyle (2022 Android Baseline profili gibi) 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 oluşturma girişimidir. ABP2021 ve ABP2022, geçmişe dönük görünümlü profiller olup ilgili zamandaki etkin cihazların% 85'inden fazlasını kapsaması amaçlanır. Artık yeni bir ABP sunulmayacak.

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ı 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ı olacak Kare İlerleme Hızı 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österilebilir. 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ön sürecinin nasıl çalıştığını ve Vulkan kullanılırken yön farklılıklarını ele almanın optimum yöntemini anlamak için Vulkan ön rotasyonu ile cihaz döndürmeyi yönetme konusuna bakın.

Sorun giderme ve Vulkan profili 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 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ı ek yükü gerektirdiği ve oyununuzun performansını etkilediği için 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 karesinde yapılan Vulkan API çağrılarını kaydetmek ve tekrar 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ındaki 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 kareleri 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 Denetleyici (AGI) de kullanılabilir.

Performans analizi araçları

Oyununuzda ideal olmayan kare hızlarına neden olan oluşturma sorunlarını incelemek için performans analizi araçlarını kullanın. Bağımsız GPU tedarikçileri, oyununuzun profilini çıkarmak ve GPU mimarilerine özgü performans verileri sağlamak için tasarlanmış araçlar sunar. 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 testlerini iyileştirin

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

Vulkan uygulamanızda Android destekli herhangi bir cihazı etkileyen yeni bir hatayı tetiklemeyi başarırsanız sorununuzu ve bunu kontrol etmenin yollarını açıklayan yeni bir test teklifi 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.