Oyunlar için Space Partitioning'deki son teknoloji nedir? [kapalı]


18

BSP ağaçları, Octrees ve Portal'ı uzun zamandır kullandığım yeri biliyorum. Ama modern oyunlar hala bu sistemleri kullanıyorlar mı yoksa yeni şeyler mi kullanıyorlar?

Artıları ve eksileri ile mümkünse, oluşturma ve çarpışma algılamayı düşünün.


Tam bir cevap gerektirmez, ancak mekansal karma ya yeni bir fikir gibi görünür; ya da lehine düştü. Her şey için değil ama büyük bir üst tarafı, uygulaması kolay kir olmasıdır.
Jonathan Dickinson

Yanıtlar:


15

Evet, örneğin Unreal motor 3 hala bir BSP kullanmaktadır - çünkü esas olarak CSG işlemi sırasında kullanılmaktadır. Doom3 / id tech 4 portalları kullanıyor ve bence Tech 5'in BSP ağaçlarına geri döndüğü bir şey okudum. Oktrees kullanan bazı oyunlar da var. Oyunda, benim anlayışım UE3'ün oklüzyon sorguları ile daha dinamik bir yaklaşıma geçtiğidir, ancak BSP'yi en azından hangi statik kafeslerin görünürde olduğunu belirlemek için kullanmazlarsa şaşırırdım. Diğer oyunlar sadece view-frustum culling'i kullanabilir (örneğin Uygarlık). Gerçekten ne tür bir oyun gördüğünüze bağlıdır.

BSP'lerin ve diğer şeylerin hala etrafta olmasının nedeni, daha iyisini yapamamanızdır. Statik geometriniz varsa, doğru yapılandırırsanız BSP mükemmeldir. Yine de zor bir BSP oluşturucu yazmanızı gerektirir (ancak CSG çözümünüz bir tane kullanıyorsa ücretsiz olabilir!) Octrees ve daha dinamik çözümler (her şey için tıkanıklık sorgularına güvenmek gibi) uygulanması daha kolaydır, daha yüksek çalışma süresine sahiptir maliyet, ancak seviyelerin (pahalı) ön işlem gerektirmez. Bu, bazı oyunların yapmaya istekli olduğu bir değiş tokuş (örneğin Crytek, her şeyin gerçek zamanlı olarak çalışmasını istiyor, bu nedenle statik bir hızlandırma yapısı oluşturmak için işlem süresi harcamıyorlar.) Diğer çalışma zamanı yaklaşımları, örneğin yazılım rasterleştirmesidir. CPU ve CPU üzerinde tıkanıklık sorguları gerçekleştirme (bu Frostbite motoru tarafından kullanılır.)

Gerçekten modern bir yaklaşım için Umbra'ya bakın görünürlük sorguları için bir ara yazılımdır. Web'de biraz arama yaparsanız, Umbra'nın erken başlangıcını tanımlayan bazı yüksek lisans tezlerini bulmalısınız.

Alt satır: Bir BSP / Octree / no AS kullanmak isteyip istemediğiniz, büyük ölçüde oluşturmak istediğiniz oyun türüne bağlı olacaktır. Seviyeleriniz çoğunlukla statikse, bundan yararlanmalı ve bazı statik hızlanma yapısı oluşturmalısınız. Her şey dinamikse, elbette başka bir yaklaşıma ihtiyacınız var.

Çarpışma tespiti için, Bullet ve PhysX ve bunların çarpışma tespit algoritmalarına bir göz atacağım. Ama benim düşüncem, fizik çözümlerinin görünürlükle eskisinden daha az bağlı olduğudur - bir fizik çözümü GPU tabanlı bir BVH kullanmak isteyebilir, bu durumda görünürlük sorguları için bunu kullanmaya çalışmanın pek bir anlamı yoktur.


15

Dürüst olmak gerekirse, bu günlerde yeni nesil motorların ne kullandığını bilmiyorum, ama size ne bildiğimi anlatacağım. Bir optimizasyon ile bu optimizasyona yardımcı olmak için kullanılan veri yapısı arasında kafa karıştırmak kolaydır. Aşağıda belirtilenlerin hepsi optimizasyonlar içindir, ancak hangilerinin özellikle veri yapıları olduğuna dikkat çekeceğim.

