GPU ve CPU'da mesh manipülasyonu


9

Sadece biraz meraklı - CPU'da veya gölgelendiricide mesh manipülasyonları nerede yapıyorsunuz? CPU'da her şeyi yaptım ve bir arkadaşım GPU tarafına bir şeyler taşımayı önerdi.

GPU'da kemik animasyonları gibi şeyler yapıyorsanız, ağı nasıl geri alırsınız? (Çarpışma tespiti yaptığım için ...)

Yanıtlar:


13

Bu genellikle GPU'da gerçekleşir, ancak her ikisi için de farklılıklar vardır ve hangisinin sizin için en iyi olacağına karar vermek size bağlıdır.

GPU üzerinde manipülasyon yapmak, mesh verilerini sadece bir kez göndermeniz gerektiği anlamına gelir, o zaman deforme etmek için matris dönüşümlerini gönderebilirsiniz. Bu harika çünkü CPU-> GPU arasında gereken bant genişliğini büyük ölçüde azaltır. Ayrıca , ağın yalnızca bir kopyasını GPU'ya yükleyebileceğiniz ve ağın birçok farklı örneği için dönüşümler uygulayabileceğiniz anlamına gelir . Ancak, "mesh doğru" çarpışmalara sahip olmak daha zordur. Dönüşümler GPU'da yapıldığından, CPU'da test etmek için kullanılabilir değilsiniz.

CPU üzerinde manipülasyon yapmak, dönüştürülmüş ağa erişiminiz olduğu anlamına gelir. Bu konuda bilmeniz gereken her şeye erişebilirsiniz. Ancak, bu tüm ağı GPU'ya her kareye yüklemeniz gerektiği anlamına gelir. Ayrıca , bu kafesin her örneği için dönüştürülmüş bir kafes yüklemeniz gerektiği anlamına gelir . Özetle, burada artıları ve eksileri kapsamlı bir liste yakın bir hayır.

  • GPU için Artıları

    • Kafes verilerini bir kez yükleyin
    • Birden çok örnek için dönüştürün
    • Sadece matris dönüşümlerini göndermeniz gerekir
    • GPU, bu tür şeyleri paralelleştirmede çok iyidir
  • GPU için Eksileri

    • Dönüştürülmüş ağlar CPU üzerinde test için kullanılamaz
  • CPU için Artıları

    • Dönüştürülmüş ağlar çarpışma testleri ve ihtiyaç duyulan her şey için kullanılabilir.
  • CPU için Eksileri

    • Dönüştürülmüş tüm kafes her kareyi yüklemeniz gerekiyor
    • Ağın her örneği için bir ağın tamamını yüklemeniz gerekir

Ancak GPU için eksilerini aşmanın yolları vardır.

  • Mesh doğru çarpışmalara sahip olmayın . Tüm ağ için sınırlayıcı bir kutu gibi "yeterince yakın" bir şey kullanın veya ağın her kemiği için sınırlayıcı kutulara sahip olun. Aşağıda, mesh için GPU dönüşümleri ve mesh'i temsil eden eksene hizalanan sınırlama kutuları için CPU dönüşümleri kullanılmaktadır. AABB olmayanları kullanarak daha doğru sınırlar elde edebilirsiniz.

cin kemikleri

  • Mesh'in bir kopyasını CPU'da ancak mesh doğru çarpışmalar gerekiyorsa dönüştürün . Sınırlayıcı bir kutu çarpışması true değerine geri döndükten sonra, bir mesh'i GPU'daki dönüşümlerle eşleşecek şekilde dönüştürün, ardından daha doğru çarpışma verisi elde etmek için çarpışmaları buna karşı kontrol edin.

Hepsi bir arada GPU'da dönüşümün neden daha yaygın olduğunu görebildiğinizi varsayıyorum


1
Sadece meraktan, modern oyunlarda meshlerin karmaşıklığını, modern bir CPU'nun gücünü ve çok çekirdekli yeteneklerini ve bir CPU'nun yapması gereken diğer görevleri dikkate alırken kafeslerin CPU'da dönüştürülmesi gerçekten pratik mi? Ayrıca, GPU'ya yükleme o kadar yavaş mı? Bu fikir yerden kalkmayacak mı?
R4D4

Oyuna bağlı olacaktır, ancak genellikle orta derecede karmaşıklığın üzerindeki oyunlar için pratik değildir. GPU'da dönüşümleri yapmak için bu kadar kolay bir seçim olduğunda, CPU'da dönüşümleri yapmanın ek kaynak gereksinimlerini haklı çıkarmak için bir neden bulmak zor. Sorun, daha hızlı dönüştürülen her kareyi GPU'ya GPU'ya göndermekle ilgili. Yazılımda olduğu gibi, karmaşıklık ve performans arasında karar vermek geliştiriciye bağlıdır.
MichaelHouse
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.