Soru seyrek voksel octrees nedir?


Gelecekteki grafik motorlarında seyrek voxel octrees'in potansiyel kullanımı hakkında çok şey okuyorum.

Ancak onlar hakkında teknik bilgi bulamadık.

Bir vokselin ne olduğunu anlıyorum, ancak ne kadar seyrek voksel octrees olduğunu ya da şu anda kullanımda olan poligonal tekniklerden ne kadar verimli olduklarını bilmiyorum.

Birisi bana bunun için bir açıklamayı anlatabilir mi veya işaret edebilir mi?


32
2018-06-12 09:48


Menşei




Cevaplar:


Bir nVidia whitepaper çok ayrıntılı anlatıyor ~ http://www.nvidia.com/object/nvidia_research_pub_018.html


8
2017-09-04 02:44





İşte bir snippet hakkında id Bu konudaki yazılım.

Tech 6, MegaTexture fikrinin üzerine inşa edilen daha ileri bir teknik kullanacak ve hem geometriyi hem de dokuyu sanallaştırmak için eşsiz bir geometri elde etmek için uzaysal malzemenin eşdeğerine denk gelecek: Sparse Voxel Octree (SVO).

Bir octree'de saklanan voksellerle (üçgenler yerine) gösterilen geometriyi raycasting ederek çalışır.

Amacı, octree'nin parçalarını video belleğine aktarabilmeyi, daha fazla ayrıntı vermek için yakındaki nesneler için ağacın daha aşağı ilerlemesini ve daha fazla nesne için daha yüksek seviyeli vokseller kullanmanın otomatik bir ayrıntı seviyesi vermesini sağlamaktır. (LOD) sistemi hem geometri hem de dokular için aynı anda.

Ayrıca işte bu bir kağıt.

Bu konuda daha fazla bilgi buldum harika blog girişi.

Eh, sadece vokseller bu ilginç değil, çünkü herhangi bir makul detaylı modelleme için, son derece büyük miktarda voksellere ihtiyacınız olacaktır (tek tip bir ızgara kullanıyorsanız).

Bu yüzden, bizi bürokrasiye getiren hiyerarşik bir sisteme ihtiyaç var. Bir octree, her bir düğümü 8 eşit büyük alt alana bölen çok basit bir uzamsal veri yapısıdır.

Seyrek bir octree, düğümlerin çoğunun boş olduğu, diferansiyel denklemleri ayrıştırırken elde ettiğiniz seyrek matrislere benzeyen bir octree'dir.


26
2018-06-12 09:52



Bunu daha önce okudum ama bu gerçekten herhangi bir teknik detay vermez. Ağaçlar hakkında 'seyrek' olan ne? neden octree ve ikili ağaç veya 'hexa' ağacı değil? - pdeva
Bu konuda bir makale ile güncellendi. - Ólafur Waage
Octree olarak adlandırılırlar çünkü alan her seferinde eşit olarak 8 alt uzay olarak ayrılır. - schnaader
Schnaader - evet ama neden 8, neden başka bir sayı değil. Olafur - güzel bir kağıt ama seyrek vokselleri açıklamıyor gibi görünüyor. - pdeva
Bir octree düğümü, üç temel vektörün x, y & z birine dik olan ve bölünen hacmin ortasından geçerek (tekdüze octrees için) ortogonal olan ve her birine dik olan 3 düzlem yerleştirilerek alt bölümlere ayrılır. 3 ortoganal düzlemde bölünmüş bir hacim 8 alt hacme sahiptir. - CynicismRising


bir sekizli 8 komşudur, çünkü bir kare hayal ederseniz, bu 4 eşit çeyrek bölündü.

______________
|     |      |
|     |      |
|_____|______|
|     |      |
|     |      |
|_____|______|

o zaman bir "dörtlü" (dört) -tree olurdu.

ama 3 boyutta, kendiniz, bir küp, daha sonra bir kare var, bu yüzden yatay, dikey ve Z ekseni boyunca kesme, o zaman 4 yerine 8 parça bulacaksınız

    _____________
   /     /     / |
  /-----/-----/  |
 /_____/_____/ | |
 |     |     | |/|
 |-----|-----|/| |
 |     |     | |/
 |_____|_____|/

o zamandan beri umuyoruz ..

SVO'yu benzersiz kılan, uzayda bir nokta olan, Renk, Normal, vb. gibi özelliklere sahip olan Voxel bilgilerini saklamasıdır.

SVO'nun ardında yatan fikir, üçgenleri ve doku ihtiyacını, Voxelized Üçgen Gövdesini (Model) ve yüzey dokularını tek bir nesnede içeren tek bir SVO'ya yerleştirerek göz ardı etmektir.

Bir Octree'nin burada gerek duyulmasının nedeni, aksi takdirde, tek tip bir ızgara yapısının mevcut grafik kartları için çok fazla hafıza gerektirmesidir.

SVO kullanarak bir çeşit Mip-Mapped 3D Texture sağlar.

MipMapping temel olarak aynı görüntüdür, ancak fark ölçeklerinde, daha fazla ayrıntıya sahip olan ve en az ayrıntıya sahip olan (ancak mesafeden oldukça benzer olan)

Nesnelerin yakınında bu şekilde daha fazla detay ile daha fazla nesne akışı ise .. daha fazla ayrıntı ile akışı daha fazla detay ile SVO akışı olabilir .. kameradan daha fazla uzakta Ray-Casting kullanıyorsanız, daha az biz bizim Mega içine kazmak -Doku / SVO

