Qual è un modo realizzabile per impostare budget di contenuto (ad es. Conteggio dei poligoni) per contenuti di livello in un titolo 3D?


13

Nel rispondere a questa domanda per Swquinn , la risposta ha sollevato una domanda più pertinente a cui mi piacerebbe sentire le risposte. Pubblicherò la nostra strategia (prometto che non la accetterò come risposta), ma mi piacerebbe sentire gli altri.

In particolare: come si fa a impostare un budget ragionevole per il proprio team di contenuti. Di solito una delle prime domande poste in uno sviluppo è: qual è il nostro budget poligonale? Naturalmente, oggigiorno è raro che il conteggio dei vertici / poli sia il solo fattore limitante, invece entrano in gioco la complessità dello shader, il fill-rate, la complessità dell'illuminazione.

Ciò che il team di contenuti desidera è che alcuni numeri / limiti siano difficili da raggiungere in modo tale da avere una ragionevole aspettativa che il loro contenuto, una volta entrato nel motore, non sarà troppo pesante. Dato che 'dipende' non è una risposta particolarmente utile, mi piacerebbe sentire una strategia che mi permetta di dare loro limiti realizzabili senza essere a) fuorviante, o b) sbagliato.


1
Questa è più "pre-produzione" che cosa di "produzione".
Patrick Hughes,

Risposte:


5

Da quanto ho capito, è molto più semplice ridurre la complessità di un modello piuttosto che aggiungere dettagli per un modello che è stato scuoiato e truccato. So che alcune aziende ne traggono vantaggio mettendo in comune risorse molto dettagliate e ridimensionandole a seconda della situazione.

Valve lo fa con i loro NPC. Gli NPC sono modellati in modo estremamente dettagliato senza alcun tipo di mappatura e quindi ridimensionano i dettagli a un livello accettabile dalla tecnologia attuale e trucchi come varie tecniche di mappatura applicate sulla base di modelli dettagliati (o persino creati automaticamente).

Questo aiuta anche con le prove future poiché non sarà mai necessario ricreare le risorse, ma solo twittarle per ogni nuovo progetto. Ciò ha anche il vantaggio di non dover attendere che un team esegua benchmarking specifici per il contesto prima che le risorse possano iniziare a essere sviluppate. Gli artisti possono essere pienamente coinvolti dal primo giorno.


2
In realtà non fornisce un budget: "renderlo complesso quanto è necessario e poi lo ridimensioneremo in seguito" è una strategia di produzione. : - /
MrCranky,

16

Ok, quindi la nostra strategia è:

  • Crea una geometria segnaposto, approssimativamente della scala giusta per il contenuto finale. Possono essere edifici o personaggi. Non deve assomigliare al contenuto finale, può essere scatole / sfere / ecc., Ma deve essere tassellato in modo da avere un numero decente di poligoni. Se stai interpretando personaggi, fagli avere un numero rappresentativo di ossa.
  • In alternativa, usa la geometria di qualcun altro. Se hai un titolo il cui livello di qualità stai cercando di abbinare, trova un modo per afferrare i loro modelli (magari usando un grabber di scene DirectX).
  • Assicurati che la tua geometria abbia uno shader rappresentativo. Se ti aspetti di fondere diverse trame, fallo, anche se le trame sono tutte monocolore. Assicurati che le trame siano risoluzioni non banali, anche se sono tutte di un colore.
  • Inserisci un numero ragionevole di luci.
  • Posiziona la fotocamera in un luogo realistico, indicando la maggior quantità possibile di geometria (ad es. In piedi su una collina guardando oltre il livello)
  • Carica la scena sul tuo hardware di destinazione più lento e più veloce e misura l'FPS.
  • Varia la quantità di geometria / luci / shader / risoluzione delle trame su o giù per avere un'idea di quali siano i compromessi (ad esempio puoi avere una dozzina di luci extra ma dovresti tagliare il conteggio dei poli a metà).

