3D modeller bütçesi. Daha fazla üçgen veya köşe noktası önemli olan


12

3D oyun için bir model yaparken bütçemdeki Çokgenler (üçgenler) veya köşelerimde bir önlem olarak ne almalıyım? Biri 8 köşe ve 12 üçgen, diğeri 24 köşe ve 12 üçgen olmak üzere iki set 40000 küp ile bir deney yaptım. Hepsi Birlik'te yapıldı ve her ikisi de usule göre oluşturuldu. Şaşırtıcı bir şekilde, her iki set de neredeyse aynı şekilde yapıldı, aralarında çok küçük bir fark vardı.

Köşeleri sayma konusunda endişelenmemem ve sadece üçgen sayımına bakmam gerektiği anlamına mı geliyor?

DÜZENLEME: 19602 üçgen ve 10000 köşe noktası ve aynı miktarda tirangles ama 39204 köşe noktası olan bir uçak oluşturduğum başka bir deney yaptım. Her ikisinden de 4000 tane ürettim. Şimdi daha az köşe noktası 14 fps ila 19 fps kazandı. Bu yüzden sanırım genelde daha azı daha iyidir, ama sadece büyük farklılıklarda.


9
Oyununuzu yazın ve sorunları ortaya çıktıkça düzeltin. Bu tür bir sorun asla ortaya çıkmayabilir ve zamanınızı boşa harcıyorsunuz: P
Vaillancourt

Yanıtlar:


16

Arazi için kullanabileceğimiz gibi büyük bir ızgara örgüsü hayal edelim. Biz işlemek edeceğiz ntek beraberlik çağrısında, diyelim yarım bizim 1080p ekranı kaplayan, bunun Üçgenler değerinde.

Tüm köşelerimizi kaynak yapıyor ve yumuşatma / tekstüre dikişleri yoksa, her üçgenin 3 köşesi vardır ve her tepe noktası 6 üçgenle paylaşılır, bu nedenle n/2köşelerimiz vardır.

