Her karaktere kendi VBO'sunu vermeli miyim yoksa bunları tek bir VBO'ya mı bölmeliyim?


10

3D birinci şahıs oyunu yapıyorum. Her karaktere kendi VBO'sunu vermeli miyim yoksa tüm karakterleri tek bir VBO'ya mı topluyor olmalı? Artıları / eksileri nelerdir?


Bu yinelenen bir soru. Ne olduğundan, çok emin değilim, ama bir dupe.
DeadMG

Bu benzeyen bu diğer soru içinde deformables hakkında ise, ama bizatihi yinelenen bir başlangıç için, var olduğuna inanmıyorum, bu Açık GL (belirli farklar varsa emin değilim) olduğu DirectX11 (bu nedenle muhtemelen işleri değiştiren mozaikleme kullanıyor).
Thomas Russell

Yanıtlar:


11

Bu gerçekten performans ve esneklik arasında bir seçimdir, ancak bununla ilgili görüşlerimi listeleyeceğim.

Bir adet tek VBO

Olumlu tarafları:

  • Sahnenizi çizmek için sadece bir çizim çağrısı. Bu performansı artırır . Uygulamanız birden fazla çizim çağrısı gerektirse de, yine de tek bir VBO'nuz olabilir ve sayım ve ofsetin çiziminize karar vermesine izin verebilirsiniz.
  • Nesneleriniz arasında durum değişikliği gerektirmez. Bu performansı artırır .

ve olumsuz taraflar:

  • Yönetilmesi zor, ancak bu, kodunuzu nasıl yazdığınıza, düzgün tasarlanmış vb.
  • Yönetilmesi zor diyerek VBO'yu güncellemek, her nesne için doğru ofseti ayarlamak gibi şeyleri kastediyorum.

Bireysel VBO: s

Olumlu tarafları:

  • Uygulaması kolaydır.
  • Başından itibaren yönetimi daha kolaydır.

ve olumsuz taraflar:

  • Birçok eyalet değişikliği. Bu performansı düşürür.
  • Beraberlik çağrıları bir sürü. Performansı düşürecektir.

özet

Başvurunuzu profillemenizi tavsiye ederim; Görebileceğiniz verilerdeki gerçek darboğazınızı alın. Erken optimizasyon (bu durumda) gereksiz olarak gösterilebilir. Bununla birlikte, bireysel VBO: senaryosu göz önüne alındığında, uygulamanızda gerçek bir performans kaybı keşfederseniz, tek bir VBO uygulamaya başlayabilirsiniz.

Ancak, gerekli olmadığı sürece (nesne sayısı düşüktür, genel olarak pek çok eyalet değişikliği yoktur, vb.) Bunun işe yaramayacağını görmedikçe bireysel VBO'larla gitmenizi tavsiye ederim.

Düzenle

Birden fazla telefon görüşmesi yapmanın iyi olacağını söylemeyi unuttum. Performans açısından kritik zamanlarda en önemli şey, durum değişikliklerini minimumda tutmaktır. Sadece işlemek için indeks sayısını ve her çizim çağrısı için bir ofset ayarlayabilirsiniz, ve bu iyi. Ancak, durum değişikliklerini olabildiğince düşük tutun ve mümkün olduğunca az sayıda çizim çağrısı yapın , bu cevabın en büyük merhaba ya da en azından söylemeye çalıştığım şey bu.


Sadece 1 çizim çağrısı yapıyorsanız, bu mesh başına (tepe başına değil) durum değişiklikleri (üniforma vb.) Ayrıca her şeyi çizmek için bir tümünü veya hiçbirini zorlar. Tabii ki sadece 1 VBO çoklu çizim çağrısı olacak, ancak yeni bir kafes eklemek isterseniz?
deceleratedcaviar

1
@Daniel: Yeni bir ağ VBO'ya güncellenmeli / eklenmelidir. Birden fazla telefon görüşmesi yapmanın iyi olacağını söylemeyi unuttum. Performans açısından kritik zamanlarda en önemli şey, durum değişikliklerini minimumda tutmaktır. Sadece işlemek için indeks sayısını ve her çizim çağrısı için bir ofset ayarlayabilirsiniz, ve bu iyi. Ancak, durum değişikliklerini olabildiğince düşük tutun ve mümkün olduğunca az sayıda çizim çağrısı yapın , bu cevabın en büyük merhaba ya da en azından söylemeye çalıştığım şey bu. :-)
Wroclai

2005'te toplu, toplu, toplu işlem, tek başına çizim çağrılarını işleyerek tamamen CPU'ya bağlı olmadan önce 1 GHz CPU'da 10k ila 25k toplu iş alabileceğiniz sonucuna vardı. Bu, 60Hz çerçeve başına birkaç yüz partiye dönüştüğü için, her şeyi tek bir VB'ye dönüştürmek gerekli değildir, ancak benzer özelliklere (yaşam boyu, güncelleme hızı, nitelikler) sahip geometriyi aynı VB'ye paketlerseniz yardımcı olur.
Lars Viklund

1
Bence frustum'un ayıklanmasını da hesaba katmalısınız.
Tara
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.