Differenza tra rendering nel software di animazione OpenGL e 3D


16

Con OpenGL e simili posso rendere alcune cose piuttosto sorprendenti in "tempo reale" 60 FPS. Tuttavia, se provo a realizzare un video della stessa scena in diciamo Maya, o 3ds Max, ci vorrebbe MOLTO MOLTO più tempo per renderlo anche se ha la stessa risoluzione e FPS.

Perché questi due tipi di rendering richiedono periodi di tempo diversi per lo stesso risultato?

Nota: Sì, mi rendo conto che il software di animazione 3D è in grado di produrre immagini di qualità superiore a ciò che si potrebbe fare in tempo reale. Ma per questa domanda mi riferisco a una scena di uguale complessità.


1
La risposta breve è che OpenGL prende scorciatoie.
user253751

Risposte:


9

La differenza principale sarebbe che con OpenGL in diciamo che un videogioco avrà un processo chiamato rasterizzazione che sostanzialmente si occupa di determinare quale parte della scena che vedi.

Deve essere veloce per poterlo sperimentare in tempo reale.

Pertanto l'algoritmo esegue alcuni semplici passaggi.

  • controlla se una certa parte della scena è a mio avviso frustum

    Frustum Culling

  • controlla se c'è qualcosa che può essere reso in seguito usando un buffer di profondità

    Buffer di profondità

  • ordina gli oggetti che abbiamo trovato per disegnare

  • disegnali proiettandoli sullo schermo
  • sfumali in base a trame / shader / luci / ...

D'altra parte un software di rendering (Blender / Max / Maya / ...) molto probabilmente usa un qualche tipo di raytracing

Ciò comporta molta più matematica per raggiungere un livello più elevato di realismo. Funziona sostanzialmente allo stesso modo:

  • crea una telecamera e un piano immagine davanti ad essa
  • scatta un raggio (o più raggi campione) attraverso ciascun pixel
  • controlla se il raggio colpisce qualcosa nella scena
  • il colpo più vicino è quello da disegnare nel pixel (come il buffer di profondità)
  • calcola la luce per il punto dato Calcolo della luce

....

Smetterò di elencare qui poiché questo è il punto in cui decolla raytracing.

Invece di verificare solo se viene colpito un punto, la maggior parte dei raytracer ora inizia a calcolare:

  • la quantità di luce che penetra in una superficie
  • quanta luce viene riflessa
  • lancia nuovi raggi dall'hitpoint nella scena fino a quando potrebbe colpire una fonte di luce

Esistono molte tecniche con diversi gradi di realismo che possono essere utilizzate per calcolare la luce di un determinato punto della scena.

TL; DR L'essenziale sarebbe che un raytracer cerca principalmente di essere fisicamente accurato quando arriva l'illuminazione e quindi ha molti più calcoli da fare per pixel (a volte scatta migliaia di raggi) e d'altra parte i giochi ottengono la loro velocità di disegnando blocchi più grandi dello schermo con calcoli della luce più semplici e molti trucchi shader che lo rendono realistico.


7

Stai confrontando le mele con le arance

Il gioco è come la porta di visualizzazione nella tua app di modellazione. Puoi utilizzare il viewport per il rendering e otterrai le stesse velocità di 60 fps.

Non vi è alcun motivo per cui non è possibile ottenere grafica in tempo reale che sia molto buona con i software di modellazione come Maya o 3DS Max. Risultati che sono alla pari con molti giochi. Hanno viewport shader proprio come fanno i giochi. C'è anche un'opzione di rendering viewport che consente di eseguire il blocco dei frame su disco il più velocemente possibile (ho eseguito rendering Full HD a 30 fps da Maya). Tutto quello che devi fare è smettere di usare i raytracer software forniti.

