Yükseklik Haritası, Voksel, Çokgen (geometri) araziler


15

Yükseklik Haritası, Voksel ve Çokgen (geometri) arazileri ile ilgili olarak:

  1. Bu üçü arasındaki temel farklar nelerdir?
  2. Voksellerle "pürüzsüz" bir arazi oluşturabilir misiniz, yani, örneğin Voksellerle pürüzsüz bir dağ alabilir misiniz, yoksa Vokseller küplerle sınırlı mı?
  3. Performans açısından, bir dünya 2000x2000 birim, daha hızlı Yükseklik harita arazisi, Voksel arazi veya Çokgen tabanlı, geometri arazi ne olurdu? (Her olasılık için oluşturma için "makul" performans kazancı / optimizasyonu olduğu varsayılarak)
  4. Arazi yaratmak için kullanılan başka teknikler var mı?
  5. Her bir türü temsil eden iyi başlıklar var mı?

PS Poligon tabanlı arazi tamamen eğitilmeli, kare bir şey olmamalıdır.

Yanıtlar:


30

heightmaps

Bir yükseklik haritası ile, her köşe için yalnızca yükseklik bileşenini depolarsınız (genellikle 2B doku olarak) ve tüm dörtlü için yalnızca bir kez konum ve çözünürlük sağlarsınız. Peyzaj geometrisi, geometri gölgelendiricisi veya donanım mozaiklemesi kullanılarak her çerçevede oluşturulur. Yükseklik haritaları, çarpışma algılaması için yatay verileri depolamanın en hızlı yoludur.

Artıları:

  • Nispeten düşük bellek kullanımı : Her köşe için yalnızca bir değer depolamanız gerekir ve dizin yok. Algılanan ayrıntıları artırmak için ayrıntı haritaları veya bir gürültü filtresi kullanarak bunu daha da geliştirmek mümkündür.

  • Nispeten hızlı : Yükseklik haritaları için geometri gölgelendirici küçüktür ve hızlı çalışır. Yine de geometri alanı kadar hızlı değil.
    Üçgen tabanlı 3D hızlandırması olmayan sistemlerde, ışın yürüyüşü yükseklik haritaları araziyi oluşturmanın en hızlı yoludur. Buna eski oyunlarda voksel grafikleri deniyordu.

  • Dinamik LOD / arazi : Oluşturulan ağın çözünürlüğünü kameradan uzaklığa göre değiştirmek mümkündür. Bu, çözünürlük çok fazla düşerse (yaklaşık 0:40), değişen geometriye neden olur, ancak ilginç efektler için kullanılabilir.

  • Kolay arazi üretimi / oluşturma : Fraktal Perlin Gürültüsü gibi gürültü işlevlerini harmanlayarak yükseklik haritaları kolayca oluşturulabilir ve yükseklik haritası düzenleyicileri hızlı ve kullanımı kolaydır. Her iki yaklaşım da birleştirilebilir. Bir editörde çalışmak da kolaydır.

  • Verimli fizik : Yatay bir konum doğrudan (genellikle) bellekteki bir ila dört konumla eşleşir, bu nedenle fizik için geometri aramaları çok hızlıdır.

Eksileri:

  • Tam olarak x / y koordinatı başına bir yükseklik : Genellikle yerde delikler veya çıkıntılı uçurumlar olamaz.

  • Daha az kontrol : Her noktanın kesin yüksekliğini yalnızca ızgara boyutu doku koordinatlarıyla eşleşiyorsa kontrol edebilirsiniz.

  • Eserler : Bir alt dörtlü tanımlayan dört köşe aynı düzlemde değilse, iki köşe arasındaki ayrım görünür hale gelir. Bu genellikle kenarları kardinal bir yön izlemeyen dik uçurumlarda olur.

