Oyunlarda geometrik LOD'da sanatın durumu nedir?


15

Modern oyunlar, karakterler, arazi ve bitki örtüsü gibi nesne kafesleri için geometri ayrıntı düzeyini nasıl yapar? Sorumun iki kısmı var:

  1. Varlık boru hattı neye benziyor? Sanatçılar daha sonra reddedilen yüksek poli modeli mi yapıyor? Öyleyse, en popüler hangi decimation algoritmaları? LOD ağları bazen elle mi yapılıyor?
  2. Motorlar çalışma anında farklı nesne LOD'ları arasında nasıl geçiş yapar? Sorunsuz veya aşamalı geçişler var mı?

Cevap "farklı stüdyolar farklı teknikler kullanıyor" olabilir. Öyleyse, lütfen en yaygın uygulamalardan bazılarını tanımlayın. Ayrıca, belirli örnekleri kapsayan beyaz sayfalara / slaytlara yönlendirebilirseniz harika olur.


1
SIGGRAPH 2014, gerçek zamanlı renderlemedeki ilerlemeler, duty'nin altbölüm yüzeyleri çağrısı üzerine gerçekten ilginç bir konuşma yaptı. Kontrol etmelisin. Daha düşük poli yapılmış yüksek bir poli örgüye sahip olmak yerine, şekilleri analitik olarak tanımladılar ve gerektiğinde daha fazla üçgen eklediler
Alan Wolfe

Burada LOD algoritmalarında ve veri yapılarında son teknoloji hakkında konuşabiliriz, ancak eğer soru modern oyunların spesifik olarak nasıl yapıldığıyla ilgili ise, gamedev.se'de daha fazla şansınız olabilir: gamedev.stackexchange.com
Pseudonym

3
Bundan şüpheliyim. Game dev çok grafik ışığı. Atılan bazı yol bulma ve sabit kare hızı soruları ile birlik ve java soruları: p
Alan Wolfe

1
@Alan, Activision, izometrik Sprite tabanını değil, gerçek bir 3D stratejik oyun oluşturmak için sanat algoritması çok kullandı, ancak bununla iyiyim, ancak COD'de harika bir iş yaptılar, ancak yine de biraz halsiz ve tembel varlıkların az sayıda olduğu ilk düzeylerde bile (Iphone 5'lerde mobil oyunlarından bahsediyorum). Böyle bir oyunu yazmayı başarmak için OpenGLES uzman özelliklerini ve alttaki katmanları öğrenmeniz gerektiğini düşünüyorum.
Iman

Görevden ayrılma ihtimaline karşı konsol çağrısı görevlerinden bahsediyorum.
Alan Wolfe

Yanıtlar:


23

Geometri LOD için çoğu oyun önceden tanımlanmış bir dizi LOD kafes arasında geçiş yapar. Örneğin, "Infamous: Second Son" 3 LOD kafes ( Adrian Bentley - "inFAMOUS: Second Son motor postmortem", GDC 2014 ) ve "Killzone: Shadow Fall" karakter başına 7 LOD kafes kullanır ( Michal Valient - "Killzone: Shadow fall demo postmortem ", Devstation2013 ). Çoğu üretilir, ancak daha önemli olanlar (ana karakter gibi) el yapımı yapılabilir. Kafesler genellikle popüler bir Simplygon ara katman yazılımı kullanılarak oluşturulur, ancak bazen grafik sanatçıları tarafından en sevdikleri 3D paketinde oluşturulur.

Geniş bir çekme mesafesine sahip oyunlar ayrıca yeşillik, ağaçlar ve yüksek binalar için imposters kullanır ( Adrian Bentley - "inFAMOUS: Second Son motor postmortem", GDC 2014 ). Ayrıca, bir nesne kümesinin yerine bir hiyerarşik LOD kullanırlar. Örneğin "Just Cause 2" de ağaçlar ilk önce normal LOD kafesleri olarak, daha sonra bireysel olarak imposters olarak ve son olarak tek bir birleştirilmiş orman ağı ( Emil Persson, Joel de Vahl - "Devasa Bir Oyun Dünyasının Nüfusu", Siggraph2013 ) ve Dünyanın "Sunset Overdrive" uzak bölümleri otomatik olarak çevrimdışı oluşturulan tek kafes ( Elan Ruskin - "Akış Overdrive'ın Açık Dünyası", GDC2015 ) ile değiştirilir.