Ci sono alcune differenze però. La differenza principale è che tu come utente non ottimizzi le cose come fanno gli sviluppatori di giochi (l'ottimizzazione sta usando tutti i trucchi del libro). In secondo luogo, le primitive di animazione funzionano sulla CPU perché è necessaria la flessibilità. Nei giochi ci si può permettere di fare ottimizzazioni. Tutto sommato si paga per non avere un team di programmazione accanto a te.

Molte cose potrebbero in effetti essere state pre-calcolate, quindi non sono molto più veloci solo meglio organizzate. Ogni giorno la cottura della tua illuminazione indiretta batterà i risultati non cotti.

Perché i raytracer sono più lenti?

Non sono *, si tende a fare più lavoro su un ray tracer perché è facile. Caratteristica per caratteristica non sono molto più lenti nei cicli di calcolo. Ad esempio, non è necessario che un ray tracciante emetta raggi secondari (in questo caso i riflessi della vita il ray tracciante eliminerà la geometria o non la caricherà nemmeno, infatti il ​​raggio mentale fa proprio questo). Di solito è fatto solo perché è banale farlo e questo è il chiaro vantaggio dei ray tracer. È anche possibile configurarli per l'esecuzione sulla CPU in alcuni casi. Sono solo ottimizzati per cose diverse:

  1. Emissione di dati su disco, non solo frame ma tutti i dati. Qualcosa che romperebbe all'istante la maggior parte dei giochi.

  2. Lavorando su hardware generale. La GPU è molto più veloce per alcune cose una volta ottimizzata per la GPU. Ma non funziona per tutti i carichi, in effetti una CPU Intel è più veloce nel calcolo in generale rispetto alla GPU. La GPU è solo massicciamente parallela rispetto alla CPU. L'architettura vince se puoi rimanere nella GPU e ridurre al minimo il trasferimento e ottimizzare per l'architettura GPU.

Quindi paghi per flessibilità e facilità d'uso. Ma sì, ammetto che sia Maya che Max soffrono di estrema vecchiaia. Quindi potrebbero essere più veloci.

TL; DR La differenza sta principalmente nell'ottimizzazione (leggi molti trucchi) e nelle risorse esterne disponibili.

PS: C'è un'idea sbagliata che ciò sia dovuto al fatto che è fisicamente più corretto. Certamente può essere, ma il ray tracciante non è intrinsecamente più fisicamente corretto del gioco medio o di qualsiasi altro calcolo. In effetti molti giochi usano modelli davvero buoni, mentre molti non lo fanno.

* Vedi http://www.graphics.cornell.edu/~bjw/mca.pdf


2
Mi dispiace, ma è assolutamente sbagliato. OpenGL e DirectX usano approssimazioni intrinsecamente più veloci del raytracing preciso. L'intero punto della grafica 3D accelerata è avere algoritmi che si bilanciano tra realismo e velocità, e sembrano abbastanza buoni per gli usi più pratici: giochi, CAD, ecc.
1515

2
@IMil OpenGL può essere utilizzato per raytracing. È più veloce perché è ottimizzato per l'hardware in questione. Ma Maya NON deve tracciare i raggi. Maya e Max possono usare openGL e directX tanto quanto il tuo gioco. Il viewport di Maya (e 3ds) è opengl o directX (a tua scelta). Il fatto che il tuo processore sia più lento in determinati carichi di elaborazione paralleli è un'altra cosa. Quindi la risposta è valida. Le impostazioni standard di maya non sono più realistiche di una scanline standard.
joojaa,

5

Anteprima in tempo reale

Lavorando nel lato VFX del settore, se stai parlando di anteprime delle finestre in tempo reale e non del rendering di produzione, Maya e 3DS Max usano anche OpenGL (o forse DirectX - praticamente lo stesso).

Una delle principali differenze concettuali tra il software di animazione VFX e i giochi è il livello di ipotesi che possono fare. Ad esempio, nel software VFX, non è raro che l'artista carichi una singola mesh di caratteri senza soluzione di continuità che si estende da centinaia di migliaia a milioni di poligoni. I giochi tendono a ottimizzare la maggior parte per una scena di grandi dimensioni costituita da un carico di maglie semplici e ottimizzate (migliaia di triangoli ciascuna).

Rendering di produzione e tracciabilità del percorso

Il software VFX pone inoltre l'accento non sull'anteprima in tempo reale ma sul rendering di produzione in cui i raggi di luce vengono effettivamente simulati uno alla volta. L'anteprima in tempo reale spesso è proprio questa, una "anteprima" del risultato di produzione di qualità superiore.

I giochi stanno facendo un ottimo lavoro per approssimare molti di quegli effetti ultimamente come profondità di campo in tempo reale, ombre morbide, riflessi diffusi, ecc., Ma sono nella categoria di approssimazione per uso intensivo (es: mappe di cubi sfocate per diffuso riflessi invece di simulare effettivamente i raggi luminosi).

Soddisfare

Tornando a questo argomento, le ipotesi di contenuto tra un software VFX e un gioco differiscono enormemente. L'obiettivo principale di un software VFX è quello di consentire la creazione di qualsiasi possibile tipo di contenuto (almeno questo è l'ideale, anche se praticamente praticamente da nessuna parte). I giochi si concentrano sul contenuto con ipotesi molto più pesanti (tutti i modelli dovrebbero essere nel raggio di migliaia di triangoli, le normali mappe dovrebbero essere applicate a dettagli falsi, non dovremmo effettivamente avere 13 miliardi di particelle, i personaggi non sono in realtà animati dai muscoli rig e mappe della tensione, ecc.).