Yükseklik haritaları, araziyi açık bir şekilde oluşturmanın en etkili yoludur ve gelişmiş arazi özelliklerine güvenmeyen ve geniş açık alanlara sahip birçok yeni oyunda kullanılır. Vikipedi programlarının kullanımının heightmaps bir listesi vardır , ama bu araçlar sadece bu yüzden burada, oluşturma için de olduğu bir bazı oyunlar kaynaklar olarak kullanabilir veya eğer emin değilim olasılıkla bunları kullanmak için:

  • Just Cause 2: Bölgeler kare sektörlere yüklenir ve arazide delik yoktur. Demoda, normalde bir binanın olacağı kenarlar boyunca gerilmiş üçgenleri olan derin bir delik var. (Bölgeye normal olarak erişilemez, ancak demo'nun bazı sınırlamalarını kaldırmak için modlar vardır ...)

  • Sims 2 ( belki ): Mahalle arazisi yükseklik haritası olarak yüklenir, ancak lotların (şantiyeler) yerleştirildiği delikler vardır. Yine de çok fazla uçurum oluşturursanız tipik eserler vardır ve bir eve bir mahzen eklemek (ve veranda altında uçurum gizlemek) oldukça sıkıcıdır.

  • Valve'in Kaynak motoru oyunları: Dikdörtgen fırçalar (statik seviye geometrisi) yüzlerinde yükseklik haritalamalı arazi içerebilir. Bu oyunlarda, olağan tuhaflıklar genellikle diğer fırçalar veya aksesuarlar ile gizlenir.

Gölgelendiricilere bakmadan kesin olarak söylemek imkansızdır çünkü her yükseklik haritası arazisi kafes olarak işlenebilir.

vokseller

Voksel arazi, 3B ızgaradaki her nokta için arazi verilerini depolar. Seyrek sekizli gibi sıkıştırma yöntemleri kullansanız bile, bu yöntem her zaman anlamlı yüzey ayrıntısı başına en fazla depolama alanını kullanır.

("Voksel motoru" terimi genellikle eski 3B oyunlarda yaygın olan ışın yürüyüşü arazi yükseklik haritalarının bir yöntemini tanımlamak için kullanılır. Bu bölüm yalnızca voksel verileri olarak depolanan arazi için geçerlidir.)

Artıları:

  • Sürekli 3B veriler : Vokseller, cevher damarları gibi gizli arazi özellikleri hakkında sürekli verileri depolamanın tek etkili yoludur.

  • Kolay değiştirilebilir : Sıkıştırılmamış voksel verileri kolayca değiştirilebilir.

  • Gelişmiş arazi özellikleri : Çıkıntılar oluşturmak mümkündür. Tüneller sorunsuz.

  • İlginç arazi üretimi : Minecraft bunu önceden tanımlanmış arazi özellikleri (ağaçlar, zindanlar) ile gürültü işlevlerini ve degradeleri üst üste koyarak yapar. ( Daha fazla bilgi için Notch'in blogunda Terrain Generation, Part 1'i okuyun . 05.8.2011 itibariyle 2. bölüm yoktur.)

Eksileri:

  • Yavaş : Voksel verilerini oluşturmak için, bir ışın izleyici kullanmanız veya örneğin yürüyen küplerle bir kafes hesaplamanız gerekir (Artefaktlar olacaktır). Komşu voksel örgü üretimi için bağımsız değildir ve gölgelendiriciler daha karmaşıktır ve genellikle daha karmaşık geometri üretir. Yüksek LOD ile voksel verilerinin oluşturulması çok yavaş olabilir.

  • Büyük depolama gereksinimleri : Voksel verilerinin depolanması çok fazla bellek kullanır . Bu nedenle voksel verilerini VRAM'a yüklemek genellikle pratik değildir, çünkü modern donanımda bile telafi etmek için daha küçük dokular kullanmanız gerekir.

Deforme edilebilir arazi gibi voksel özelliklerine güvenmeyen oyunlar için voksel kullanmak pratik değildir, ancak bazı durumlarda ilginç oyun mekaniğine izin verebilir. Voksel motorları eski oyunlarda daha yaygındır , ancak daha yeni örnekler de vardır:

  • Atomontage motoru : Voksel oluşturma.

  • Solucanlar 4: "Poxels" kullanır. Wikipedia'ya göre bu voksel ve çokgenlerin bir karışımı.

  • Minecraft: RAM'deki araziyi temsil etmek için voksel kullanır, grafikler çokgen grafiklerdir. Çoğunlukla hesaplanan yazılım.

  • Terraria: 2D voksellere bir örnek. Nasıl sonuç verdiğini bilmiyorum.

  • Fizikle birleştirilen vokseller : Oyun değil. ama yıkım potansiyelini güzel bir şekilde sergiliyor.

  • Voxatron : Menüler ve HUD dahil olmak üzere neredeyse tüm grafikler için voksel kullanan bir oyun.

Ağlar

Çokgen örgüler, araziyi depolamanın ve oluşturmanın en esnek ve hassas yoludur. Genellikle hassas kontrol veya gelişmiş arazi özelliklerine ihtiyaç duyulan oyunlarda kullanılırlar.

Artıları:

  • Çok hızlı : Köşe gölgelendiricisinde normal projeksiyon hesaplamasını yapmanız yeterlidir. Bir geometri gölgelendiriciye gerek yoktur.

  • Çok hassas : Tüm koordinatlar her köşe için ayrı ayrı saklanır, bu nedenle onları yatay olarak hareket ettirmek ve daha ince ayrıntılara sahip yerlerde örgü yoğunluğunu artırmak mümkündür.

  • Düşük bellek etkisi : Bu aynı zamanda ağın genellikle bir yükseklik haritasından daha az belleğe ihtiyacı olacağı anlamına gelir, çünkü köşeler daha az küçük özelliklere sahip alanlarda daha seyrek olabilir.
    (Bkz . Wikipedia'da üçgen düzensiz ağ ).

  • Eserler yok : Ağ olduğu gibi işlenir, bu nedenle herhangi bir aksaklık veya garip görünümlü kenarlıklar olmaz.

  • Gelişmiş arazi özellikleri : Delik bırakmak ve çıkıntılar oluşturmak mümkündür. Tüneller sorunsuz.

Eksileri:

  • Kötü dinamik LOD : Yalnızca önceden hesaplanmış ağlarla mümkündür. Bu, eski verileri yeni köşelere eşlemek için ek veri olmadan geçiş yaparken "sıçramalara" neden olur.

  • Değiştirilmesi kolay değil : Değiştirilmesi gereken bir alana karşılık gelen köşeleri bulmak yavaştır.

  • Çarpışma tespiti için çok verimli değil : Yükseklik haritalarında ve voksel verilerinden farklı olarak, belirli bir konumun bellek adresi genellikle doğrudan hesaplanamaz. Bu, tam yüzey geometrisine bağlı olan fizik ve oyun mantığı büyük olasılıkla diğer depolama formatlarından daha yavaş çalışacağı anlamına gelir.

Çokgen arazi, geniş açık alanlara sahip olmayan veya hassasiyet ve çıkıntılar nedeniyle yükseklik haritası arazisini kullanamayan oyunlarda sıklıkla kullanılır. Listem yok ama eminim ki

  • her 3D Zelda ve

  • her 3D Mario oyunu

bunu kullan.

Diğer yöntemler

Tamamen gölgelendirici boru hattında bir arazi oluşturmak mümkündür. Algoritma yalnızca parça / piksel gölgelendiricide çalışıyorsa, bellek etkisi neredeyse sıfırken ayrıntı neredeyse sınırsız olabilir. Açık olan dezavantajlar, fotoğraf makinesi orijinal oluşturma yüzeyi ile kesiştiğinde şekil ve sorunlar üzerinde neredeyse hiç kontrol değildir. Oyuncuların bir gezegenin yüzeyi ile etkileşime girmediği uzay oyunlarında hala yararlıdır. Parametre animasyonları bu tür arazilerde en iyi sonucu verir.

Oyun motorunun geri kalanında kullanmak için oluşturulan arazi geometrisini grafik kartından indirmek mümkün olmalıdır, ancak bunun performansının nasıl olduğunu veya şimdiye kadar yapılıp yapılmadığını bilmiyorum.

Sonuç

Her senaryo için iyi çalışan bir yöntem yoktur, ancak belirli bir görev için bir tane seçmek oldukça kolaydır:

  • Arazi yüzeyinde çıkıntılara veya deliklere ihtiyacınız yoksa ve fizik veya dinamik arazi kullanıyorsanız yükseklik haritaları en iyi çözümdür. Ölçeklenebilir ve çoğu oyun için iyi çalışırlar.

  • Ağlar en yüksek hassasiyete sahiptir ve çıkıntıları, delikleri ve tünelleri tanımlayabilir. Sık sık değişmeyen karmaşık bir araziniz varsa bunları kullanın.

  • Vokseller , birçok karmaşık özelliğe sahip çok dinamik araziyi tanımlamak için iyidir. Büyük miktarda bellek ve işleme gerektirdikleri için bunları doğrudan oluşturmaktan kaçının.

  • Araziyle etkileşime girmeniz veya çok ayrıntılı grafiklere ihtiyacınız yoksa, diğer yöntemler yukarıdakilerden daha iyi olabilir. Genellikle çok spesifik senaryolar için çalışırlar.

Birden fazladan özellik elde etmek için farklı yöntemleri birleştirmek mümkündür, örneğin bir uçurumun ayrıntı yapısını artırmak için kafes araziyi bir yükseklik haritası ile yormak.

Dinamik arazi üretimi, yöntemsel uzay simülasyonunda yoğun olarak kullanılmaktadır ve bazıları son yıllarda gerçekten gelişmiş hale gelmiştir . Bu projelerin forumlarında konuyla ilgili bazı kaynaklar bulunmalıdır.


3
Kaynak motor, arazisi için yükseklik haritaları kullanmaz. Onlar "Deplasmanlar" adlı tesselated quads geliştirici developer.valvesoftware.com/wiki/Displacement
Tetrad

1
Bu tatlı bir cevap, eğer mümkünse, bu konuda +3 verirdi. Detaylı bilgi için teşekkürler, çok takdir.
joltmode

@Tetrad Yer değiştirmeler için mevcut çözünürlükler iki güçtür (doku tamponları için ortak bir kısıtlamadır), köşe başına kaydedilen tek koordinat yükseklik ve arazi yükseklik haritalarının tessele edilmiş dörtlü olarak oluşturulmasıdır. Wiki ayrıca yer değiştirmelerin oluşturma maliyetinin normal geometriden daha düşük olduğunu söylüyor. Farklı isimlerle aynı şey olduğunu varsaymanın adil olduğunu düşünüyorum.
Tamschi

1
@NickWiggill "Voksel" in anlamı son 10 yılda biraz değişmiş gibi görünüyor. Ben normal bir 3D ızgara üzerinde değerler olarak voksellerin geçerli Wikipedia tanımı ile gidiyorum . Outcast üzerinde giriş anlam farkı bahseder. Bunu açıklığa kavuşturmak için cevabımı ekledim.
Tamschi

2
Yan not: "Çokgen arazi" CBS'de " Üçgen Düzensiz Ağ " (kısaca "TIN") olarak da adlandırılır ; ve genellikle aynı etkili çözünürlüğün yükseklik haritalarından önemli ölçüde daha az bellek yoğunluğuna sahiptir, çünkü zorunlu olmayan verilerin veya veri bulunmayan yerlerin kaydedilmesiyle uğraşmaz. İlk Gotik oyun onu kullandı (diğerleri hakkında emin değilim).
Martin Sojka

8

Belirttiğiniz terimlerin hiçbirinin karşılıklı olarak birbirini dışlamadığını belirtmek isterim - yükseklik haritaları kullanan ve çokgenler kullanarak oluşturulan voksel tabanlı bir oyun bile olabilir.

  1. Yükseklik haritaları, her bir belirli noktada zeminin yüksekliğinin iki boyutlu gösterimleridir. Genellikle parlaklık, o noktanın yüksekliğini temsil eden gri tonlamalı görüntüler olarak saklanır. Vokseller temel olarak bir 3D bitmaptir. Bir voksel boşluğunu oluşturmak için kullanılan çeşitli teknikler vardır.

  2. Voksellerle pürüzsüz bir arazi oluşturabilirsiniz ve bunlar küplerle sınırlı değildir. Böyle bir yol, bir voksel temsilini bir çokgen listesine dönüştürebilen yürüyen küpler gibi bir algoritma kullanmaktır .

  3. En az üçgenleri olan en hızlı olanı: 3

  4. Perlin gürültüsü gibi fraktal algoritmalar, çok fazla
    ayrıntı içeren manzaralar oluşturmak için kullanılabilir . Nurbs gibi parametrik yüzeyler, az miktarda kalıcı depolama gereksinimi olan pürüzsüz araziler oluşturmak için kullanılabilir.

  5. Delta Force, voksel kullanan eski bir oyundur. Minecraft, manzarayı temsil etmek için voksel depolamayı kullanabilir (emin değilim). Sacrifice by Shiny iyi etki için yükseklik haritaları kullanan bir oyundur. Manzaraya sahip çoğu oyunda geometri alanları kullanılır.


1
Bir not, 3. noktada, GPU sadece çokgen sayısını önemsiyor olsa da, hala şeylerin geometri üretme tarafı var. Bir voksel alanı için geometri oluşturmak genellikle yükseklik haritası arazisinden (basit bir işlemdir) veya çokgen temelli (açıkçası zaten geometri verileri olan) daha yavaş bir işlemdir (bloklar / yürüyen küpler her ikisi de daha karmaşık süreçlerdir). Düzenleme: Bu aynı zamanda arazinin deforme olmasını isteyip istemediğinize de bağlıdır.
Michael

3. nokta için ... Eh, yükseklik haritasının işlenmesi gerekiyor ve ancak o zaman bir geometriye dönüşüyor, değil mi? Bunu akılda tutarak, bir çokgen örgüsü biraz daha hızlı olurdu? Vokselleri yapmak için kullanılan bazı tekniklere dikkat çeker misiniz?
joltmode

2
Bir yükseklik haritasından kafes oluşturmak için bir geometri gölgelendirici kullanabilirsiniz. Bu şekilde, gölgelendirici boru hattındaki her kareyi geometri oluşturulurken yalnızca yükseklik haritasını ve konum ve çözünürlük gibi parametreleri depolarsınız. Yürüyen küplerden daha hızlı ve çokgen ağdan daha yavaştır. Yüksek haritaların avantajı, düşük bellek tüketimidir: bir ağın ihtiyaç duyduğunun sadece 1 / 3'ünden biraz daha fazladır. Dezavantajı, esnek olmadığıdır (küçük detaylar, çıkıntılar yok). Oluşturulan ağın ayrıntılarını dinamik olarak ayarlayabilirsiniz, ancak bu, kaydırma geometrisine neden olur.
Tamschi

@Tamschi, sadece bir cevap verirseydin, tam olarak aradığım şeydi. :)
joltmode

@Tom biçimlendirilmiş olup olmadığını görmek ve birkaç örnek daha bulabilir miyim.
Tamschi
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.