Köşe biçimlerini analiz edin

Çerçeve profili kullanarak tepe noktasıyla ilgili birkaç olası performans sorununu teşhis edebilirsiniz. Oyununuzun belirli bir karede gerçekleştirdiği tüm çizim çağrılarını ve çizim çağrısı başına çizilen temel öğe sayılarını görüntülemek için Komutlar bölmesini kullanın. Bu, tek bir karede gönderilen toplam köşe noktası sayısına yaklaşık bir değer verebilir.

glDrawElements çağrısı için çerçeve profili oluşturma görünümü, çizim çağrısı parametreleriyle ilgili ayrıntılar için fareyle üzerine gelin
Şekil 1. 2.718 temel üçgenin çizildiği tek bir glDrawElements çağrısı için çerçeve profili oluşturma görünümü

Köşe özelliği sıkıştırma

Oyununuzda karşılaşabileceğiniz yaygın sorunlardan biri, büyük bir ortalama tepe boyutudur. Yüksek bir ortalama köşe boyutuyla gönderilen çok sayıda köşe noktası, GPU tarafından okunduğunda büyük bir köşe belleği okuma bant genişliğine neden olur.

Belirli bir çizim çağrısının köşe biçimini gözlemlemek için aşağıdaki adımları tamamlayın:

  1. İlgi çeken bir çizim çağrısı seçin.

    Bu, sahne için tipik bir çizim çağrısı, çok sayıda köşe noktası içeren bir çizim çağrısı, karmaşık bir karakter modeli için bir çizim çağrısı veya başka bir tür çizim çağrısı olabilir.

  2. Ardışık düzen bölmesine gidin ve giriş düzeneği için IA'yı tıklayın. Bu, GPU'ya gelen köşelerin köşe biçimini tanımlar.

  3. Bir dizi özelliği ve biçimlerini gözlemleyin. Örneğin, R32G32B32_SFLOAT, 3 bileşenli 32 bit imzalı bir kayan değerdir.

Bir çizim çağrısının giriş derlemesi için sıkıştırılmamış köşe özelliklerine sahip çerçeve profili oluşturma görünümü
Şekil 2. Sıkıştırılmamış özelliklerle 56 bayt köşe boyutuna neden olan bir çizim çağrısı için giriş derlemesi

Sık sık, tepe noktası özellikleri çizilen modellerin kalitesinde çok az bir düşüşle sıkıştırılabilir. Özellikle şunları yapmanızı öneririz:

  • Köşe konumu yarı duyarlı 16 bit kayan öğelere sıkıştırılıyor
  • UV doku koordinatlarını 16 bit imzasız tamsayı ushort'lere sıkıştırma
  • Kuternyonlar kullanarak normal, teğet ve binormal vektörleri kodlayarak teğet alanını sıkıştırma

Düşük hassasiyetli türler için duruma göre diğer çeşitli özellikler de değerlendirilebilir.

Köşe akışı bölme

Köşe özelliği akışlarının düzgün şekilde bölünüp bölünmediğini de araştırabilirsiniz. Mobil GPU'lar gibi parçalı oluşturma mimarilerinde köşe konumları, ilk olarak her bir parçada işlenen temel öğe kutuları oluşturmak için toplama geçişinde kullanılır. Köşe özellikleri tek bir arabelleğe yerleştirilirse yalnızca köşe konumları kullanılsa bile tüm köşe verileri, birleştirme için önbelleğe okunur.

Köşe okuma belleği bant genişliğini ve önbellek verimliliğini artırmak ve böylece, bağlama geçişinde harcanan süreyi azaltmak için tepe noktası verileri, biri köşe konumları, diğer tüm köşe özellikleri için olmak üzere iki ayrı akışa bölünmelidir.

Köşe özelliklerinin uygun şekilde bölünüp bölünmediğini araştırmak için:

  1. İlginizi çeken bir çizim çağrısı seçin ve çizim çağrısı numarasını not edin.

    Bu, sahne için tipik bir çizim çağrısı, çok sayıda köşe noktası içeren bir çizim çağrısı, karmaşık bir karakter modeli için bir çizim çağrısı veya başka bir tür çizim çağrısı olabilir.

  2. Ardışık düzen bölmesine gidin ve giriş düzeneği için IA'yı tıklayın. Bu, GPU'ya gelen köşelerin köşe biçimini tanımlar.

  3. Köşe özelliklerinizin bağlamalarını inceleyin. Genellikle bunlar doğrusal olarak artış gösterebilir (0, 1, 2, 3 vb.) ancak bu durum her zaman geçerli değildir. Köşe konumu genellikle listelenen ilk köşe özelliğidir.

  4. State (Durum) bölmesinde, LastDrawInfos değerini bulun ve eşleşen çizim çağrısı numarasını genişletin. Ardından, bu çizim çağrısı için BoundVertexBuffers öğesini genişletin.

  5. Belirtilen çizim çağrısı sırasında bağlı köşe arabelleklerini, önceki köşe özellik bağlamalarıyla eşleşen dizinleri gözlemleyin.

  6. Çizim çağrınızın köşe özellikleri için bağlamaları ve arabellekleri genişletin.

  7. Köşe verilerinin kaynağı olan temel belleği temsil eden arabellekler için VulkanHandle gözlemleyin. VulkanHandle değerleri farklıysa bu, özelliklerin temel alınan farklı arabelleklerden kaynaklandığı anlamına gelir. VulkanHandle değerleri aynıysa ancak ofsetler büyükse (örneğin, 100'den fazla) özellikler yine de farklı alt arabelleklerden kaynaklanabilir ancak bunun için daha fazla araştırma yapılması gerekir.

Bir çizim çağrısının giriş derlemesi ve bağlı köşe arabelleğinin gösterildiği durum için çerçeve profili oluşturma görünümü
Şekil 3. Çizim çağrısı için giriş düzeneği. Sağdaki durum paneli, bağlama 0 ve 1, köşe konumu ve normal özelliklerinin tek bir temel arabelleği paylaştığını gösteriyor.

Köşe akışı bölme ve bunun çeşitli oyun motorlarında nasıl çözüleceği hakkında daha fazla ayrıntı için konuyla ilgili blog yayınımıza bakın.