3B bir başlıktaki düzey içerik için içerik bütçelerini (örneğin çokgen sayısı) ayarlamanın ulaşılabilir bir yolu nedir?


13

Cevaplarken swquinn için bu soruyu , cevabı ben cevaplarını duymak istiyorum ki daha uygun bir soru kaldırdı. Kendi stratejimizi göndereceğim (bunu cevap olarak kabul etmeyeceğime söz ver), ama başkalarını duymak isterim.

Özellikle: içerik ekibiniz için mantıklı bir bütçe belirlemeye nasıl devam edersiniz. Genellikle bir geliştirmede sorulan ilk sorulardan biri şudur: Çokgen bütçemiz nedir? Tabii ki, bu günlerde sadece köşe / poli sayımının sınırlayıcı faktör olması nadirdir, bunun yerine gölgelendirici karmaşıklığı, doluluk oranı, aydınlatma karmaşıklığı devreye girer.

İçerik ekibinin istediği şey, içeriğinin motora girdikten sonra çok ağır olmayacağı konusunda makul bir beklentisi olacak şekilde çalışmak için bazı zor sayılar / sınırlamalar. 'Bağımlıdır' özellikle yararlı bir cevap olmadığı göz önüne alındığında, a) yanıltıcı veya b) yanlış olmadan onlara uygulanabilir sınırlar vermemi sağlayan bir strateji duymak isterim.


1
Bu bir "prodüksiyon" olayından daha "prodüksiyon öncesi" dir.
Patrick Hughes

Yanıtlar:


5

Anladığım kadarıyla, bir modelin karmaşıklığını azaltmak, kaplanmış ve düzenlenmiş bir model için ayrıntı eklemekten daha kolaydır. Bazı şirketlerin çok detaylı varlıkları bir araya getirip duruma göre ölçeklendirerek bundan faydalandıklarını biliyorum.

Valve bunu NPC'leriyle yapıyor. NPC, herhangi bir haritalama olmadan son derece ayrıntılı olarak modellenir ve daha sonra detayı, mevcut modeller ve ayrıntılı modellere (veya otomatik olarak oluşturulan) dayalı olarak uygulanan çeşitli haritalama teknikleri gibi hileler tarafından kabul edilebilir bir seviyeye ölçeklendirir.

Bu, gelecekteki yazım denetlemelerine de yardımcı olur, çünkü varlıkları asla yeniden oluşturmanıza gerek kalmaz, yalnızca her yeni proje için onları tweetleyin. Bunun avantajı, bir ekibin varlıklar geliştirilmeye başlamadan önce bağlama özgü kıyaslama yapmasını beklemesine gerek olmamasıdır. Sanatçılar 1. günden itibaren tamamen dahil olabilirler.


2
Bu gerçekten bir bütçe sağlamaz: "İhtiyacınız kadar karmaşık hale getirin ve sonra daha sonra ölçeklendirelim" bir üretim stratejisidir. : - /
MrCranky

16

Tamam, stratejimiz:

  • Nihai içerik için kabaca doğru ölçekte bir yer tutucu geometrisi oluşturun. Bu binalar ya da karakterler olabilir. Nihai içerik gibi bir şeye bakmak zorunda değil, kutular / küreler / vb. Olabilir, ancak çok sayıda çokgen olması için mozaikle döşenmelidir. Karakterler yapıyorsanız, temsili sayıda kemikleri olsun.
  • Alternatif olarak, başka birinin geometrisini kullanın. Kalite düzeyi eşleşmeye çalıştığınız bir başlığınız varsa, modellerini yakalamanın bir yolunu bulun (belki bir DirectX sahne yakalayıcısı kullanarak).
  • Geometrinizin üzerinde temsili bir gölgelendirici olduğundan emin olun. Birkaç dokuyu harmanlamayı bekliyorsanız, dokuların hepsi tek renk olsa bile bunu yapın. Tek renk olsalar bile, dokuların önemsiz olmayan çözünürlükler olduğundan emin olun.
  • Makul sayıda ışık koyun.
  • Kamerayı gerçekçi bir yere koyun, mümkün olan en yüksek geometri miktarını işaret edin (örneğin, seviyeye bakan bir tepenin üzerinde durmak)
  • Sahneyi en yavaş ve en hızlı hedef donanımınıza yükleyin ve FPS'yi ölçün.
  • Değiş tokuşların ne olduğunu anlamak için geometri / ışık / gölgelendirici / doku çözünürlüğü miktarlarını değiştirin (örneğin, bir düzine fazladan ışığa sahip olabilirsiniz, ancak poli sayısını yarıya düşürmeniz gerekir).