Infine: sii prudente con i tuoi numeri. Il rendering non è l'unica cosa che il tuo gioco dovrà fare, quindi decidi quale proporzione del tuo frame vuoi spendere e rendi il tuo obiettivo. Ad esempio, se si desidera spendere i due terzi del fotogramma con un rendering a 30 fps, scegliere come target 1 s / 22 ms (45 fps) nei test.

Di tutto ciò, dovresti essere in grado di dare esempi di scene. Ad esempio, ecco una scena con 200K di poligoni, 5 luci statiche e non più di 3 luci dinamiche per modello, con 15 caratteri di poligoni 50K e 30 ossa, che gira a 60 fps e occupa 30 MB di memoria.


2
tl; dr: benchmark te stesso;)
Nicol Bolas

+1 Questo è davvero l'unico modo, costruisci e misura.
Patrick Hughes,

Veramente? Speravo che ci sarebbe stata una soluzione più intelligente / economica a cui non avevamo pensato.
MrCranky,

@MrCranky purtroppo sì. Se stai utilizzando un motore esistente, puoi avviare rapidamente il processo misurando i dati di esempio esistenti e utilizzandoli come base per personalizzare in particolare i numeri del tuo gioco: ogni gioco è diverso.
Patrick Hughes,

4

Conteggio dei vertici

Ho studiato "Polygon Count" per oltre 15 anni. Non esiste un modo rigoroso per stabilire quanti sono i tuoi limiti, soprattutto con software e hardware più moderni. I limiti erano molto più utili nei motori che supportavano solo 4.000 triangoli per un intero livello. Ora, troverai che la maggior parte degli oggetti nell'ambiente di gioco supererà quello individualmente.

Ciò che conta in definitiva è ciò che il motore sta facendo con le strisce poligonali.

Quando il motore esegue il rendering di ciascun modello, prende le coordinate mappate UV, la trama / materiale rappresentato sui triangoli e crea strisce triangolari. Nella maggior parte dei casi, una ventola triangolare viene suddivisa in strisce triangolari separate per triangolo. Ciò aumenta il numero di strisce triangolari, diminuendo le prestazioni.

Un primo esempio di fissaggio è la sommità piatta di un cilindro. I pacchetti 3D generalmente creano un ventilatore a triangolo con un vertice al centro. Elimina i bordi e il vertice centrale, quindi creo quadratini sulla faccia. Questo dovrebbe quindi triangolare in una singola striscia triangolare anziché in più strisce a faccia singola, senza modificare il conteggio dei poligoni.

Prendi il conteggio dei poligoni come guida e prenditi cura del tuo modello e mappa UV della mesh. Meno divisioni nella mesh quando la mappatura UV può spesso essere più vantaggiosa.

Quindi, considera cosa può essere simulato con le normali mappe. Una faccia piatta con un sacco di dettagli di solito è normalmente mappata. Le curve devono solo essere rotonde dove puoi vedere una silhouette. Quando guardi frontalmente le facce curve, non dovresti notare la differenza tra il tuo assetto ad alta risoluzione e il assetto di risoluzione del gioco. La silhouette è ciò che fa la differenza nel tuo modello quando sono coinvolte le normali mappe. La silhouette può ora essere modificata con DirectX 11, usando la mappatura di tassellatura e spostamento.

Game Design

Considerare quanto segue quando si progetta il gioco:

  1. Definisci il tipo di gioco (ad es. Azione / avventura / corsa / scroller)
  2. Definire il tipo di vista (ad es. Prima persona / terza persona / ortografica)
  3. Definisci il potere computazionale per il tuo mercato. (es. appassionato / giocatore occasionale)
  4. Crea uno stile visivo che desideri ottenere. Vuoi che assomigli, ad esempio, a Crysis 2, Borderlands, Bloodforge o Gears of War?
  5. Definisci oggetti importanti per il giocatore. I tuoi oggetti di scena saranno un centro di messa a fuoco o semplicemente uno sfondo?
  6. Le maglie visive sono anche le maglie di collisione?