LOD sisteminin başka bir bileşeni, malzemelerin ve gölgelendiricilerin basitleştirilmesidir. Örneğin "Killzone: Shadow Fall" uzak LOD'lar için teğet alanı ve normal eşlemeyi devre dışı bırakır ( Michal Valient - "Killzone: Shadow fall demo postmortem", Devstation2013 ). Bu genellikle LOD başına global olarak bir dizi gölgelendirici özelliğini devre dışı bırakarak uygulanır, ancak sanatçıların özel gölgelendiriciler oluşturabileceği gölgelendirici grafiklere sahip motorlar için bunun manuel olarak yapılması gerekir.

LOD geçişleri için bazı oyunlar sadece örgüleri değiştirir ve bazıları pürüzsüz LOD geçişleri için titreme kullanır - LOD anahtarında iki kafes oluşturulur: ilk önce yavaş yavaş kaybolur ve ikinci soluklaşır ( Simon schreibt Blog - "Assassins Creed 3 - LoD Blending" ). Klasik CPU aşamalı mesh teknikleri, maliyetli mesh güncellemesi ve GPU'ya yükleme gerektirdikleri için kullanılmaz. Donanım Mozaikleme birkaç başlıkta kullanılır, ancak yavaş ve genel olarak önceden tanımlanmış geometri LOD'larının yerini alamayacağı için sadece en ayrıntılı LOD'un iyileştirilmesi için kullanılır.

Arazi LOD'ları, spesifik özelliklerinden yararlanmak için ayrı ayrı ele alınır. Arazi geometrisi LOD genellikle klipler kullanılarak gerçekleştirilir ( Marcin Gollent - "REDengine 3'te peyzaj oluşturma ve oluşturma" ). Arazi malzemesi LOD'ları örgü LOD'larına benzer şekilde veya bir çeşit sanal doku Ka Chen - "Far Cry 4'te Uyarlanabilir Sanal Doku Oluşturma" kullanılarak işlenir .

Son olarak, gerçek oyun LOD boru hatlarını görmek istiyorsanız, modern oyun motorlarından herhangi birinin belgelerine göz atın: Unreal Engine 4 - "LOD Oluşturma ve Kullanma" , CryEgnine - Statik LOD ve Unity - LOD .


1
oyun motorları genellikle önceden tanımlanmış yöntemlere sahiptir ve LOD algoritmasını değiştirmek için çekirdeğe giremezsiniz. haklı mıyım OpenGL veya SpriteKit çerçevesiyle kendiniz bir oyun yazdığınız durumdan bahsediyordum, birinin UnOD veya Unreal'da LOD algoritmasını özelleştirip özelleştiremeyeceğini bilmiyorum, mümkün mü?
Iman

3

LOD (Ayrıntı Düzeyi), iki ekran tarafından ayrılabilen farklı ekran ölçeklerindeki nesneleri yönetmek anlamına gelir. Ancak, bunlardan birini kullanabilirsiniz ve çoğu durumda bu yeterli olacaktır.

  1. Büyüklüğe (görüntüleme ölçeği) bağlı olarak katmanları (aynı türden nesne grubu) göster / gizle.

  2. Genelleştirme (çokgenleri basitleştirmek için bir algoritmadır) olarak adlandırılan Cebirsel Geomery tabanlı yöntem. aşağıdaki resme bak

    genelleme

Bir çokgen örgüyü genelleştirmek (basitleştirmek) için en ünlü ve etkili yöntem Descartes-Euler polihedron teoremi olarak bilinir (Denklem 4.5 bir kitaba atıfta bulunursam özür dilerim, yapabileceğim en iyisiydi) ve uzamsal veritabanlarının çoğu tarafından kullanılıyor örneğin PostgreSQL'deki PostGIS modülleri. Bir çokgenin daha küçük kenarlarını kaldırır ve çok yuvarlak bir kenar oluşturur.

Bir oyuna LOD uygulamak için, yakınlaştırma / uzaklaştırma işlemleri sırasında haritanızın (sahne) ölçeğini kaydetmeniz ve yönetmeniz gerekir. Ölçek sıfırdan sonsuza değişir ve bunu belirli bir dizi aralığa bölmeniz gerekir, örneğin şöyle bir şey:

  1. 1 / sıfır = 1/50 ila sonsuz
  2. 1/50 - 1/100
  3. 1/100 - 1/1000
  4. 1/1000 - 1 / sonsuzluk = 0

Ardından, yukarıdaki aralıkların her birinde hangi tür nesnelerin (katmanların) görünür veya görünmez olması gerektiğini tanımlamanız gerekir. Örneğin, hidrant valfi gibi küçük bir nesne türü, kullanıcı dördüncü aralıktayken görünmemelidir, çünkü bu ölçekte çok küçük olacaktır ve ayırt edilemez, bu nedenle ekran.