Son olarak: sayılarınızla ilgili muhafazakar olun. Rendering, oyununuzun yapması gereken tek şey değildir, bu nedenle çerçevenizin ne kadarını oluşturmak istediğinize karar verin ve hedefinizi yapın. Örneğin, çerçevenizin üçte ikisini 30 fps görüntülemede geçirmek istiyorsanız, testlerinizde 1s / 22ms (45 fps) hedefleyin.

Tüm bunlardan, örnek sahneler verebilmelisiniz. Örneğin, 200K çokgen, 5 statik ışık ve model başına 3'ten fazla dinamik ışık olmayan, 50K pol ve 30 kemikli 15 karakterden oluşan bir sahne ve 60 fps'de çalışıyor ve bellekte 30 MB yer kaplıyor.


2
tl; dr: Benchmark it it;)
Nicol Bolas

+1 Bu gerçekten inşa etmenin ve ölçmenin tek yoludur.
Patrick Hughes

Gerçekten mi? Düşündüğümüz daha akıllı / daha ucuz bir çözüm olmasını umuyordum.
MrCranky

@MrCranky maalesef evet. Mevcut bir motoru kullanıyorsanız, mevcut örnek verileri ölçerek ve bunu özellikle oyununuz için sayıları özelleştirmek için taban çizginiz olarak kullanarak işleme hemen başlayabilirsiniz - her oyun farklıdır.
Patrick Hughes

4

Köşe Sayısı

15 yılı aşkın süredir "Çokgen Sayımı" nı araştırdım. Özellikle daha modern yazılım ve donanımlarla sınırınızın ne kadar olduğunu söylemenin kesin bir yolu yoktur. Tüm seviye için sadece 4.000 üçgeni destekleyen motorlarda limitler çok daha kullanışlıdır. Şimdi, oyun ortamındaki çoğu nesnenin bunu bireysel olarak aşacağını göreceksiniz.

Nihayetinde önemli olan, motorun çokgen şeritlerle yaptığı şeydir.

Motor her modeli oluşturduğunda, UV eşlemeli koordinatlarınızı, üçgenlerde temsil edilen doku / malzemeyi alır ve üçgen şeritler oluşturur. Çoğu durumda, bir üçgen fan üçgen başına ayrı üçgen şeritlere ayrılır. Bu, üçgen şerit sayısını arttırır ve performansı düşürür.

Bunu düzeltmenin en iyi örneği bir silindirin düz üstüdür. 3D paketler genellikle ortasında tepe noktası olan bir üçgen fan kurar. Kenarları ve orta tepe noktasını siliyorum, sonra yüz boyunca dörtlü oluşturuyorum. Bu daha sonra çokgen sayısını değiştirmeden birden fazla tek yüzlü şerit yerine tek bir üçgen şerit halinde üçgenlenmelidir.

Çokgen sayısını bir kılavuz olarak alın ve nasıl modellediğinize dikkat edin ve ağı UV Haritası ile eşleyin. UV Haritalaması genellikle ağda daha az yarılma olması daha faydalı olabilir.

Ardından, normal haritalarla neyin sahte olabileceğini düşünün. Çok fazla ayrıntıya sahip düz bir yüz genellikle normal haritalanır. Eğrilerin sadece bir siluet görebileceğiniz yuvarlak olması gerekir. Kavisli yüzlere önden bakarken, yüksek çözünürlüklü assett ile oyun çözünürlüğü assett arasındaki farkı fark etmemelisiniz. Siluet, normal haritalar söz konusu olduğunda modelinizdeki farkı yaratan şeydir. Silhouette, mozaikleme ve yer değiştirme eşlemesi kullanılarak DirectX 11 ile değiştirilebilir.

Oyun Tasarımı

Oyununuzu tasarlarken aşağıdakileri göz önünde bulundurun:

  1. Oyun türünü tanımlayın (örn. Aksiyon / macera / yarış / kaydıraç)
  2. Görüntüleme türünü tanımlayın (örn. Birinci kişi / üçüncü kişi / ortografik)
  3. Pazarınız için hesaplama gücünü tanımlayın. (ör. meraklısı / sıradan oyuncu)
  4. Ulaşmak istediğiniz görsel bir stil oluşturun. Crysis 2, Borderlands, Bloodforge veya Gears of War gibi görünmesini ister misiniz?
  5. Müzikçalara önemli nesneleri tanımlayın. Destekleriniz odak noktası mı olacak, yoksa yalnızca arka plan mı olacak?
  6. Görsel ağlar aynı zamanda çarpışma ağları mıdır?