Usando il gioco e i tipi di vista, decidi quale sarà la profondità della vista. Vedrai oggetti distanti e con quale chiarezza? Stai realizzando qualcosa con una visione limitata, come uno sparatutto in corridoio? (es. Gears of War) Stai creando qualcosa di free-roaming con paesaggi aperti? (es. Skyrim)

Una volta che sai come dovrebbe essere, puoi cercare giochi simili.

L'animazione limiterà quindi la tua capacità di aumentare il conteggio dei poligoni. Maglie statiche, tutto ciò che rimane nella stessa posizione è più economico su GPU e CPU. Soprattutto se non sono oggetti di fisica. Per gli oggetti di fisica, spesso è possibile creare scafi di collisione semplici e mesh visive complesse. Non c'è abbastanza interazione nella maggior parte dei giochi per notare la differenza. L'animazione sposta il modello tridimensionalmente, con diverse ossa per vertice, fondendosi tra la ponderazione di ciascuna di esse. Questo può essere costoso in termini di tempo della CPU, che può scontrarsi con l'intelligenza artificiale e la fisica basata su software. Più vertici sono influenzati dal numero di ossa nell'intero modello diminuirà le prestazioni della CPU. Questo è l'altro motivo per cui i personaggi del gioco sono considerati "arte". È molto difficile definire un limite poligonale.

Il mio esempio

Uso l'UDK, realizzando uno sparatutto in terza persona a ritmo lento, con un numero limitato di giocatori e NPC sullo schermo in qualsiasi momento. Per questo, sto puntando a circa 10.000 triangoli per giocatore, 5.000 triangoli per nemici tipici e generici, e se dovessi creare un personaggio in stile "boss", circa 15.000. Inoltre, le armi per la terza persona intorno ai 4.000 triangoli appariranno altamente dettagliate. Veicoli di circa 10.000 triangoli. Tutto richiederà Livello di dettaglio, perché ho bisogno di lunghe distanze di visualizzazione.

Se facessi una prima persona, baserei le braccia su circa 2.000 triangoli, un'arma su circa 5.000 triangoli, con una mappatura normale per ciascuno.

Conclusione

Questo è probabilmente ciò che significa "Dipende", ma ho pensato che potesse chiarire alcune cose che la gente spesso si chiede.

  1. Usa il conteggio dei poligoni come guida.
  2. Guarda le aree che potrebbero essere mappate normalmente anziché modellate.
  3. Fare attenzione quando si posizionano i ventilatori a triangolo, se possibile, creare una striscia.
  4. Usa meno divisioni sulla mesh durante la mappatura UV, tenendo presente le strisce.

2

Un metodo che mi viene in mente è l'utilizzo di scene costruite automaticamente per generare dati statistici da cui è possibile decifrare le informazioni che stai cercando.

  1. Ottieni un grande volume di risorse (potrebbe essere generato automaticamente).

  2. Crea uno strumento per generare scene che possono essere caricate dal tuo motore utilizzando il pool di asset.

  3. Esegui un robot che sposta la videocamera nella scena. Potresti anche voler eseguire altri robot per rendere la scena più dinamica, comprese le luci.

  4. Raccogliere quante più informazioni possibili e gettarle in un database; fps, numero di poligoni, cambi shader, numero di luci, chiamate di richiamo ecc.

  5. Crea / ottieni alcuni strumenti per visualizzare i dati nel tuo database in tutti i modi possibili.

Questo link potrebbe fornire qualche idea in più: Dead Rising Tools


Mi piace questa risposta, poiché affronta la parte più costosa della nostra strategia: qualcuno deve fare lo sforzo di costruire scene rappresentative. La generazione di algoritmi o script per posizionare rapidamente un gran numero di risorse di dimensioni sensibili accelererebbe notevolmente la creazione di una scena testabile. Accetterò la risposta più popolare, ma penso che questa valga la taglia.
MrCranky,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.