Donanım mozaikleme nasıl çalışır?


34

Ben sadece birisinin göreceli olarak net bir şekilde DX11 ile yeni bir laflama olduğunu düşünerek donanım mozaiklemenin nasıl çalıştığını açıklamasını istiyorum.

Teşekkürler.

Yanıtlar:


42

Size "basit" bir versiyonunu vereceğim ve ilgileniyorsanız bir başkasının sizi ayrıntılarla doldurmasına izin vereceğim :).

3B nesneleri modellemenin temelde iki yolu vardır. Birincisi, oyunlarda pek görmediğinizdir ve nesnenin şeklini tanımlamak için kesin, matematiksel olarak tanımlanmış eğrileri kullanmayı içerir. Bu metodu kullanarak, detay seviyesi (pratik olarak konuşur) “sonsuzdur”. Örneğin bir silindir alın. Bir silindir çok basit matematiksel terimlerle tanımlanabilir: bilmeniz gereken tek şey uçtaki yarıçap ve silindirin uzunluğu. Geometri açısından, bu bilgiyi silindiri 3B sahnede göstermek için ihtiyacımız olan şey budur. Dahası, silindiri büyütmek veya küçültmek için kolayca ölçeklendirebiliriz; Yapmamız gereken tek şey, uzunluğun yarıçapa oranını korumak. Geometriyi göstermek için aynı formülleri kullanabiliriz, ancak farklı parametrelerle. Bir torus ("donut") temsil edebiliriz. şekli) kolayca da: iç yarıçapı ve dış yarıçapı bilmemiz yeterli Bundan, çörek gövdesinin ("kek") çapını (ve dolayısıyla yarıçapını), iç yarıçapı dış yarıçaptan çıkartarak hesaplayabiliriz. Dairesel gövde, iç yarıçap tarafından tanımlanan yay boyunca sarılır. Bu 3B tanımı oldukça iyidir, çünkü oldukça basittir (küçük bir model dosyasıyla sonuçlanır) ve ayrıntı seviyesi için önemli bir sınır yoktur. Dezavantajı, bugünün video donanımının bu tür modelleri verimli bir şekilde (hiç değilse) işlemek için tasarlanmamış olmasıdır. Dairesel gövde, iç yarıçap tarafından tanımlanan yay boyunca sarılır. Bu 3B tanımı oldukça iyidir, çünkü oldukça basittir (küçük bir model dosyasıyla sonuçlanır) ve ayrıntı seviyesi için önemli bir sınır yoktur. Dezavantajı, bugünün video donanımının bu tür modelleri verimli bir şekilde (hiç değilse) işlemek için tasarlanmamış olmasıdır. Dairesel gövde, iç yarıçap tarafından tanımlanan yay boyunca sarılır. Bu 3B tanımı oldukça iyidir, çünkü oldukça basittir (küçük bir model dosyasıyla sonuçlanır) ve ayrıntı seviyesi için önemli bir sınır yoktur. Dezavantajı, bugünün video donanımının bu tür modelleri verimli bir şekilde (hiç değilse) işlemek için tasarlanmamış olmasıdır.

Diğer yol ise, temsil etmek istediğimiz şekle yaklaşmak için basit geometriyi birleştirmektir. Bunu mozaikleme adı verilen bir işlemle yapıyoruz . Biz olabilir ile mozaik iki daire ve uzun dikdörtgen bir dizi, dış kenar etrafında sarma daha fazla ilkel şekiller içine parçalayarak bir silindir. Daireler, kenar boyunca dikdörtgenler gibi birçok küçük üçgene bölünebilir. Sonuçta sadece üçgenlerden oluşan bir model var :

Üçgen Silindir resmi

Veya, torus için:

Üçgen şeklinde Torus görüntüsü

İyi haber şu ki, video donanımı bu tür bir geometriye dayanacak şekilde optimize edildi. Günümüzün GPU'ları her saniye tonlarca ve üçgeni parçalamakta zorluk çekmiyor. Ancak, bariz bir sorun var: düz kenarlı şekiller kullanarak kavisli yüzeyleri temsil etmeye çalışıyoruz. Bizim silindir için Amacıyla bakmak bir silindir (küp aksine) gibi, bir içine yıkmak isteyen çokKüçük üçgenler Kaç tane istiyoruz peki? Değişir. Sahneyi oluşturmak için ne tür donanımlar kullanılacak? Daha hızlı donanım, üçgenleri yavaş donanımdan daha hızlı hale getirerek daha hızlı kare hızları üretebilir. Sahnede kaç tane nesne olacağı ve ne kadar karmaşık olacağı gibi göz önünde bulundurulması gereken başka faktörler de var. Oyunlarda, belirli bir sahnede genellikle çok fazla nesne vardır. Ayrıca, nesneler, her biri farklı görsel karmaşıklık seviyelerine sahip farklı sahneler arasında dolaşabilir. Modellerimizi mozaikleştirirken kullanacağınız detay seviyesini bulmak zor .