Bunu yapmak için şunları yapmalıyız:

  • Köşe gölgelendiricisini en az n/2kez çalıştırın

    ("en azından" çünkü köşe sonuçları için önbelleğimiz sadece çok büyük. Bazen zaten dönüştürdüğümüz bir tepe noktasını çıkarırız, daha sonra onu paylaşan daha sonraki bir üçgen için tekrar gerekir ve böylece tepe gölgelendiricisini yeniden çalıştırırız Kağıt üzerinde göründüğü kadar fazla tasarruf elde edemiyoruz)

  • Klips ve nüçgenler.

  • En az 1920x1080 / 2 veya yaklaşık 1 milyon piksel çerçeve tamponu üzerinde rasterleştirin ve enterpolasyon yapın (arazimizin ekranın yaklaşık yarısını kapladığını söylediğimizden beri).

    ("en azından" GPU'ların dörtlü pikseller üzerinde çalışma şekli nedeniyle, çokgenlerin kenarlarının hemen dışındaki bazı parçalar hala rasterleştirilir, ancak maskelenir, yani parçaları iki kez işleriz. önce en ön çokgeni derinlik arabelleğine çekecek kadar şanslı olmazsak kendini tıkar)

  • > = 1 milyon olan tüm parçalar için parça gölgelendiricisini çalıştırın.

  • Çerçeve ve derinlik tamponlarına ~ 1 milyon sonuç karıştırın.

Tamam, şimdi tüm köşelerimizin kaynağını kaldıralım, böylece şimdi daha önce olduğundan altı kat daha fazla 3noluşturulacak köşelerimiz var ! Adımlarımız ...

  • Köşe gölgelendirici 3nsürelerini çalıştırın .

    (Her tepe noktası yalnızca bir kez kullanıldığından önbelleğe alma nedeniyle yıldız işareti yoktur, ancak bu, önbelleğin bizi her zaman kurtaramayacağı anlamına gelir)

  • Klips ve nüçgenler.

  • Çerçeve arabelleğinin en az 1920x1080 / 2 veya yaklaşık 1 milyon piksel üzerinde rasterleştirin ve enterpolasyon yapın.

  • > = 1 milyon olan tüm parçalar için parça gölgelendiricisini çalıştırın.

  • Çerçeve ve derinlik tamponlarına ~ 1 milyon sonuç karıştırın.

... bekle, her adım ilk hariç aynı! Bu nedenle, GPU'nun tipik bir çizim çağrısında yaptığı işlerin çoğu, kullanılan köşe sayısıyla doğrudan ilişkili değildir. Ekran kapsamı, fazla çekme ve toplam üçgen sayısı, maliyetin çok daha fazlasını oluşturur.

Bu, köşelerin tamamen ücretsiz olduğu anlamına gelmez. Köşeleri paylaşabileceğiniz zaman paylaşıyorsanız, özellikle köşe gölgelendiricileriniz karmaşıksa veya donanımınızın köşe boru hattı zayıfsa (bazı eski konsollarda olduğu gibi) önbelleklemeden mütevazı tasarruflar elde edebilirsiniz. Ancak, köşe sayısının üçgen sayısı artı veya eksi sabit bir faktörle orantılı olduğu göz önüne alındığında, genellikle genel ağ maliyetinin bir ölçüsü kadar ilginç değildir.


Bu köşeleri belleğe göndermenin maliyeti ne olacak?
Michał Leszczyński

7
Köşe tamponunu her karede değiştirmediğiniz sürece, bu yükleme maliyetini bir kez ödersiniz. Dokularınız ve çerçeve arabelleğiniz büyük olasılıkla belirli bir çerçevedeki daha büyük video belleği ve bant genişliği domuzlarıdır. Yine de köşelerin kesinlikle ücretsiz olmadığı ve pratik olduğunda bunları paylaşmak daha iyidir, ancak paylaşılmayan köşeler bir oyunun kötü performans göstermesinin nedeni nadiren olacaktır.
DMGregory

Buna ekleyeceğim, oyunda orman vb. Yapıyorum. Başladığımda, başlangıçta çekiliş çağrıları kullanıyordum (kendi motorumu kullanıyorum, bu sorunuzla tamamen uyuşmayabilir) modelleri sadece verts ile çizmek için, bu tek başına iyi, performans iyiydi. Ancak, dizin oluşturmayı kullanmaya başladığımda, bazı verts paylaşıldığı ve önbelleğe alındığı için performans artışı sağladım, bu nedenle bazı hesaplamalar iki kez yapılmadı. Sonuç olarak, sadece verts ham testi, tri sayımlara karşı en iyi gösterge verts değildir. Boru hattınız bunlardan çok fazla etkilenebilir. Diğer cevaplar gibi.
ErnieDingo

2

Ne.

Gerçekten çok sayıda tris (milyon) konuşmuyorsanız, önemsediğiniz şey:

  • Oluşturulan piksel sayısı
  • Parça gölgelendiricinin maliyeti
  • Çekiliş aramalarının sayısı (cihaza bağlı olarak güçlü bir şekilde).

24 köşe noktası çarpı 4000 küp, 96.000 köşe noktası verir.

640x380 piksel 243.200 parça verir ve çoğu cihaz oldukça büyük çözünürlükleri destekler.

Çizim çağrısı darboğazından (1'000 küpler için 1 tek model) kaçınmak için denemenizi 1'000'000 küp ile yeniden çalıştırabilirsiniz.


2
Bu, sahneye ve nasıl oluşturduğunuza bağlıdır. Doğal olarak nispeten az miktarda fazla çekime sahip bir sahneniz varsa, köşe işleme kesinlikle performansınıza hakim olabilir. Ayrıca, çekiliş çağrılarının sayısı, çekiliş çağrıları arasında durum değiştikçe sorun değildir (bazı API'ler için).
Nicol Bolas

1

Bir WebGL uygulaması yapıyorsanız, köşe sayısı, kullanıcıların indirmesi için dosya boyutu açısından hızla bir darboğaz haline gelir. Aynı sayıda üçgen, ancak DCC yazılımında gösterilenden 2-3 kat daha fazla köşe noktası. Daha iyi sökme, bu durumda daha az dikişe sahip olarak çok yardımcı olabilir.

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.