Bir voksel arazisi oluşturmak için
(a) Yaygın bir yöntem, Perlin gürültüsünü kullanarak bir yükseklik haritası oluşturmaktır. Bir yükseklik haritası temel olarak piksellerinin karanlığı veya açıklığı ile farklı yükseklikleri temsil eden tek renkli bir görüntüdür.
Heightmap görüntüsündeki o pikselin parlaklığına göre, farklı (x, y) konumlarda farklı yüksekliklere (z ekseni) kadar voksellerin "yığınlarını" oluşturmak için bu yükseklik haritasındaki ayrı piksellere bakacaksınız. Bir Perlin paraziti görüntüsü yumuşak olduğu için (karanlığa karşı keskin ışık kenarları yoktur), bunun sonucunda sorunsuz yuvarlanan araziniz olur.
(b) Farklı polyhedralardan manzarayı oluşturarak aşamalı olarak inşa edebilirsiniz. İstediğiniz voksel şekline yaklaşan çokyüzlü bir vektör şekli oluşturun. Herhangi bir 3B-nokta-polihedron yöntemi kullanarak (en sık, dışbükey-gövde-gövde), dünya şebekenizin hangi noktalarının o katedral hacmine girdiğini kontrol edin. Örneğin, uzayda bir piramit tanımlayın. Dünyanızın yerel bölgesindeki her noktayı o piramidal hacme göre kontrol ettikten sonra, hangi noktaların içine düştüğünü anlayacaksınız ve bu hücreleri “boşluk” yerine voksel oldukları anlamına gelen “mevcut” olarak ayarlayabilirsiniz. Artık kendi alanınızda bir voksel piramidi var. Herhangi bir çeşit şekil eklemeye devam edersiniz, bu şekilde bir arazi oluşturabilirsiniz.
(c) (Gerçekten b ile aynı ) Bir modelleme aracı yazın. Voxatron bunun nasıl görüneceğini gösterir. Bu, sadece yedek bir dünyada (editör) voksel formları oluşturmak ve sonra bunları gerçek çalışma zamanı oyun dünyanıza aktarmaktır. Voxlap'ın vokseller için ilk açık kaynak editörü olduğuna inanıyorum . Tek tek vokselleri yerleştirebilir veya vokselleri dünyanıza çekmek için farklı şekillerde / hacimlerde voksel "fırça" kullanabilirsiniz.
Kendi voksel tabanlı oyununuzu inşa etmek için neye ihtiyacınız olacak?
Bu bölümü ekliyorum çünkü voksel yolu kolay değil, en azından şu anda yok. Son zamanlarda, büyük oyuncular tarafından voksel motorlarına bir kez daha renderleme ve fizik uygulamalarına yönelik birçok araştırma yapıldı.
Sadelik bir sorun olabilir, çünkü bir dünyayı ham voksellerden dinamik olarak inşa etmek dünya inşaatı için prosedürel bir yaklaşımdır ve bu doğal olarak basit değildir . Maalesef, burada birkaç teknik terim olacak. Bir voksel motoru yazmak oldukça ciddi bir girişimdir ve özellikle uzaysal kavramlar açısından oyun motorunun geliştirilmesinin birçok alanında bilgi gerektirir ve bu, 3B vektör matematiğini, matrisleri ve temel hesaplamaları makul bir seviyede anlamak anlamına gelir.
Voksel motorları tam olarak yaygın olmadığından, "voksel arazisi nesliniz" in çalışacağınız bir bağlam gerektirdiğini söyledi. Bir voksel motorunun nasıl çalıştığının temel bir açıklamasına geçelim.
Vokseller, dünyanızın temel yapı taşlarıdır. Konumları, sürekli kayan nokta boşluklarından ziyade tam sayı indeksli bir 3B ızgara (dizi) ile tanımlanır (vektör tabanlı 3B oyunlarda kullanıldığı gibi). Bunlar, dünyanızın "atomları" olacak. Minecraft gibi oyunlarda olduğu gibi 3 fit yüksek olabilirler ya da sanal karakterinizin gözünün, görece olarak, çok sayıda kümeleşmedikçe - biraz daha fazla molekül gibi - kümelenmediklerinden daha küçük olabilirler. İki çeşit var:
- Kübik kafes tabanlı vokseller ( örnek ) - bunlar basitlik için kullanılan ve modern grafik teknolojisi ile birlikte kolayca kullanılabilen daha yeni bir tür. MineCrat ve Dungeon Keeper gibi oyunlarda kullanılır.
- Nokta vokselleri ( örnek , örnek ) - orijinal voksel. Her biri, küresel bir sınırlama hacmi ile çevrilebilse de, uzayda ayrı, çarpışabilen bir noktadır. Onlar daha basittir, bu nedenle dünyanızda onlardan daha fazlasına sahip olabilirsiniz ve böylece onları daha küçük hale getirebilirsiniz, bu da genellikle elverişlidir. Bunları kullanan iki oyun Comanche ve 1990'ların Midnight Lords versiyonunu yeniden yarattı.
Her iki durumda da, dünyanızdaki vokselleri manipüle etme yaklaşımınız aşağıdaki gibidir.
Dünyanızdaki nesneleri inşa etmek ve taşımak için yukarıda belirtilen matematiksel araçlara ihtiyacınız olacaktır. Örneğin, bir duvar oluşturmak için: Vektörleri kullanarak 3B alanda uygun boyutlarda bir kutu oluşturun. Kutunuzu 3B dünyanızda (sürekli vektör uzayda) istediğiniz dönüşe ve konuma dönüştürmek için matris matematiğini kullanın. Bir voksel motoru için, ilave adım şimdi, voksellerinizden hangisinin o dönen boşluğun içine düştüğünü belirlemek için 3 boyutlu bir polihedron noktası algoritması kullanmaktır.
Temel olarak, bu, dünyanızdaki çoğu nesneyi inşa etme yönteminizdir. Bunun ötesinde, kendi araçlarınızı, “Maya” veya “3DS Max” gibi bir karakteri "modellemek" için yazabilirsiniz. Ancak sizi noktalar, kenarlar ve yüzler yerine voksellerden karakterize ettiğiniz için yöntemleriniz büyük ölçüde farklı olacaktır. Bu nesneleri dünyanızda döndürmeye karar verirseniz, bunu yapmak için benzer şekilde matris dönüşümleri kullanmanız gerekir.
Yıkılabilir arazi, seçtiğiniz bir yönteme göre bir seferde bir vokselin çıkarılması veya önceden tanımlanmış bir hacme göre bunları kaldırmak için büyük hacimli voksellerin üzerinde CSG (Yapısal Katı Geometri) işlemlerinin kullanılması kadar basittir; örneğin, bir lazer ışını bir kayadan vurulursa, vokselleri burada çıkarmak için silindirik bir hacim kullanabilirsiniz, ışın kayaya ateş eder. CSG, voksel dünyanızı oluşturan 3B uzaysal ızgaraları kullanan ve bir taban ızgarasının bir bölümündeki her hücreyi (bu durumda kaya) başka bir ızgaraya (bu durumda, lazer ışını) karşı kontrol eden nispeten basit bir işlemdir.
Malzemenin "akması" için (Vigil'in kum üzerine yaptığı yorumda belirtildiği gibi), akışkan dinamikleri ve hücresel otomatlara bakmanız gerekir. Bunlar Dwarf Fortress'in yazarı Tarn Adams tarafından esasen voksel dünyasında da kullanılıyordu (vokseller bu durumda çok daha büyük olsa da, Dungeon Keeper ile karşılaştırılabilir, ilke aynı kalır). Bunlar son teknoloji konulardır ve tanımlandığı gibi voksel motorları için bir gereklilik değildir, bu yüzden bunu kendi araştırmanız için bir "saplama" olarak bırakacağım.
CSG ve akışkan dinamikleri beni en sonunda optimizasyona getiriyor. Şu anda geliştirilmekte olan Voxel motorları, neredeyse yalnızca , yaklaşmakta olan Atomontage motorunu gösteren bu videoda gösterildiği gibi, farklı çözünürlüklere voksel alanını alt bölme yöntemi olan seyrek voksel octrees (SVO'lar) kullanıyor. Octrees / SVO'ların kullanılması, büyük, tek tip bir şebekenin işlenmesinde yer alan işlem masrafları nedeniyle bir optimizasyon seçiminden daha fazla bir zorunluluktur. Bir octree, esasen, temsil ettiği boşluğun herhangi bir fiziksel hacim içerip içermediğine bağlı olarak, her düğümün 8 veya sıfır alt düğüme sahip olduğu bir ağaçtır (yönlendirilmiş asiklik grafik). Oktree'lerin voksel oluşturmak için nasıl boşluk bıraktığını gösteren diyagramlar burada .
Tanıdığım en iyi açık kaynaklı voksel uygulaması, Voxelstein3D için kullanılan Ken Silverman'ın Voxlap Motoru . C ++ dilinde yazılmıştır ve arazi deformasyonu için CSG işlemlerini uygular.