Oyun ve görünüm türlerini kullanarak, görüş derinliğinin ne olacağına karar verin. Uzaktaki nesneleri ve netlikle görecek misiniz? Koridor atıcısı gibi sınırlı görüşlü bir şey mi yapıyorsunuz? (örneğin, Gears of War) Açık manzaralarla serbest dolaşan bir şey mi yapıyorsunuz? (ör. Skyrim)

Nasıl görünmesi gerektiğini öğrendikten sonra, benzer oyunları araştırabilirsiniz.

Animasyon daha sonra çokgen sayısını artırma yeteneğinizi sınırlar. Statik ağlar, aynı konumda kalan her şey GPU ve CPU'da en ucuzudur. Özellikle de fizik nesneleri değilse. Fizik nesneleri için, genellikle basit çarpışma gövdeleri ve karmaşık görsel kafesler oluşturabilirsiniz. Çoğu oyunda farkı fark etmek için yeterli etkileşim yoktur. Animasyon modelinizi 3-Boyutlu olarak, köşe başına birkaç kemikle, her birinden ağırlıklandırma arasında harmanlayarak hareket ettirir. Bu, AI ve yazılım tabanlı fizik ile çatışabilen CPU zamanında pahalı olabilir. Tüm modeldeki kemik sayısından ne kadar fazla köşe etkilenirse, CPU performansı düşecektir. Oyun karakterlerinin "sanat" olarak kabul edilmesinin diğer nedeni de budur. Bir poligon sınırı tanımlamak çok zordur.

Örneğim

UDK'yı her zaman ekranda sınırlı sayıda oyuncu ve NPC ile yavaş tempolu bir üçüncü şahıs nişancı yapıyorum. Bunun için, oyuncu başına yaklaşık 10.000 üçgen, tipik, genel düşmanlar için 5.000 üçgen ve "patron" tarzı bir karakter yapsaydım, yaklaşık 15.000 hedefliyorum. Ek olarak, yaklaşık 4.000 üçgenlik üçüncü şahıs için silahlar çok ayrıntılı olarak ortaya çıkacak. Araçlar yaklaşık 10.000 üçgen. Her şey Ayrıntı Düzeyi gerektirecektir, çünkü uzun görüş mesafelerine ihtiyacım var.

İlk kişi yaparsam, her biri için normal haritalama ile silahları yaklaşık 2.000 üçgen, yaklaşık 5.000 üçgen silahlara dayandırırım.

Sonuç

"Bu bağlıdır" muhtemelen budur, ama insanların sıkça merak ettiği bazı şeyleri açıklığa kavuşturabileceğini düşündüm.

  1. Çokgen sayısını kılavuz olarak kullanın.
  2. Modellenmek yerine normal haritalandırılabilecek alanlara bakın.
  3. Üçgen fanları yerleştirirken dikkatli olun, mümkünse bir şerit oluşturun.
  4. UV eşlemesi yaparken, şeritleri akılda tutarak ağ üzerinde daha az yarık kullanın.

2

Düşünebileceğim bir yöntem, aradığınız bilgileri deşifre edebileceğiniz istatistiksel veriler oluşturmak için otomatik olarak oluşturulmuş sahneler kullanmaktır.

  1. Büyük miktarda varlık alın (potansiyel olarak otomatik olarak oluşturulabilir).

  2. Varlık havuzu kullanılarak motorunuz tarafından yüklenebilecek sahneler oluşturmak için bir araç oluşturun.

  3. Kameranızı sahne etrafında hareket ettirecek bir bot çalıştırın. Sahneyi ışıklar da dahil olmak üzere daha dinamik hale getirmek için başka botlar da çalıştırmak isteyebilirsiniz.

  4. Mümkün olduğunca çok bilgi toplayın ve bir veritabanına atın; fps, poli sayısı, gölgelendirici değişiklikleri, ışık sayısı, çizim aramaları vb.

  5. Veritabanınızdaki verileri mümkün olduğunca çok şekilde görüntülemek için bazı araçlar oluşturun / alın.

Bu bağlantı daha fazla fikir verebilir: Ölü Yükselen Araçlar


Bu cevabı beğendim, çünkü kendi stratejimizin en pahalı kısmını ele alıyor: Birisi temsili sahneler oluşturmak için çaba sarf etmek zorunda. Algoritma üretimi veya çok sayıda hassas boyutlu varlığı hızlı bir şekilde yerleştirmek için komut dosyaları, test edilebilir bir sahnenin oluşturulmasını büyük ölçüde hızlandıracaktır. Daha popüler cevabı kabul edeceğim, ancak bunun cömertliğe değer olduğunu düşünüyorum.
MrCranky
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.