Ancak, "sınırsız detay" ile "Euclideon" gibi kutunun dışında düşünürseniz, ekran üzerinde her bir tekstüre rengini bulmak için dilimlenmiş panomızın yansıtılan UV'si ile, sadece frustum dilimleme ve düzlem / aabb kavşağı kullanacaksınız Genişlik * Yükseklik pikselleri, nvidia'nın naif "ışın optimizasyonu" ile ışınları dışarı çeker.

PS (konuyla ilgili soruyu sormak): Euclideon'un shi'yi nasıl yaptığını anlamayan herkes için en pratik çözüm olduğuna inanıyorum ve bunu desteklemem için sebeplerim var (ışın dökümünü KULLANMAYAN)

Sahip oldukları en büyük gizlilik, görüntü vermemek, veriyi depolamak değil .. RLE, onu kesiyor .. çünkü bazı hacim / voksel verileri daha rasgele ve RLE'nin olmadığı yerde daha az "katı" olabilir, aynı zamanda Benim için tipik olarak en az 5 bayt daha az bir şey gerektirir. Sıkıştırma yoluyla kabaca bunların yarısı kadar çıktılarını söylüyorlar. Bu nedenle, şu anda bir Üçgen ile hemen hemen aynı olan 2,5 bayt kullanıyorlar.


17
2017-11-15 02:31





aslında, 1.15 bit beni bir şeyleri sırayla, bazı zekice basit bir şekilde depoladıklarından şüphelenmemi sağlıyor. Yani, sadece hacim verilerini saklıyorlar ve renk ya da doku verileri gibi şeyler yapmıyorlarsa.

Bunu şöyle düşünün: 1 vokselin sadece 1 bit olması gerekiyor: orda mı yoksa orada değil mi? (olmak ya da olmamak, başka bir deyişle: P). octree düğümü, 8 vokselden oluşuyor ve bir şey içeride bir şey içerip içermediğini saklamak için biraz. Bu voksel başına bir bit artı bir 8 başına bir. 1 + 1/8 = 1,125. 7 kardeş ile başka bir ana düğüm ekleyin ve 1 + 1/8 + 1/8/8 = 1,140625 elde edersiniz. Bahsettikleri 1.15'e şüpheyle yaklaştılar. Muhtemelen yolum kapalı olsa da, birileri için biraz ipucu verebilir.


4
2018-04-27 15:30



1 + 1/8 + 1 / 8/8 + 1/8 / 8/8 + 1/8 / 8 / 8/8 + 1/8 / 8/8 / 8/8 + 1/8 / 8/8 / 8/8 / 8 + 1/8 / 8/8 / 8/8 / 8/8 + 1/8 / 8/8 / 8/8 / 8 / 8/8 + 1/8 / 8/8 / 8 / 8/8/8/8/8 = 1.14285714179277420043 - nonchip
Daha fazla hesaplama yaptı, 1.14285714285714285705 GNU'nun temel hesap makinesi ve mathlib ile elde ettiğim en doğru değerdir. Sanırım bununla çalışabiliriz. - nonchip
@nonchip Toplamı, O'dan Inf'a (1 / (8 ^ n)) = vxel başına = 8 8/7. Ancak, seyrek olarak mekansal koordinatları, voksel başına 9/8 bit ile daha iyi temsil edebileceksiniz. 72 bit süper birimine (64 voksel) düzenli olarak toplanan 8 9 bitlik bir dizi diziyi kullanabilirsiniz. 9 bitlik birimde, bit 0 octree düğümü 8 çocuğundan (diziye eklenen bir başka 72 bit süper birimi anlamında) veya aniden sona erdirerek (kısıtlamaya izin vererek), mevcut çocuk voksellerini 1-8 bite sokarak bitlerse geçiş yapar. . Endeksleri voksel koordinatlarından renk / dokuya LUT. - user13972


Video kartlarιnιn müstehcen miktarlarι yansıttιğιnιzdan, günümüzde sadece tüm noktaları, radar veya radyosunu rasterleyebilirsiniz. Bir octree kullanın, çünkü küp şekli sürekli olarak küçük ve küçük küpler oluşturuyor. (voxels) Raster tekniği ve görünüşü iyi görünüyor. Vokselleri canlandıramayacağınızı söyleyenler için, konu hakkında çok düşünmediklerini düşünüyorum, elbette ki mümkün. Gördüğüm gibi, dünyayı "sonsuz 3d-kat" gibi bir sürü yapmak, böylece 3d ceket bakmak ve seviye tasarımı bu programın çalışma şekli çok benzer olacaktır. Ana çekiliş destekleri, yeterince hızlı olmama akış hızını, 60 fps yapmadan raytracing veya raster yapmayı ve gerçek voksel nesnelerini çizmeyi, yaklaşık 12 saniyede 1024x1024x1024 küreyi çizebildiğim anda çok hesaplı bir şekilde pahalıya götürür. Ama tüm bu problemler düzeltilebilir, onun heyecan verici bir geleceği. Şu andaki maksimum dünya boyutum mega bir mega kadar meg ama ben aslında bundan 8 kat daha büyük yapabilirim. Tabii ki, aslında oldukça ciddi olan diğer problem, sıkıştırmadan sonra bile 8192x8192x8192 karakterini saklamak için yaklaşık 100 mega sürer, bu yüzden bir ortam bundan daha da fazla olacaktır. 8192x8192x8192 karakterine sahip olmanın, bugün oyunlarda gördüğümüzle karşılaştırıldığında tamamen saçma olduğunu söylese de, bütün bir dünya 8192x8192x8192 idi :)

İşaretçi başına sadece bitleri saklayarak bunu nasıl yaparsınız? İşaretçiler video belleğindeki çalışma zamanında oluşturulmuşlardır ... aklınızı bu şekilde alın ve kendi motorunuz olabilir. :)


1
2017-09-16 10:42