A causa di questi presupposti, i motori di gioco possono spesso applicare più facilmente tecniche di accelerazione come l'abbattimento del frustum che consente loro di mantenere un frame rate elevato e interattivo. Possono ipotizzare che alcuni contenuti saranno statici, elaborati in anticipo. Il software VFX non può facilmente fare questo tipo di ipotesi dato il grado molto più alto di flessibilità nella creazione di contenuti.

I giochi lo fanno meglio

Questa potrebbe essere una visione controversa, ma l'industria dei giochi è molto più redditizia del software VFX. I loro budget per un singolo gioco possono estendersi in centinaia di milioni di dollari e possono permettersi di continuare a rilasciare motori di prossima generazione ogni pochi anni. I loro sforzi di ricerca e sviluppo sono incredibili e ci sono centinaia e centinaia di titoli di giochi rilasciati continuamente.

I software VFX e CAD, d'altra parte, non sono affatto redditizi. La ricerca e lo sviluppo sono spesso esternalizzati da ricercatori che lavorano in contesti accademici, con molta industria che implementa spesso tecniche pubblicate molti anni prima come se fosse qualcosa di nuovo. Quindi il software VFX, anche proveniente da aziende grandi come AutoDesk, spesso non è "all'avanguardia" come i più recenti motori di gioco AAA.

Inoltre tendono ad avere un'eredità molto più lunga. Maya è un prodotto di 17 anni, ad esempio. È stato rinnovato molto, ma la sua architettura principale è sempre la stessa. Questo potrebbe essere analogo al tentativo di prendere Quake 2 e continuare ad aggiornarlo fino al 2015. Gli sforzi possono essere grandi, ma probabilmente non corrisponderanno a Unreal Engine 4.

TL; DR

Quindi comunque, questa è una piccola interpretazione di questo lato dell'argomento. Non riuscivo a capire se stavi parlando di anteprime in tempo reale in viewport o rendering di produzione, quindi ho cercato di coprire un po 'di entrambi.


È anche una questione di tempo. Anche se è possibile eseguire il rendering a 60 fps e ottenere risultati accettabili, raramente si espande per ottimizzarlo. Supponiamo che siano necessari 3 minuti per fotogramma e che sia necessario eseguire il rendering di 200 fotogrammi. Potresti essere in grado di ottenere i 60 fps assumendo uno shader writer e ottimizzando, ma ciò richiede almeno un giorno o due del tuo tempo. Ma 200 fotogrammi a 3 minuti richiedono solo 10 ore in modo da risparmiare quel costo. In pratica è più economico acquistare più hardware e non preoccuparti troppo. I giochi semplicemente non possono adottare questo approccio.
joojaa,

@joojaa È anche un po 'più complesso però. Fare degli shader in tempo reale davvero buoni per Maya potrebbe richiedere almeno un anno, almeno da uno sviluppatore esperto di shader (con guadagni minori), perché la flessibilità del sistema nodale è mirata al rendering di produzione. Ci vorrebbe una mentalità di ingegneria inversa e un tipo di nuovo tipo di tecnica di generazione del codice GLSL / HLSL (come un sistema di meta-programmazione) per tradurre questi nodi shader per scopi generici in un sistema di ombreggiatura in tempo reale che cattura la gamma di effetti di UE 4 , ad es.
Dragon Energy il

@joojaa Il motore shader di UE 4 è diretto direttamente verso una mentalità PBR fortemente approssimata (un sottoinsieme molto piccolo di shader PBR Disney). Hanno progettato anche il loro sistema materiale per uno scopo veloce e in tempo reale, invece di iniziare con qualcosa come il sistema materiale di Maya che non è affatto (progettato per il raytracing). Anche se i più brillanti di UE 4 funzionassero su VP 2.0, avrebbero dovuto lavorare giorno e notte forse per anni per ottenere gli stessi risultati contro un design non destinato a fare questo genere di cose.
Dragon Energy il

ma questo è un costo una tantum anche se hai quella pipeline in un'app VFX ogni scena potrebbe aver bisogno di un'ulteriore ottimizzazione. Non c'è motivo per cui un utente maya non possa eseguire il rendering in UDK, ad esempio per la stessa piattaforma di sviluppo shader.
joojaa,

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.