“Parçalanmış ayrıntı düzeyini” anlama


17

Kısa bir süre önce, Birlik'te parçalanmış bir ayrıntı sistemi uygulamasını anlamaya çalışmak. Her biri yükseklik haritasına sahip dört kafes düzlem üreteceğim ama sanırım şu anda çok önemli değil. Bu tekniği okuduktan sonra birçok sorum var, umarım bu bir seferde sormak için çok fazla değildir, ancak birisinin bu tekniği anlamama yardımcı olması için çok minnettar olurum.

1 : Chunked LOD boru hattının hangi noktasında örgünün parçalara ayrıldığını anlayamıyorum . Bu, ilk ağ oluşturma sırasında mı yoksa bunu yapan ayrı bir algoritma var mı?

2 : Chunked LOD verilerini saklamak için bir Quadtree veri yapısının kullanıldığını anlıyorum, sanırım noktayı biraz özlüyorum, ancak quadtree her alt bölüm seviyesi için köşe ve üçgen verilerini saklıyor mu?

3a : Kamera mesafesi genellikle nasıl hesaplanır. Quadree'leri okurken Eksen hizalı sınırlayıcı kutulardan çok bahsedilir. Bu durumda, her bir yığının kamerayı veya oyuncunun yakında olduğunu algılamak için bir çarpışma sınırlayıcı kutusu olur mu? ya da bunu yapmanın daha iyi bir yolu var mı? (raycast belki?)

3b : Parçalar kamera mesafesini kendileri hesaplıyor mu?

4 : Her yığın aynı "çözünürlüğe" sahip mi? örneğin üst seviyede ağ 32x32, alt bölümlere ayrılmış düğümler de 32x32 olacaktır. Aşağıdaki örnek:

parçalanmış LOD örneği


Herhangi biri prosedürel bir gezegen için daha iyi bir LOD yaklaşımı biliyorsa, bu da ilginç olacaktır.
Caius Eugene

Thatcher Ulrich'in orijinal SIGGRAPH belgesine ve ilgili programına daha önce baktığınızı düşünüyorum. tulrich.com/geekstuff/chunklod.html
drxzcl

Bir noktaya kadar çok bilgilendirici oldum, ancak ayrıntı türüne veya uygulamaya yaklaşımlara girmiyor. Teşekkür ederim
Caius Eugene

1
Burada gezegensel LOD için bir dizi seçenek var; vterrain.org/LOD/spherical.html
OriginalDaemon

Yanıtlar:


12

1: Chunked LOD boru hattının hangi noktasında örgünün parçalara ayrıldığını anlayamıyorum. Bu, ilk mesh oluşturma sırasında mı yoksa bunu yapan ayrı bir algoritma var mı?

Sorun değil. Örneğin, parçaları ağ oluşturma algoritmanıza entegre edebilirsiniz. Plazma benzeri bir arıtma algoritması kullanarak daha düşük seviyelerin dinamik olarak (örn. Oynatıcı yaklaştıkça) eklenmesi için bunu dinamik olarak bile yapabilirsiniz. Ayrıca sanatçı giriş veya yükseklik ölçüm verilerinden yüksek çözünürlüklü bir kafes oluşturabilir ve bunu varlık sonlandırma zamanında tüm LOD parçalarına toplayabilirsiniz. Veya karıştırıp eşleştirebilirsiniz. Bu gerçekten uygulamanıza bağlıdır.

2: Chunked LOD verilerini saklamak için bir Quadtree veri yapısının kullanıldığını anlıyorum, sanırım noktayı biraz özlüyorum, ancak quadtree her alt bölüm seviyesi için köşe ve üçgen verilerini saklıyor mu?

Şart değil. Ağaç sadece geometri ve nasıl oluşturulacağı hakkında bilgi depolar. Bu, her ağaç düğümünde bir tepe / yüz listesine sahip olmak anlamına gelebilir. Daha gerçekçi bir şekilde bu gün ve yaşta, kafeslerin / örneklerin tutamaçlarını GPU belleğinde saklarsınız.

