Bu, kullandığınız uzamsal altbölüm yöntemine bağlıdır, ancak tüm altbölüm yöntemleri (herhangi bir sıkıştırma yöntemi gibi), veri yapısı ek yükleri ve diğer mantıksal / matematiksel faktörler nedeniyle nihayetinde daha fazla sıkıştırmanın yapılamayacağı yerde kaybolur. Oktrees'te bir örnek bulunabilir. Oktree'deki her bir düğüm için, anlamlı geçişi etkinleştirmek için üst ve / veya alt öğelerine (veri yapısı mimarinize nasıl gittiğinize bağlı olarak) bir işaretçi konulmalıdır. Herhangi bir ağaç yapısı n çocuk içerebilir. 1: n oranı ne kadar düşük olursa, kazanacağınız alan o kadar verimli kullanılır ve sonuç olarak aynı sayıda yaprak vokselini içerecek daha fazla ata düğümünüz olması gerektiğinden (ağaçta kabaca 510 trilyon) daha fazla ata düğümünüz olması gerekir. bunlardan yüzey alanını temsil eder).
Sizin örneğinizde birincil sorunların depolama maliyeti olduğu ve tüm gezegeni (veya bunların parçalarını) adil bir mesafeden oluşturduğu göz önüne alındığında, bir oktree üzerinde önereceğim veri yapısı yoktur. Mipmap oluşturma bir zorunluluktur: 2'ye en yakın yüksek güçte 12,8 milyon metre çap 2 ^ 24 = 16,8 milyon'dur. Geçiş yapmak için 24 oktree seviyesi, GPU'lar ve CPU'lar için çok maliyetli olan çok büyük bir dallanma anlamına gelecektir. Ancak işleri doğru bir şekilde yapmanız koşuluyla, bir seferde sadece birkaç seviye geçmeniz gerekecek. Bununla birlikte, gerekli alan miktarı göz önüne alındığında, alternatifler az ve çok uzaktadır (aşağıya bakınız).
Oktrees'in mipmapleme yetenekleri, onu tarif ettiğiniz gibi büyük hacimler için inanılmaz derecede güçlü bir araç yapan şeydir. Bilinen diğer tüm alt bölüm yöntemlerinden farklı olarak (KD ağaçları hariç), oktree alt bölümleri her seviye için minimum tutar, yani mipmap seviyeleri arasındaki görsel ve fiziksel farklar da minimum düzeyde tutulur, yani yürürken ve ağacın aşağı.
Öte yandan, hiyerarşik ızgara geçişinin minimumda tutulduğu bir dünya oluşturmak istiyorsanız, hızı artırmak için alandan işlem yapmanız gerekecektir.
İdeal 1: n oranından bahsetmişken, bu açıdan kd ağacından daha ince bir yapı yoktur. Oktree'nin her eksen için 2'ye bölünmesi ve 2 ^ 3 = 8 ayrı alt hücre ile sonuçlanması durumunda, kd ağacı her alt bölüm düzeyinde tam olarak bir kez bölünür. Bununla ilgili sorun, bölmek için bir hiper düzlem seçmeniz ve bu hiper düzlemin 3 eksenden herhangi biri etrafında seçilebilmesidir. Uzay açısından en uygun olmasına rağmen, dinamik bir portal tipi yapının kayıt tutulması gerektiğinden, 3D geçişleri (fizik için oktrees kullanırken veya render yaparken temel bir op olan raymarches sırasında olduğu gibi) çok daha zor hale getirir. bireysel kd-ağacı düğümleri arasındaki arayüzler .
RLE, sıkıştırmaya başka bir yaklaşımdır, ancak RLE sıkıştırması bir boyutlu olduğundan ve içinde çalıştığı ekseni seçmeniz gerektiğinden, bu tür bir soruna (işlemlerin tabanının küresel olduğu) uygulamak birçok yönden daha zordur. gezegen, kutup eksenini seçebilir, ancak herhangi bir tek eksenli seçim, belirli optimal olmayan açılardan hareket ederken render ve fizik için traversallerle ilgili belirli sorunları ortaya çıkaracaktır. Elbette, RLE'yi aynı anda 3 eksende, depolama maliyetini üçe katlayabilir veya daha fazla optimizasyon olarak 6 eksende (-x, + x, -y, + y, -z, + z) çalıştırabilirsiniz.
Sorunuzu cevaplamak (ya da değil!)
Doğrudan ne tür bir donanıma cevap vermeyeceğim, ama bence ona bir oktree perspektifinden bakmak, aslında ne tür bir donanımda neyin mümkün olduğuna dair bir fikir vermeye başlıyor . Sizi bu rotadan aşağı indirmeye teşvik ediyorum, eğer gerçekten bilmek istiyorsanız, aslında basit bir seyrek oktree uygulamak en kolay olabilir(referanslardaki Laine'nin makalesine bakın) ve içine küresel bir yüzey voksel kabuğu yerleştirin ve sonuçta alan kullanımının nasıl olduğunu görün. Oradan çıkın. Sistem belleğiniz vermeye başlamadan önce ne kadar uzağa gidebileceğinizi görün. Bu, görselleştirme istemediğiniz sürece bir oluşturucu yazmanızı gerektirmez. Ayrıca bunun en iyi CPU üzerinde yapıldığını unutmayın - GPU'lar büyük ölçüde bu ölçeğin sorunları ile başa çıkmak için bellek kapasitesine sahip değildir. Bu, Intel'in büyük ölçüde paralel işlemcilere doğru ilerlemesinin nedenlerinden biridir: Bu tür bir şeyde daha iyi olan GPGPU'nun faydaları, sistem veri yolu darboğazları olmadan çok daha geniş bir bellek alanına uygulanabilir. Muhtemelen burada veya mathematics.stackexchange.com'da başkaları da vardır,
Sonsuz görüş mesafesi gereksiniminiz açısından, elbette, ama soru her zaman, "hangi mesafeden ne kadar ayrıntıya" gelir. Sonsuz ayrıntıyı oluşturmak sonsuz kaynak gerektirir. Bu, sahne başına değişken mipmaplamanın devreye girdiği yerdir. Ayrıca, tüm veri yapılarının alan için bir miktar hız dengesi içerdiğini ya da tam tersini unutmayın. Aynı miktarda mühendislik çabası için daha büyük bir dünya istiyorsanız, daha az / daha yavaş renderleme anlamına gelir.