3D oyun dünyasının ölçeklendirme faktörünü nasıl seçerim?


9

Bazı fizik simülasyonu ile 3D tank oyunu prototipi yapıyorum, C ++ kullanıyorum. Vermem gereken kararlardan biri oyun dünyasının gerçekliğe göre ölçeğidir. Örneğin, oyun içi 1 ölçü biriminin gerçekte 1 metreye karşılık geldiğini düşünebilirim. Bu sezgisel geliyor, ama bir şeyleri özlüyor olabileceğimi hissediyorum.

Aşağıdakileri potansiyel problemler olarak düşünebilirim:

  1. 3D modelleme programı uyumluluğu. (?)
  2. Sayısal doğruluk. (Bu önemli mi?) Özellikle büyük ölçeklerde, Battlefield gibi oyunların nasıl büyük haritaları var: Gerçek dünya ölçeğinde 1: 1 haritalama kullanırlarsa sayısal doğruluk nasıl kaybedilmezler, çünkü kayan nokta gösterimi daha büyük hassasiyetle daha fazla hassasiyet kaybetme eğilimindedir sayılar (örneğin ışın dökümü, fizik simülasyonu)?
  3. Oynanış. -9.8 m/s^2Yerçekimi gibi neredeyse gerçek dünya değerlerini kullanırken birimlerin hareketinin yavaş veya hızlı hissetmesini istemiyorum . (Bu öznel olabilir.)
  4. İthal edilen varlıkları büyütmek / küçültmek uygun mudur yoksa orijinal ölçeği ile bir dünyaya en uygun mudur?
  5. Görüntü oluşturma performansı. Aynı köşe sayısına sahip büyük kafeslerin oluşturulması daha yavaş mı?

Bunu birden fazla soruya bölmem gerekip gerekmediğini merak ediyorum ...

Yanıtlar:


3

Genellikle işe yarayan her şeyi yapmalısınız.

  1. Gerçek hayattaki nesneleriniz olduğundan, ölçekleriyle eşleşmesi mantıklıdır (3D modelleme uygulamaları genellikle ölçüm birimleri kurulumu, metre, ayak vb.), Ancak tanklardan uzaklaştıktan sonra ağaçlara ve diğer sahne nesnelerine - muhtemelen oyun stilinize uyacak şekilde özel olarak ölçeklendirilmelidir (böylece bir ağacı modellersiniz ve iyi görünmesini sağlamak için oyun düzenleyicide ölçeklendirme araçlarına sahip olursunuz, birçok kez aynı ağacı yeniden kullanırsınız, ancak çeşitlilik eklemek için farklı bir ölçekle).

  2. Kamerayı dünyanın başlangıç ​​noktasından uzak tutmayın, ancak dünyayı dünyanın başlangıç ​​noktasındaki kamera etrafında hareket ettirin . Bu şekilde, GPU / fizik hassasiyeti düşük değerleri tam olarak karşılaştırmak gerektiğinde ortaya çıkan birçok hassas sorundan kaçınırsınız. Tankı ve kamerayı başlangıç ​​noktasından 10 km hareket ettirirseniz, hassasiyetiniz float32 ile bir milimetrelik kesirlerde olur ve bu, dönüştürülmüş modeller arasında Z ile mücadeleye benzer etkilere neden olabilir.

  3. Oyununuzu iyi hissettirmek için küresel sabitleri düzeltmeniz gerekecek. Sıkıcı parçaları atlamak ve gerçek dünyada birbirinden uzakta olan küçük bir 4x4 km'lik alana (kasaba, nehir, dağ vb.) Daha ilginç şeyler paketlemek için dünyaların göreceli ölçeğini değiştirdiğiniz gibi.

  4. Eğer daha iyi ölçekli görünüyorlarsa - ölçeklendirin. Eğer oldukları gibi uyuyorlarsa - bunu saklayın. Oyunlar ve filmler kör kopyalama gerçekliğinden çok bir sanattır. Böylece güzel görünen bir ağaç buldunuz, sadece 2m boyunda modellenmiş, elbette onu ölçeklendiriyor ve oyununuzu başka yollarla uyarlıyorsunuz (ince ayar paleti, doku detayı vb.)

  5. Ekranda aynı miktarda piksel aldıkları sürece herhangi bir fark olduğundan şüpheliyim.


8