Bu nedenle, bir kullanıcı büyütmeyi değiştirmek için yakınlaştırma ve uzaklaştırma yöntemini kullandığında yukarıdaki sınırlardan birinden diğer aralığa geçer ve oyununuz sahnede nesneleri göstererek veya gizleyerek ayrıntı düzeyini yönetmek için bu ekran ölçeklerini kullanır. Bu, uzaklaştırma işleminiz sırasında nesnelerin aniden solmasına neden olan ayrı bir çözüm yapar, ancak ekran ölçekleri ve büyütme aralıkları dikkatlice tanımlanmışsa, kullanıcı hiçbir şey hissetmez.

Yukarıdaki 4 aralık grubu sadece bir örnektir ve deneme ve yanılma yoluyla kendi durumunuz için en iyisini bulmanız gerekir. Bunun için bir kural yok.

Bazen oyunlar kendi LOD yöntemlerini kullanırlar, Subway Surfer anlık olarak, bir binayı uzak göstermek için doku dikdörtgeni olmayan küçük bir şey gösterir ve aniden yaklaşarak doku alır, oyuncu bunu hisseder. Çok önemli olan projeksiyon sisteminizden bahsetmediniz, aynı zamanda ne tür bir oyun yarattığınızdan da bahsetmediniz.

Bununla birlikte, openGl ile tam bir 3D oyun uyguladığınızı ve grafik donanıma aktarmadan önce bazı ağları filtrelemek istediğinizi varsayalım, bunun tampon nesneler ve köşe dizileri (VBO, VAO) ile bağlama / bağlama işlemlerini azaltmanıza yardımcı olacağından eminim. OpenGl.

Yalnızca katman yönetimi kullanma veya Euler'in Genelleştirmesini uygulama

Çoğu durumda bir genelleme algoritması uygulamak gerekli değildir ve nesneleri filtrelemek sadece çalışır ve sizi ihtiyacınız olan verimliliğe (yenileme hızı) getirir, ancak tamamen duruma göre değişir. Çokgenin küçük taraflarını kaldıran kolay bir algoritma olmasına rağmen, büyüklüğün ve sabit bir sayının ürünü olan bir eşik tanımlamanız gerekir, böylece daha büyük taraflar daha uzak bir bakış açısıyla filtrelenir.

Katman yönetimini unutmak ve sadece Eulers genelleme algoritmasını uygulamak, her iki tarafı ve çizgiyi önceden tanımlanmış bir eşik değerine göre kontrol ettiğiniz ve sadece ekranda ayrımcılık yapacak kadar büyük olmaları durumunda gösterdiğiniz çok düzgün ve sürekli bir yöntem sağlar.

PS: büyütme, 1 / ölçeğe eşit bir şamandıra numarasıdır ve ölçek genellikle <1'dir, çünkü 1: 1 ölçeği, oyununuzda gerçek dünya uzunluklarına sahip olduğunuz anlamına gelir.


Aşağı seçmen, lütfen tekrar oy vermeyi düşünün, eğer hala -1 ise, bana bir yorum bırakmayı düşünün.Teşekkürler
Iman

Ben aldatmadım ama bir parçam burada sanatın ne olduğunu merak ediyor? Yani ben de oy kullanamam.
joojaa

1
Okumak zor olduğu için IMVO ve oyunlardaki LOD'larla ilgili değil. Yeniden düşündükten sonra, donwote'umu upwoting ile iptal etmeye ve sadece kendi cevabımı eklemeye karar verdim.
Krzysztof Narkowicz

Tekniğin son durumu, çok üstün bir iş anlamına gelir, ancak farklı yöntemler farklı durumlarda farklı sonuç verir, örneğin Call of duty, Layer yönetimi ve mipmaping'e sahiptir, ancak Dear haunting (DH 2014) paralaks ile arka plan ve önceden genelleştirilmiş bir mipmaping kullanır dokular. Subway Surfer tamamen farklı bir hikaye ve Subway Surfer, binaları ve diğer kentsel nesneleri gizlice çekse veya yakınlaştırma veya kaydırma sırasında Call of duty biraz halsiz olmasına rağmen, hepsine en son teknoloji diyorum. Onların durumunda en iyisi olduğunu düşünüyorum.
Iman

3

Iman zaten tam bir cevap hazırladı ama buna bir şeyler eklemek istiyorum

LOD iki farklı şekilde yapılabilir

  1. CLOD adı verilen ve çokgen örgü optimizasyonu olan sürekli
  2. Poligon mesh optimizasyonundan hemen hemen her algoritmanın bu grupta olduğu ayrıktır.

Örneğin mipmap oluşturma, yukarıdaki sekonder gruba ait iyi, hızlı fakat ağır bir yöntemdir.

burada OpenGl ile mipmaping ve uygulama koduna ilişkin iyi bir açıklama bulabilirsiniz.

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.