Diğer bir problem ise geometrik karmaşıklıktır: bir silindirin eğri temelli bir tanımı çok basittir (yarıçap ve uzunluk), mozaikli bir tanım her birinin bağımsız olarak tanımlanması gereken yüzlerce üçgeni birleştirir. Sonuç olarak, mozaik model dosyamız çok daha büyük olacaktır. Diyelim ki bir insan gibi matematiksel olarak tanımlanmış karmaşık bir şey modelimiz var. Model dosyamız sadece 24kb boyutunda olabilir. Peki, bu model mozaik haline getirildiğinde, ortaya çıkan dosya 24 MB (24,000kb) olabilir. Bu oldukça fark var.

Donanım mozaikleme, donanım destekli mozaikleme işlemini gerçek zamanlı olarak (veya neredeyse gerçek zamanlı olarak) gerçekleştirmek için geometri gölgelendiricilerinden yararlanır . Temel olarak, matematiksel olarak tanımlanmış bir 3D modelini almak ve video kartının verimli bir şekilde oluşturabileceği mozaik biçimli bir formata dönüştürmek için bir mekanizma sağlar. Geleneksel olarak, oyun geliştiricileri stüdyoda mozaikleme yaptılar ve mozaikli modelleri oyunla birlikte gönderdiler. Donanım mozaikleme, oyun aslında oyuncunun bilgisayarında çalışana kadar bu işlemi ertelememizi sağlar . Bunun bazı ciddi faydaları var:

  1. Oyunun 3D içeriğinin boyutu önemli ölçüde azalır (daha az sayıda disk veya daha az indirme ve daha az sabit disk alanı gerekir).

  2. Detay seviyesini gerçek zamanlı olarak kontrol edebiliriz . Bir oyun makinesinin en son canavarıyla mı çalışıyoruz? Öyleyse, çok yüksek bir ayrıntı düzeyi kullanarak mozaik oluşturabiliriz. Entegre grafiklere sahip eski bir dizüstü bilgisayarda mı çalışıyoruz? Sorun değil; Performansı artırmak için ayrıntı düzeyini basitçe azaltabiliriz.

Demek bunun özü bu. 3D programcı olmadığım için muhtemelen% 100 doğru değil, ancak bu size tüm telaşın ne olduğu hakkında daha iyi bir fikir vermeli :).

Şerefe,
Mike


Vay ... parlak! En uzun 'genel bakış' Ben şimdiye kadar okudum: P

6
Gereken mozaikleme seviyesini belirleyen bir başka şey daha var - ekrandaki nesnenin boyutu. Çalışma zamanı mozaikleme, her nesnenin birden fazla versiyonunu oluşturmadan her yerde doğru seviyede ayrıntıya sahip olmanızı sağlar.
Adam,

Bu biraz CPU ağır mı?
jcora

@Bane, yoğun GPU mu demek istediniz? CPU daha az önemseyebilirdi.
Nate Zaugg

0

Ne yazık ki, çoğu geliştiricinin şimdi veya yakın gelecekte mozaikleme yöntemlerini kullandığı yöntem bu değil. Şu an için tess kullandıkları tek şey, yükseklik haritasına göre çoğunlukla düz yüzeyleri yerinden çıkarmak. Bu aynı zamanda iyi bir görünüme neden olur, ancak yine de çok daha yetenekli bir teknolojinin kullanımının zayıf olduğunu düşünüyorum.


Araçlar ve üretim boru hatları yeniden düşünülmeli ve yeniden inşa edilmelidir (çoğu kişiden daha iyi bildiğinizden emin olduğumdan, @ SamHocevar, bu nedenle bu yorum size yönelik değildir) ve yeni donanımın önemli oranda artması gerekiyor.
Rob Craig

@RobCraig Bu yorumda sadece yazımı düzelttiğime dikkat edin; Ben asıl yazar değilim.
sam hocevar

@ SamHocevar Yup, düşündüm - açıklığa kavuşturduğun için teşekkürler!
Rob Craig,
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.