3a: Kamera mesafesi genellikle nasıl hesaplanır. Quadree'leri okurken Eksen hizalı sınırlama kutularından çok bahsedilir. Bu durumda, her bir yığının kamerayı veya oyuncunun yakında olduğunu algılamak için bir çarpışma sınırlayıcı kutusu olur mu? ya da bunu yapmanın daha iyi bir yolu var mı? (raycast belki?)

Çok ucuz ve kolay bir seçenek, parçanın merkez noktasına olan mesafeyi kullanmak ve daha sonra düzeltmektir. Bu mesafenin her zaman bir hafife alındığını biliyorsunuzdur: eğer merkez nokta uzaktaysa Z, bu, parçanın yarısının bundan daha yakın olduğu anlamına gelir. Ancak bilmediğimiz yönelim. wKenar genişliğinde bir yığın görüntülüyorsak, yığının en yakın biti mesafe olacakZ-w . Bununla birlikte, önce yığın köşesini görüntülersek, en yakın bit uzaktadır Z-sqrt(2)*w. Bu belirsizlikle yaşayabiliyorsanız (neredeyse her zaman yapabilirsiniz), işiniz bitti demektir. Temel trigonometri kullanarak görüntüleme açısını da düzeltebileceğinizi unutmayın.

Artefaktları en aza indirmek için kameradan parçaya olan mutlak minimum mesafeyi hesaplamayı tercih ederim. Pratikte, bu nokta-kare mesafe testi yapmak demektir . Merkez noktalara olan mesafeleri hesaplamaktan biraz daha fazla iş, ama her kareden bir milyonunu yapacağınız gibi değil.

Bunu yapmak için fizik motorunuzdan yararlanabiliyorsanız, elbette bunu yapın, ancak gerçekten "çarpışma" dan "mesafe sorgusu" açısından daha çok düşünmek istersiniz.

3b: Parçalar kamera mesafesini kendileri hesaplıyor mu?

Gerçekten motorunuzun tasarımına bağlıdır. Yine de yaprakları nispeten hafif tutmanızı tavsiye ederim. Platformunuza bağlı olarak, sadece birkaç bin arazi parçasının kendi güncellemelerini gerçekleştirmesi için çağrı yükü her kareyi performansı ciddi şekilde etkileyebilir.

4: Her yığın aynı "çözünürlüğe" sahip mi? örneğin üst seviyede ağ 32x32, alt bölümlere ayrılmış düğümler de 32x32 olacaktır.

Yapmak zorunda değiller, ancak tüm parçalar aynı miktarda yer kaplarsa uygundur. Ardından (GPU) bellek yönetiminizi "yığınlar" birimlerinde yapabilirsiniz. Bir çözünürlük diğerinin katlarıysa, daha fazla köşeyi paylaştıkları için farklı boyutlardaki iki parça arasındaki dikişleri çıkarmak / gizlemek de daha kolaydır. (örneğin: 32x32 ve 64x64'ün yönetimi 32x32 ve 57x57'den daha kolaydır) (teşekkürler Guiber!). Öbek geometri boyutunu değiştirmek için iyi bir nedeniniz varsa, elbette bunun için gidin.


2
Bir çözünürlük diğerinin katlarıysa, daha fazla köşeyi paylaştıkları için farklı boyutlardaki iki parça arasındaki dikişleri çıkarmak / gizlemek de daha kolaydır. (örneğin: 32x32 ve
64x64'ün

Parlak cevap, Bir çok şey temizlendi. Özellikle, uygulamanın büyük bir kısmı motorun yeteneklerini dikkate almakla ilgilidir. İle 3a Hala ne zaman gibi emin olduğum yangın bir mesafe sorgusu, ben ses işlemci ağır olarak kabul ettik iki uygulamaları, bu konuda biraz daha araştırma yapacağız. Teşekkür ederim
Caius Eugene

1
@CaiusEugene: Sanırım mesafe belirlemenizi aşırı düşünüyorsunuz. 3a noktasındaki cevaba başlamanızı sağlayacak çok ucuz, çok temel bir algoritma ekledim.
drxzcl
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.