2011-10-12 25 views
5

Kısa bir süre önce voxel motoru geliştirmeye başladım. İhtiyacım olan tek şey dokusuz renkli vokseller, ama çok büyük miktarda (minecrafttan çok daha küçük) - ve soru sahnenin çok hızlı nasıl çizileceğidir? Ben C#/xna kullanıyorum ama bu durumda bence bu çok önemli değil, genel durumlar hakkında konuşalım. Bu iki oyun bak:Voxel Motor ve Optimizasyon

  1. http://www.youtube.com/watch?v=EKdRri5jSMs
  2. http://www.youtube.com/watch?v=in0bavLJ8KQ

Özellikle video sayısı 2 harika optimizasyon yöntemleri temsil düşünüyorum (benim gfx kartı boğulma başlar x 192 x 64 sadece 192) onlar başarmak nasıl bu?

isterim Ne motorda olması:

  • birçok, birçok vokseller doku olmadan

    • renkli vokseller ama gölgeli, 512 x 512 x 128 görüntü 2. gibi bir şey elde etmek asgari demek
    • gölgeler (yumuşak gölgeler büyük olacak ama bu gerekli değildir)
    • opsiyonel:
    • (voksel yapıların yakınında yanar uçan ateş topları, örneğin) dinamik aydınlatma
    • kare hızı en az 40 FPS
    • kamera 3 serbestlik yolu (x-ekseninde hareket, z-ekseninde hareket, y-ekseninde hareket), bir kamera dönme
    • son olarak isteğe bağlı bir özelliktir derinliği olabilir gereklidir sahip Saha

zaten biliyoruz gelmiş ne optimizasyonu (o ^^ tatlı edilecektir): ( fr kaplı

  • voksel yapının içinde bulunduğu görünmeyen vokseller kaldırmak Diğer voksel om altı yön)
    • voksellerin görünmeyen yüzlerini kaldırmak - Kamera hiçbir rotasyon var ve her zaman DYP oyunlarda gibi öne meyilli bakmak, o yüzden de dikey kesim tarafından ekrana bölersek, sol vokseller ve sağ vokseller gösterecektir sadece 3 yüz
    • 3 boyutlu dizi yerine Sözlük'te voxels'i koruyun - 512 x 512 x 128 boyutunda dizi atlamak, kabul edilemez bir şekilde milisaniye alır - ancak sözlük int: int, paketlenmiş 3D konumunun tanımlandığı renk çok daha hızlıdır
    • instacing kullanımı uygulanabilir olan
    • tıkalı mı? (Bu iyi bir fikir mi?)
    • uzay bölme/octtree (? Bunun nasıl) birisi optimizasyonlar üstünde veya listelenen mevcut nasıl iyileştirileceğini bir tipi uca bana verirsen

çok müteşekkir olacağım yeni gelişmelerin fikirlerini paylaşabilir. Teşekkürler

+2

Her iki videoda, döndürmeyi desteklemeyen motorlar bulunduğunu unutmayın. Ayrıca, ikinci video muhtemelen voxel nesneleri yerine odak dışı nesneler için reklam panoları kullanıyor. – Skizz

cevap

8

1) Voxatron, GPU yerine bir yazılım oluşturucu kullanır.Bu blog yayınında yorumları okumak eğer bu konuda bazı detayları okuyabilirsiniz: Ben ayrıntılı olarak bakmadım

http://www.lexaloffle.com/bbs/?tid=201

kendim yüzden size bundan çok daha fazla söyleyemem.

2) Hiç 3D Dot Oyunu Kahramanları oynamayı seçmedim, ancak hiç bir zaman voksel kullanmanın bir sebebi yok. Yani, eklenen veya silinen küpler göremiyorum. Büyük olasılıkla, uygulanan güzel bir dokuya sahip statik bir poligon ağıdır.

Kendiniz uygulamak için, çok yavaş olduğu için dünyayı küp çizerek çizmeye çalışmayın. Bunun yerine hacmi işlemek ve katı voksellerin ve boş olanların kesişiminde uzanan ağ kafesleri oluşturmalısınız. Hacmi uygun büyüklükteki bölgelere (örn. 32x32x32) böler ve her biri için bir ağ oluşturur.

Bunun hakkında yararlı bulabileceğiniz bir kitap makalesi yazdım. Aslında pürüzsüz voksel terain ile ilgili ama çok sayıda uygulamamız geçerlidir. http://books.google.com/books?id=WNfD2u8nIlIC&lpg=PR1&dq=game%20engine%20gems&pg=PA39#v=onepage&q&f=false

Ve burada ilişkili kaynak kodunu bulabilirsiniz:

Burada Google kitaplara okuyabilirsiniz Eğer XNA kullandığınıza göre, sadece istenen etkiyi elde etmek için örneklemesini kullanabilirsiniz http://www.thermite3d.org

2

: http://www.float4x4.net/index.php/2010/06/hardware-instancing-in-xna/ http://roecode.wordpress.com/2008/03/17/xna-framework-gameengine-development-part-19-hardware-instancing-pc-only/

yatan kavram örneklilik edilir: Bu özelliği yinelenen veri miktarını ve bazı va miktarını belirtmenize izin verir Tek bir DrawIndexedPrimitive aramasında veri toplamak. Durumunuzda, örnek akışı tek bir katı kutu olacaktır ve diğer akış dönüşüm ve renk bilgisi olacaktır.