Ayrı İş Parçasındaki Sahne Grafiği


12

Eğlenmek için kendi oyun motorumu geliştiriyorum (ancak kar değil). Ben bir iş parçacığında render ve benim başka bir sahne grafik güncellemeleri (hız, vb.) Var. Oluşturma zamanı geldiğinde, oluşturma iş parçacığı görünür düğümleri yeni bir doğrusal arabelleğe ekler ve bunları geçer.

Daha ayrıntılı olarak, sahne grafiğim üç arabelleğe alınmış. Sahne grafiğimdeki her düğüm, göreceli ve mutlak dönüşüm matrislerinin üç kopyasına sahiptir (4x4). Herhangi bir zamanda, bir kopya sahne grafiği iş parçacığı tarafından yazılır, bir kopya oluşturucu tarafından okunur ve üçüncüsü okuyucu veya yazarın diğerini beklemeden diğerine geçebilmesi için bulunur. Bu, işlenirken bir şeye yazmayı ve yarı güncellenmiş bir sahne grafiği oluşturmayı önler. Her nasılsa kullanıcının güncelleme iş parçacığı ile çakışmayacak şekilde çalışması için her matrisin dördüncü bir kopyasını aldım. Bu, her zaman senkronize olmaktan kaçınarak iyi performans gösterir.

Ancak, bu bir karmaşa.

Bunlar benim sistem için nihai hedeflerim:

  • Görüntü oluşturma ve sahne grafiği güncellemesi ayrı başlıklarda kalır.
  • Bu iş parçacıklarının birbirlerini ne kadar beklemeleri gerektiğini en aza indirin.
  • Güncelleme iş parçacığı tarafından yarı güncellenen bir sahne oluşturmayın. Bu özellikle fotoğraf makinesi hızlı hareket ediyorsa ve bazen de güncelleme öncesinde veya sonrasında görüntüleniyorsa fark edilir.
  • Azaltılmış bellek kullanımı. Düğüm başına çok fazla matrisim var. Ayrıca matrisler ile kayan nokta kayması nedeniyle pozisyon / rotasyon / ölçek için vektörlere geçmeyi düşünüyorum.
  • On binlerce Düğüm ile başa çıkabilme. Mevcut sistem bunu oldukça iyi yapıyor.

Ayrıca, bullet (fizik motoru) ve ağ oluşturmayı da dahil etmeyi umuyorum.

Daha iyi bir sahne grafiği elde etmek için bazı yaklaşımlar nelerdir?

Yanıtlar:


4

Johannes Spohr'un "Pace" ve onun oluşturucusu üzerine tezini okudunuz mu? "Gönderim motoru" * paralel oluşturucuyu tanımlar ve size bazı fikirler verebilir.

İşte (Almanca) özet sayfası ve burada İngilizce olarak PDF doğrudan bağlantıdır.

( *: Bu bağlantı aynı zamanda tez hakkında ilk duyduğum makaleye de gider.)

EDIT: Ben sadece daha önce yağsız, ve ben sadece tekrar baktım ... ve gerçekten sahne grafik detayları üzerinde parlak olduğunu fark ettim. Sanırım tasarımının ne kadar dik olduğunu fark etmedim. Özellikle yararlı değilse özür dilerim.


1
Bu makalenin bir parçası hala bana yapıştı: "İdeal olarak, uygulama bir sahne grafiği olduğunu bile bilmeyecektir, sadece veri modelindeki değişiklikleri bildirmesi gereken bir görünüm bileşeninin farkında olmalıdır". Bu benim için yeni bir düşünce tarzına ilham verdi: Tüm sahneyi üçe katlamak zorunda değilim, sadece mevcut kamerada görünenleri. Culling'i render iş parçacığından sahne grafiği iş parçacığına taşıyabilirim (bir kamerayla karşılaştığında) ve herhangi bir zamanda, bu üç tampondan biri yazılabilir ve diğeri oluşturucu tarafından okunabilir.
EricP

1
Game Engine Gems 1'deki "Çok İş parçacıklı Oluşturma için Kamera Merkezli Motor Tasarımı" ve ilgili "DirectX 9 ve DirectX 10 ile Pratik Paralel İşleme" makalesine de
bakabilirsiniz

1
Görünüşe göre Game Engine Gems 1 ücretsiz olarak edinilebilir: books.google.com/…
EricP
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.