BSP : Veri Yapısı - Dinamik hareketli nesneler ile statik dünya geometrisi arasındaki kesişmeyi tespit etmek için. Bir zbuffer olmadan hem çarpışma tespiti hem de geometrinin doğru bir şekilde oluşturulması için kullanılır, ancak artık günlerde az tampon için yeterli belleğe sahip olduğumuzdan artık oluşturma için kullanılmamaktadır. Teknik olarak biraz farklı üretilirler, ancak yine de aynı ağaç türü olarak kabul edilirler. Ön işleme gerektirir.

Octree veya Kd-Tree : Veri Yapısı - tüm dinamik nesnelerde n ^ 2 denetimi yapmamak için aynı "hücre" veya alanda hangi nesnelerin bulunduğunu belirlemek için kullanılır.

Bunlar sadece bunlar değil, muhtemelen en yaygın olanlarıdır. Motorun genel olarak geometri oluşturmasını önlemek için birçok optimizasyon da vardır. Ancak aşağıdakiler sadece geometriyi çıkarır ve genellikle hepsi için kullanılır:

Portallar : Teknik olarak bir veri yapısı değildir, ancak itlaf için özel bir yapı gerektirir. Dünya geometrisinin ve dinamik nesne geometrisinin görünürlükten kaldırılması için kullanılır. Dünyayı bence alanlara ayırmak için önişlem gerektirir. Ama ben bunu gerçekten uygulamadım, bu yüzden bilmiyorum.

Oklüzyon ayıklama : Optimizasyon - istediğiniz dinamik görünürlük ayıklaması için kullanılır, muhtemelen dinamik nesneler.

Normal Görünüm alanı kaldırma : Optimizasyon - kameranın görünümünde olmayan nesneleri çıkartır.

Daha fazla viewport culling : Optimizasyon - Düzenli viewport culling bir oktree kullanılarak daha da optimize edilebilir. Kameranın arkasındaki veya görüşünde olmayan tüm hücrelerini çıkarabilirsiniz. Buna arazi yamaları da dahildir (dışarıdaysanız). Oktree tarafından kaldırılmayan ne olursa olsun, "normal görüntü alanı ayıklaması" gerçekleştirirsiniz. Sonra, geriye ne kalırsa, render edersiniz.

Arka yüz kaldırma : Optimizasyon - rasterleştirmeyi önlemek için geometriyi kameradan uzağa doğru çeker . Oluşturma durumu doğru ayarlanmışsa genellikle donanımda yapılır.

Özel vaka veri yapıları:

AABB ağaçları veya Küre ağaçları : Bunlar özel durum veri yapılarıdır. İçbükey bir şekli dışbükey bir şekle dönüştürürler. Örneğin kemikli bir karakter teknik olarak içbükeydir. Daha küçük dışbükey parçalara ayırır. Çarpışma algılama, dinamik nesnelerin görünürlük kaldırma (genellikle) için bir optimizasyon olarak kullanılabilir ve konveks olduğu için kavşak testlerinin yapılmasını kolaylaştırır. Bunlar genellikle dinamik nesneler oldukları için bir oktree içine girer. Bunlar oklüzyon ayırma optimizasyonuna yardımcı olmak için de kullanılabilir.

Her şeyi (sahne grafiği gibi) temsil etmek için tek bir yapı kullanmanızın bir nedeni yoktur. Bana göre, bir tür genel amaçlı ağaç kullanmaya çalışmak yerine farklı görevler için farklı veri yapıları kullanmak daha iyi olur. Örneğin, şu anda üzerinde çalıştığım motor, şu optimizasyonlarla bir BSP / Octree / AABB Ağacı kombinasyonu uygulamayı planlıyorum: oklüzyon önleme, görünüm alanı ve elbette arka yüz önleme. Bu demektir ki bir bsp ağacı, bir oktree ve muhtemelen o oktree içinde birden fazla aabb ağacı olacak.

En iyi veri yapılarının ve algoritmaların / optimizasyonların seçimi muhtemelen motorunuz için yapabileceğiniz en büyük ve en faydalı şeydir.

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.