İşte gidiyor.

  1. 3D modelleme programları, birim ölçeğini seçmenize izin verme eğilimindedir. İmparatorluk veya Metrik ile sınırlı olabilir, ancak bu sadece bir sayıdır. Sayılar kolayca dönüştürülebilir / ölçeklendirilebilir / ayarlanabilir. Gerçekten sürece bunu kullandıkça, kullandığınız birim sistemi önemli değildir birini . Tutarlı kalın, böylece 1 metre 1 ayak olmaz.

    Edit: Kitap: Oyun Kodlama Tamamlandı, Üçüncü Ek, Bölüm 15, s. 525, "Metre, Feet, Cubits veya Kellicams?"

  2. Büyük köşe noktaları olan oyunlar birkaç şey yapabilir. Birincisi, bunu küçük parçalara bölebilirler ve sonra o parçaya ilişkin veriler bir ofset belirtebilir. Görünmez köşelerin büyük bölümlerini oluşturmayı önlemek için bir oluşturma optimizasyonu olan Octrees'i kullanmaya benzer. Alternatif olarak, bir çift oldukça büyük ama ayrıntılı bir sayı olan 1.79769e + 308'i depolayabilir . Bir şamandıra 3.40282e + 038 depolayabilir, bu da perişan değildir.

    Edit: Oyun Kodlaması Tamamlandı, Üçüncü Toplama, Bölüm 13, s. 410, "Koordinatlar ve Koordinat Sistemleri" (Yazının dibine tablo eklendi)

  3. Muhtemelen bir metrik sistem kullanmak veya kendi birim sisteminize dönüştürmek isteyeceksiniz. Kayda değer, muhtemelen bu değeri biraz tweak olacak. Elbette, ayarlanmış değeriniz fiziksel olarak doğru olmayacaktır. Ama belki hissetmek , mesela saat daha doğru -9.3 m/s^2.

  4. Her iki şekilde de yapabilirsiniz. Varlığı ölçeklendirmeyi söylesem de. Dünyayı ölçeklendirirseniz, yerçekimini, hız hesaplamalarını ve diğer her şeyi değiştirmeniz gerekir. Varlıkları Unity3D'ye içe aktarırken normalde içe aktarma ayarlarında model ölçeğini ayarlamam gerekir, bu nedenle Unity'nin ölçeklendirdiğini varsayarım. Eğer bu çizgiler boyunca daha fazla bir şey isteseydin.

  5. Büyük veya küçük, çokgenlerin / örgünün büyüklüğü, ne kadar çokgen olduğu kadar önemli değildir. Sanırım modelin kaç pikseli kapladığına bağlı olarak küçük bir performans değişikliği olabilir, ama hepsi bu. Bunun dışında, 10 veya 100 olan bir sayı bilgisayarın sonunda hiçbir şeyi değiştirmez. Hala aynı sayıda bit işliyor, sadece farklı bitler 0.

Düzenleme: Aşağıdaki tablo 32-bit IEEE kayan nokta sayısı olduğunu varsayar.

Game Coding Complete, Third Addition, Table 13.2, pg. 411
Smallest unit         Smallest Representable object  Upper Range    Description of
                      (As a textured polygon)                       largest area

100m                  A group of redwood trees       1.67x10^9      Earth/Moon System
1m                    A Human Being                  1.67x10^7      North and South America
1cm                   A coin                         1.67x10^6      California
1mm                   A flea                         1.67x10^5      San Francisco Bay Area
100 micrometer        A grain of pollen              1.67x10^4      Downtown San Francisco

Tüm bu bilgiler ve daha fazlası, Oyun Kodlama Tamamlandı. Mike McShaffry tarafından yazılmıştır. Black Jack'ten Thief: Deadly Shadows oyunlarına kadar çalışan bir endüstri uzmanı.


Bu sorudan memnun değilim çünkü orijinal soruya fazla bir şey katmıyor ve gerçekten somut örnekler vermiyor. 2. nokta ile ilgili olarak Görünürlük belirleme ya da geometri sayfalama ya da maksimum kayan nokta sayısı hakkında sormuyordum .. ama gerçekten kastettiğim şey, kayan nokta daha büyük sayılarla doğruluğu kaybettiği için sayısal yanlışlığın büyük geometri ile nasıl ele alındığıdır. çok büyük sayılar ama hassasiyeti düşük.
concept3d

Bu düzenleme sizin beğeninize daha uygun mu?
Wolfgang Skyler

Evet , özellikle de özellikle fizik simülasyonunda bu stackoverflow.com/questions/872544/precision-of-floating-point hakkında soruyordum ama bunun ayrı bir soruya ihtiyacı olduğunu düşünüyorum.
concept3d
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.