Vai al contenuto
ilGatsaro

ufficiale Grafica: discussione generale sui titoli presenti e futuri | Dizionario tecnico e regolamento nel primo post

Messaggi raccomandati

hCKEaZE.png Si torna a discutere sull'aspetto grafico dei titoli attuali e futuri di tutte le console e PC. Vista la presenza del Dizionario Tecnico è consentito discutere anche dei numerosi aspetti e problematiche in esso trattati.

REGOLAMENTO GENERALE

  • E' vietato l'uso ripetuto della faccina ":trollface:", ricordando inoltre che post contenenti solo faccine o gif verranno cancellati inizialmente e sanzionati se ripetuti dopo il richiamo di un moderatore.
  • Rispetto reciproco, offese personali = cartellino rosso.
  • Non è la sezione PC, se volete parlare di configurazioni HW nel dettaglio discutetene nell'ottima sezione dedicata.
  • Fare paragoni grafico/tecnici discutibili tra titoli PC e console e viceversa, es: "si ma titolo X su PC lo asfalta e simili" comporterà un ban di 3 giorni.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DIZIONARIO TECNICO

Additive blending Sistema di sovrapposizione di texture trasparenti che permette la definizione dei pixel per somma del colore: il colore finale è infatti uguale alla somma dei colori dei pixel sovrapposti AGP Acronimo di Accelerated Graphics Port: porta dedicata che permette il trasferimento diretto dei dati tra scheda video, CPU e RAM. La porta AGP è una applicazione dell'interfaccia PCI, ma è fisicamente e logicamente separata dal bus PCI in modo da evitare di sovraccaricare ulteriormente questo bus, già utilizzato dalle altre periferiche. La porta AGP ha una frequenza standard di 66 MHz. L'ampiezza massima della banda per il trasferimento di dati attraverso la porta AGP è indicato dal fattore di moltiplicazione: in modalità 1x il volume dei dati può essere al massimo di 266 MB al secondo, in 2x di 533 MB al secondo, in 4x di 1 GB al secondo AGP Texturing o DiME (Direct Memory Execute) Sistema generalmente supportato dalle schede AGP che permette di memorizzare le texture sulla RAM di sistema quando la memoria della scheda video è piena Alpha Blending Processo che gestisce il livello di trasparenza (o di opacità) dei pixel rispetto ai livelli sottostanti. E' il sistema che permette di simulare la foschia, la trasparenza dell'acqua, la visione attraverso vetri sporchi... in parole povere, la dissolvenza in trasparenza! blendResult.jpgAlpha Channel Quantità di memoria del framebuffer riservata ad immagazzinare le informazioni relative al grado di trasparenza di un pixel nel processo di alpha blending. In genere il canale alfa è di 8 bit Anisotropic filtering Un motore grafico intelligente diminuisce il dettaglio grafico delle textures man mano che queste si allontanano dall'osservatore, anche perchè sarebbe stupido buttare a schermo particolari che poi sarebbero impossibili da vedere, e dunque, inutili per la resa finale del gioco. Parente del filtro bilineare e trilineare, il filtro anisotropico rende graduale e gentile alla vista il passaggio da textures in Hi Res a textures in Low Res. In pratica, le textures più lontane sono meno dettagliate ma il filtro anisotropico non ce lo fa notare, perchè maschera il passaggio tra i due diversi livelli di dettaglio, evitando così il fastidioso contrasto. anisotropico7gc.jpgAntialiasing L'antialiasing è il filtro con cui vengono diminuite le "scalettature" (in gergo jaggies) che compaiono lungo i bordi degli oggetti 3D. I jaggies sono particolarmente evidenti lungo le linee oblique e, soprattutto, alle basse risoluzioni, quando il numero di pixel a schermo è minore per unità di area. Il filtro si può; settare a diversa intensità (2x; 4x; 8x; 16x), l'AA a 2x attenuerà le scalettature meno dell'AA a 4x. In presenza di alte risoluzioni, le scalettature tendono a ridursi naturalmente, rendendo inutile - o quasi - il filtro (vedi anche teorema di nyquist). In parole povere, i jaggies sono dovuti alle alte frequenze, l'AA è un filtro di passa basso che taglia le alte frequenze. Una sorta di AA indotto lo abbiamo anche con i vecchi televisori a tubo catodico. API (Application Programming Interface) Librerie di funzioni tramite le quali un'applicazione può accedere alla scheda video, senza preoccuparsi di quale tipo o marca essa sia: le API rendono perciò le applicazioni compatibili con qualsiasi scheda (purchè queste supportino la specifica API nel driver), e consentono ai programmi di funzionare su tutti i tipi di computer e sulle periferiche abilitate. Le API più diffuse sono Direct3D, OpenGL e Glide. AVI(Audio Video Interleave) Uno dei più comuni formati file per le sequenze video digitali in ambiente Windows. Backframe buffer Buffer secondario. Un secondo frame-buffer utilizzato nella tecnica del double buffering per salvare il frame successivo a quella visualizzato BandWidth Larghezza di banda. Indica la quantità di dati trasferibili per unità di tempo. Bilinear Texture Filtering Processo di applicazione di una texture su una superficie più grande della texture stessa o su oggetti 3D dalla forma molto complessa: permette di eliminare l'effetto mosaico dovuto all'espansione della texture. Questo sistema di filtraggio analizza un texel alla volta ed esegue un processo di interpolazione con i 4 texel adiacenti, calcolando in questo modo il colore dei punti di contatto Buffer Vedi Frame buffer Bump Mapping Il bump mapping è un metodo che permette di simulare un maggior numero di poligoni facendo uso di texture bidimensionali. Tipici esempi di utilizzo di questa tecnica sono le fenditure della corteccia di un tronco o i solchi del battistrada di un pneumatico. Grazie al bump mapping, questi particolari possono apparire tridimensionali anche se non sono realizzati realmente con poligoni. Il bump mapping permette cioè di diminuire la complessità geometrica di una immagine 3D, senza peggiorarne la qualità, e questo simulando i poligoni mancanti. Di solito si usano 2 texture per quest'effetto: una è quella principale, l'altra è quella deformante (es. l'effetto caldo). Per bump mapping simil 3d, si usano 3 texture: una normale, una deformante e l'altra volumetrica... penso che i nomi dicano tutto (es. fanghiglia, increspature dell'acqua et similia). Cache Memoria in cui la CPU immagazzina i dati a cui accede più di frequente per evitare di doverli caricare dalla memoria ogni volta. In una scheda grafica la cache (che è contenuta al suo interno) è molto più veloce della RAM di sistema CAD (Computer Aided Design) Disegno assistito da computer. Software utilizzato per la definizione geometrica del modello virtuale di un oggetto mediante appositi programmi (il più noto è AutoCAD) CAE (Computer Aided Engineering) Ingegnerizzazione assistita da computer. Software che consente la simulazione della funzionalità dei processi industriali necessari per la realizzazione degli oggetti progettati con un sistema CAD CAM (Computer Aided Manufacturing) Produzione assistita da computer. Software che traduce i dati geometrici di un progetto CAD in comandi per il controllo delle macchine che fabbricano l'oggetto Clipping Tecnica che tende a "tagliare via" gli elementi scenario che l'osservatore non è - o non dovrebbe essere - in grado di vedere. In poche parole, per alleggerire la mole poligonale che la CPU è chiamata a gestire, da una certa distanza in poi i poligoni non vengono più calcolati. Purtroppo, un "abuso" nell'utilizzo di questa tecnica, ha fatto sì che molto spesso il clipping generasse un fastidioso effetto di pop-up, si parla in questo caso di "bad" clipping: elementi scenario, a volte anche piuttosto grandi (in "GTA: SA" interi palazzi), che compaiono dal nulla a poca distanza dall'osservatore. Per evitare questa antiestetica conseguenza del "bad" clipping si usa il fogging, una sorta di "nebbia" finta che limita l'orizzonte visibile. Cel shading Detto anche Toon shading, permette di eseguire un rendering utilizzando un limitato numero di colori, rendendo l'immagine più simile ad un cartone che non ad un usuale rendering. L'invenzione del codice del Cel shading si deve a "Jet Set Radio" (DC). Invece di utilizzare sfumature da una tonalità di un certo colore all'altra, si ha una divisione netta tra 2 tonalità dello stesso colore. Codec Abbreviazione di coder/decoder (codificatore/decodificatore): indica l'algoritmo di compressione e decompressione utilizzato per archiviare vari formati di dati. Ad esempio, gli algoritmi di compressione dei file MPEG, AVI, RealAudio, ecc... CRT (Catode Ray Tube) Tubo catodico. Acronimo utilizzato per indicare i monitor tradizionali Debugging Fase di rilevamento ed eliminazione dei bug, errori nel codice di programmazione ecc. Displacement Mapping Immagine bitmap in scala di grigi che il programma usa per applicare una rugosità all'oggetto, spostando fisicamente i vertici della mesh in corrispondenza dei pixel più chiari dell'immagine di partenza. E' una tecnica grafica diametralmente opposta a quella progredita dal bump mapping in poi (bump-normal-parallax) basata su giochi di luce atti a simulare geometrie inesistenti, in questo caso infatti si viene a creare, a seconda della texture di riferimento, una microtessitura poligonale; un aumento reale delle geometrie. No-Mapping.jpgBump-Mapping.jpgDisplacement-Mapping.jpgDFP (Digital Flat Panel) Monito LCD che supporta solo ingressi video in formato digitale Direct3D (D3D) API per la gestione della grafica tridimensionale di DirectX: una libreria completa di Application Programming Interface sviluppata da Microsoft a partire dalla release del sistema operativo Windows 95. Poichè tutte le schede grafiche supportano queste librerie, sono divenute uno standard molto diffuso. Double Buffering Sistema che velocizza e rende più fluida la creazione di immagini 3D. Vengono infatti creati due buffer: il front frame buffer contiene l'immagine visualizzata sul monitor, mentre nel back frame buffer viene creato il frame successivo. Naturalmente questa tecnica utilizza il doppio della memoria del sistema tradizionale Driver Software di cui si serve il computer per comunicare con una particolare periferica. Esistono driver per le stampanti, per i video, per i sistemi audio, per i modem, ecc. Per le periferiche più complesse (come le schede grafiche) i driver sono normalmente forniti dal produttore in modo da ottenere le migliori prestazioni e la massima stabilità DXTC (DirectX Texture Compression) Tecnica di compressione delle texture implementata nelle API Microsoft DirectX. DXTC è utilizzata da quasi tutte le schede grafiche di ultima generazione DXVC (DirectX Volume Compression) Tecnica di compressione delle texture volumetriche implementata nelle API Microsoft DirectX a partire dalla versione 8.0. DXVC non fa altro che selezionare ogni livello che compone la 3D Texture e lo comprime utilizzando l'algoritmo DXTC Embedded Memory Memoria Integrata. Memoria video integrata direttamente nel chip grafico e collegata al core grafico da un bus a banda larga. Questo fatto permette al processore grafico di depositare e caricare i dati più velocemente di quanto possa fare con una RAM esterna, con un conseguente miglioramento delle prestazioni. Il limite di questa soluzione è la quantità di memoria integrabile Environment Mapping L'environment mapping è una tecnica grafica utilizzata per rendere gli oggetti lucidi e simil-riflettenti, la prima Console a farne uso fu il mitico Nintendo64 ---> Clicca! Fillrate Misura della potenza di un chip grafico. Il fillrate indica il numero di pixel (pixel fillrate) o di texel (texture fillrate) che una scheda grafica è in grado di elaborare per unità di tempo. In particolare, il pixel fillrate è il prodotto della frequenza di clock del chip grafico per il numero di pixel che le pipeline possono generare per ogni ciclo; il texture fillrate è il prodotto fra il pixel fillrate ed il numero di texture applicabili in un ciclo di clock. Per cui una scheda grafica con un processore a 200 MHz e con 4 pipeline interne, ognuna capace di applicare 2 textures per pixel, avrà un pixel fillrate di 800 MPixels/s (200Mx4) ed un texture fillrate di 1600 MTextures/s (800Mx2) Frame Fotogramma. Nella grafica 3D indica, in genere, ogni singola immagine prodotta dal chip grafico Frame buffer (o frontframe buffer) Buffer principale, zona di memoria che contiene il frame visualizzato sullo schermo. Nella tecnica di double buffering e di triple buffering prende il nome di front frame buffer Framerate Numero di fotogrammi generabili dalla scheda grafica per unità; di tempo. Il framerate è misurato in frame per second (fps - fotogrammi al secondo): si tratta di un valore molto significativo, tanto che è generalmente il valore di riferimento per i test di benchmark delle schede video. Più è alto questo valore, più fluide sono le immagini generate. Il valore minimo al di sotto del quale si notano scatti nell'animazione di una scena 3D è di 30 fps GDI (Graphics Device Interface) Interfaccia per dispositivi grafici. È l'interfaccia grafica di Windows® che gestisce la visualizzazione di qualsiasi oggetto che deve apparire sul desktop. Consente alle applicazioni di riprodurre immagini sullo schermo, sulle pagine di una stampante e su altri dispositivi di uscita Glide API proprietarie di 3Dfx Interactive. GPU (Graphics Processing Unit) Unità di elaborazione grafica. Processore grafico capace di elaborare in modo indipendente alcuni dei processi necessari a generare una scena 3D. Le GPU sono progettate appositamente per gestire i calcoli in virgola mobile che riguardano la grafica 3D: hanno perciò prestazioni migliori delle CPU, in particolare per quel che riguarda le fasi di Transform e Lightning (T&L) Havok 2 Realizzato dalla Dynamics Engineè, l'Havok 2 è un codice modulare adattabile a diversi tipi di piattaforma che nasce dall'esigenza comune a molti studi di programmazione di realizzare videogiochi dalla fisica realistica. Con l'Havok 2, gli effetti di ogni singola azione generano una reazione fisica calcolata in tempo reale (quindi niente pre-script ne pre-animazioni) nell'esatto istante in cui avviene, tenendo conto di una lunga serie di fattori, come la forma degli oggetti coinvolti, il materiale di cui sono composti, la loro velocità vettoriale di spostamento e la gravità. HDR L'HDR permette la gestione simultanea di più esposizioni di luce alla volta, di diverso valore evidentemente, valori che assieme costituiscono un range di dati più "vasto" rispetto a quello utilizzato dalle tecniche di illuminazione tradizionali, replicando quello che nella realtà è del tutto normale, ovvero molteplici fonti di luce, dirette o rifratte ecc.

New_York_City_at_night_HDR.jpg

Ecco, questa fotina tratta da Wikipedia è in HDR. Wikipedia di solito per le spiegazioni tecniche fa defecare ma le fotine le ha sempre bbbone... Come si può facilmente notare, lo spettro di illuminazione, il range di illuminazione, è molto vasto... detto in maniera ancora più mortadellosa di peppe nudo, la luce ha tanti colori e tante diverse intensità, non è una unica luce di colore uniforme e stessa intensità su tutta l'immagine....detta in maniera ancora più mortadellosa, del tipo MAH con la pera in mano: l'HDR sono le luci corolate del mai troppo poco odiato albero di Natale. (by Rock3r) Sicuramente vi sarà capitato prima d'ora di uscire da una stanza poco illuminata per entrare in una una zona sotto la luce diretta del sole, per i primi secondi si è quasi accecati e difficilmente si riesce a distinguere quello che abbiamo attorno. Questo succede perchè i nostri occhi devono abituarsi ad una diversa esposizione di luce e finche le nostre pupille non si sono dilatate o ristrette e quindi adattate di conseguenza non possiamo vedere correttamente. Quindi un oggetto che in una stanza buia ci può sembrare molto luminoso lo può essere in realtà molto meno rispetto ad un altro che è apparentemente meno luminoso sotto la luce del sole (ad esempio prendiamo lo schermo del telefonino acceso da una parte e una lampadina da 75Watt dall'altra). Se volessimo ricreare gli oggetti qui sopra assieme in un mondo virtuale avremmo qualche problema: se lo schermo del telefonino lo rappresentiamo con il bianco più bianco possibile (il bianco è associato alla luce intensa), come facciamo con la lampadina che è decisamente più luminosa? ...E se ci mettiamo pure il Sole? Praticamente non possiamo rendere entrambi correttamente sotto la luce solare, dovremmo rappresentare il Sole bianco e tutto il resto completamente nero perdendo dettagli e contrasto ...a meno che non usiamo l'HDR. Facciamo qualche passo indietro: I nostri monitor e schermi TV solitamente possono visualizzare colori a 8bit per canale con valori compresi tra [0..1] dove 1 è la massima intensità, oppure tra [0,255] (full range RGB, potreste conoscerlo per via della storia del WiiU che ha per ora il range RGB limitato [16,235] ). In poche parole per ogni canale Red, Green e Blue si è limitati a 256 valori diversi appunto compresi tra 0 e 255 che sono sufficienti per visualizzare l'immagine ma assolutamente insufficienti per "generarla" per i motivi che abbiamo visto prima ...però se lavoriamo in un ambiente virtuale possiamo andare ben oltre ai valori [0..1] e questo è sostanzialmente l'High Dynamic Range. Si lavora con i numeri in virgola mobile i famosi floating point numbers per attribuire valori più alti rispetto a quelli canonici per garantire una maggior precisione e dettaglio al sistema d'illuminazione e consentire di avere aree scure davvero scure e aree luminose realmente luminose e preservarne i dettagli in entrambi (senza perdita di contrasto). Ora però sorge un problema, abbiamo generato una bellissima immagine HDR ma ...non possiamo visualizzarla sui nostri monitor. Bisogna ri-elaborarla perchè diventi LDR (Low Dynamic Range) e quindi viualizzabile sui vari monitor. Per farlo entra in gioco il famoso Tone Mapping che è appunto un processo indispensabile per trasporre le immagini HDR e renderle LDR. Può esistere il Tone Mapping senza HDR ma non l'HDR senza il Tone Mapping. HDTV (High-Definition TeleVision) Televisione ad alta definizione. Hidden surface removal Quando si disegna un oggetto in 3D, vi sono degli algoritmi che secondo l'angolatura dello stesso "levano" le superfici a noi invisibili, in pratica, viene buttata a schermo solo le facciata dell'oggetto, mentre il "dietro" viene virtualmente rimosso. A noi che guardiamo non cambia nulla, ma il motore grafico risulta alleggerito perchè è chiamato a gestire la metà dei poligoni. Interpolazione Processo statistico che permette di collegare tra loro due punti o due valori mediante una funzione. Grazie all'interpolazione è così possibile creare i punti intermedi tra due oggetti (permettendo, ad esempio, di sfumare i colori in modo da eliminare l'effetto mosaico e di rendere le immagini più realistiche) LCD (Liquid Crystal Display) Schermo a cristalli liquidi (piccole celle che, stimolate elettricamente, assumono determinati stati di illuminazione e di colore) Lightmap Texture predefinita in cui è già stato premappato l'effetto luce che si desidera ottenere su un'altra texture. È utilizzata per applicare effetti di illuminazione statica ad altre texture mediante l'utilizzo del lightmap lightning Lightmap Lightning Tecnica di illuminazione statica che si basa sull'utilizzo di lightmap per gestire gli effetti di ombreggiatura o illuminazione di altre texture. Consente di alleggerire notevolmente la mole di calcoli alla base di una scena 3D, ma permette solamente l'illuminazione statica della scena e non è perciò applicabile agli oggetti in movimento, che necessitano di effetti di illuminazione aggiornati in tempo reale Lightning Fase del processo di generazione di una immagine 3D. Il chip grafico esegue i calcoli riguardanti le sorgenti di illuminazione presenti nella scena e la loro influenza sulla visualizzazione e sulla colorazione dei poligoni che compongono l'immagine. MESH Reticolo tridimensionale formato da facce triangolari unite per i vertici le une alle altre, in modo da formare una superficie continua. Motion Blur Effetto grafico di sfocatura delle immagini che "in game" viene utilizzato dai programmatori per dare un "senso" di velocità superiore a quello che potrebbero dare i soliti 60fps. Molto usato ad esempio nella saga di "Burnout" (ora passata sotto l'ala di EA) dal 2° capitolo - escluso - in poi. Il segreto sta nel far apparire l'immagine "mossa" --->Clicca! MPEG (Moving Pictures Experts Group) Standard sviluppato da un gruppo di ricerca che opera sotto la direzione congiunta dell'ISO (International Organization for Standardization) e dell'IEC (International Electro-Technical Commission). I sistemi di compressione MPEG vengono utilizzati principalmente per comprimere file video e file audio. Multisampling Modalità di rendering, utilizzata per applicare effetti grafici come l'antialiasing, che fa uso di differenti versioni dello stesso frame. Tutte le copie vengono poi interpolate per ottenere l'immagine finale Multitexturing Applicazione di più texture su uno stesso oggetto Normal Map Le Normal Map sono texture speciali che contengono informazioni dettagliate su un oggetto poligonale. Come le bump map, queste normal map sono pensate per aumentare il dettaglio di un oggetto senza far uso modelli poligonali troppo complessi. Il bello è che l'illuminazione è corretta da ogni angolazione. Per prima cosa il designer 3D crea un modello molto dettagliato usando un numero di poligoni elevato. Successivamente, si passa a un modello semplificato, con molti meno poligoni. Le differenze tra i due modelli sono calcolate e trasformate in una texture (la normal map), che incorpora una buona parte del dettaglio che è andato perso nella semplificazione del modello originale. La normal map viene poi applicata al modello semplificato, per un effetto finale che è molto simile a quello del modello con più poligoni. Naturalmente, siccome la normal map non aggiunge dettagli geometrici, quindi l'aspetto finale non sarà mai completo come quello del modello originale. OpenGL API sviluppata in origine dalla Silicon Graphics (oggi SGI) ad uso professionale. Data la loro alta efficienza e semplicità d'uso (sono infatti librerie aperte) sono oggi utilizzate anche per le applicazioni consumer (giochi e fotoritocco). Si tratta di API molto efficienti, ma che richiedono un hardware potente per essere gestite al meglio PCI (Peripheral Component Interconnect) Bus di sistema sviluppato originariamente da Intel ed utilizzato per connettere al PC una gran varietà di periferiche (schede grafiche, schede audio, controller, schede di rete, modem interni). A causa delle prestazioni ridotte (ha una frequenza di lavoro tipica di 33MHz e un transfer rate teorico di 133 Mb/sec, anche se esistono implementazioni che permettono di lavorare a 66MHZ con una banda di 266MB/s) sono ormai sempre meno le schede grafiche 3D che utilizzano questo bus Pipeline Unità principale di rendering: applica le texture, calcola l'illuminazione, la generazione dei poligoni, gestisce gli effetti grafici. Normalmente ce ne sono più di una, operanti in parallelo Pipelining Tecnologia supportata dalle più recenti schede video AGP. Permette di impartire richieste o comandi alla CPU senza dover attendere il risultato della precedente query. Questo sistema rende lo scambio di informazioni più efficiente, riducendo i tempi di trasferimento dei dati tra AGP, scheda video e CPU Pixel (Picture Element) Unità base di una immagine digitale. Per definire un pixel è necessario conoscere le coordinate che ne definiscono la posizione e il dato relativo al suo colore. Il numero totale di pixel che compongono un'immagine dipende dalla risoluzione: ad esempio, in un immagine con risoluzione 800x600 ci sono 480.000 pixel Pixel Shader Il Pixel Shader è una tecnica che permettere di calcolare innumerevoli effetti grafici su una porzione più o meno estesa di pixel, ogni pixel reagisce in modo diverso agli "stimoli" (chiamiamoli così) provenienti dall'ambiente circostante e dalla luce, non si tratta quindi di effetti computerizzati o precalcolati. I programmatori possono così optare per innumerevoli effetti sempre diversi, ideale per la realizzazione dell'acqua nei VG. --->Clicca<--- Poligono Il poligono è l'unità base di una struttura 3D... più poligoni formano lo scheletro del modello poligonale, sopra al modello poligonale nudo e crudo vengono applicate le textures, che si possono tranquillamente definire "pelle elettronica" o "tessitura elettronica" dei poligoni, il punto di incontro di più poligoni si chiama "vertice".... modellopoligonale5ze.th.jpg I poligoni "triangolari" vengono utilizzati per ricostruzioni di tipo complesso (as esempio i volti e le mani) e, più in generale, per realizzare modelli poligonali altamente dettagliati. La CPU si occupa di calcolare i poligoni (calcolo in virgola mobile). Polygon Throughput Misura delle prestazioni di una scheda grafica che indica il numero di poligoni completamente renderizzati generabili in una unità di tempo. Si tratta tuttavia di un dato spesso ingannevole: per una corretta comparazione di diverse schede grafiche, infatti, occorre conoscere le dimensioni dei poligoni, i filtri usati e quante texture vengono applicate RAM (Random Access Memory) Memoria ad accesso casuale: permette di accedere con la stessa velocità a qualsiasi dato memorizzato. In genere, maggiore è la quantità di RAM, maggiore è il volume di dati caricabili contemporaneamente dai dischi fissi e dagli altri supporti di memorizzazione, che consentono un trasferimento dei dati molto più lento RAMDAC (Random Access Memory Digital-to-Analog Converter) Processore che converte le immagini da sequenze di bit in onde analogiche, e le invia attraverso la porta VGA al monitor. Dalla sua frequenza di lavoro, espressa in MHz, dipende la massima frequenza di refresh ottenibile sul video Ragdoll Dall'inglese "bambola di pezza", questa tecnica viene utilizzata nella gestione della fisica dei corpi. Ogni punto di slogo e/o articolazione subisce l'effetto di un'azione cinetica proveniente dall'ambiente circostante, sia essa un'esplosione, una caduta, un singolo colpo in una determinata parte del corpo. Refresh Rate Il refresh rate indica il tempo necessario affinchè la visualizzazione di una immagine sia completamente rinnovata. Il refresh rate non misura quante immagini vengono visualizzate al secondo (questo è il frame rate) ma quante volte al secondo viene rinnovato lo schermo (sia che il frame visualizzato cambi, sia che rimanga lo stesso). Una bassa frequenza di refresh (fino a 50/60 Hz) è affaticante per la vista, poichè l'occhio umano riesce a distinguere la progressiva costruzione dell'immagine, che si traduce in fastidioso sfarfallio. Rendering Funzione software che, grazie a particolari funzioni e algoritmi, elabora un disegno vettoriale o a punti, attribuendo forme e colori. E' la fase principale del processo matematico che porta alla costruzione di una scena 3D: durante il rendering vengono infatti eseguite diverse operazioni: generazione finale dei poligoni, applicazione delle texture, applicazione di filtri vari (antialiasing, alpha blending). Esistono diversi metodi di rendering: a seconda dell'algoritmo utilizzato può variare notevolmente il risultato finale e la mole di calcoli da eseguire. RGB (Red Green Blue) Codifica additiva dei colori: ogni colore è il risultato della somma di 3 valori numerici, ognuno indicante l'intensità dei 3 colori base (rosso, verde e blu). I canali possono assumere valori da 0 (colore spento) a 255 (colore alla massima intensità): combinandoli insieme si ottiene il colore finale. Le combinazioni possibili sono 16,7 milioni. Risoluzione Numero di pixel di cui è composta un'immagine La risoluzione viene indicata da una coppia di valori: il numero di pixel su una linea orizzontale e il numero di pixel su una linea verticale. Alla risoluzione di 800x600, ad esempio, si avrà una scena composta da 480.000 pixel. Maggiore è la risoluzione e maggiore è la definizione e la pulizia dell'immagine. Poichè la risoluzione indica anche le dimensioni dell'immagine, maggiore sarà la dimensione del monitor, maggiore sarà la risoluzione necessaria per ottenere immagini di qualità: con un monitor 14" a basterà 800x600 per visualizzare immagini nitide e pulite, mentre con un monitor 19" e la stessa risoluzione si avranno immagini sgranate. Sideband addressing Canale aggiuntivo a 8 bit presente nella connessione AGP riservato al transito delle richieste di dati tra processore grafico e sistema, lasciando maggior banda passante al transito dei dati. Sprite Quando ancora non esistevano i modelli poligonali ed i giochi erano in 2D, tutti i personaggi erano sprites che si muovevano su sfondi fissi o in parallasse. Ogni personaggio aveva più frames di animazione, un po' come i cartoni animati, che messi in progressione velocemente davano "movimento" allo sprite. kpc.gifT&L (Transform and Lightning) Due fasi collegate della costruzione della scena 3D costituite dalla conversione (transform) e dall'illuminazione (lighting) dei poligoni che compongono lo scheletro della scena. La fase di transformation, in particolare, consente la conversione di tutti i dati in 3D in un immagine 2D (visto che lo schermo è una superficie piana). In questa fase si generano quindi un insieme di punti (vertici di oggetti volumetrici) che, oltre a essere posizionati in un dato punto della scena, contengono le informazioni relative alla propria illuminazione. Se i punti si spostano sulla scena (o se cambiano le fonti di luce) occorre calcolare la variazione dell'illuminazione di ognuno dei vertici che compongono la scena 3D: questa operazione prende il nome di lighting. T&L Hardware Termine che si usa per indicare una unità di calcolo interna alla scheda grafica in grado di eseguire in modo indipendente le operazioni di Transform and Lightning (che richiedono una grande mole di calcoli in virgola mobile). Grazie all'unità; T&L, progettata appositamente per eseguire questo genere di calcoli, il processo di generazione viene eseguito in modo molto più veloce. Tearing L'effetto tearing è lo "slittamento" orizzontale dell'immagine, come su piani diversi, che si nota soprattutto con i movimenti veloci. Ecco un esempio di tearing:

106180d1240223886-screen-tearing.gif

Texel (Texture element) Elemento base che costituisce le superfici degli oggetti 3D: come il pixel è il punto base che costituisce un'immagine, così il texel è il punto base di una texture. Texture Tessitura o trama: immagine bidimensionale (bitmap) utilizzata per rivestire le superfici degli oggetti 3D in modo da renderli il più possibile realistici. Le texture non vengono semplicemente applicate alle immagini, ma vengono modificate radicalmente attraverso i vari processi di generazione dell'immagine 3D. Texture mapping Processo appartenente al rendering, durante il quale vengono applicate le texture alle superfici dei poligoni. Texture unit Unità di elaborazione dedicata al Texture mapping (applicazione delle texture alle superfici di un poligono). Può essere interna o esterna al processore grafico. Per ogni pipeline ce ne può essere più di una, permettendo così la gestione del multitexturing. Tessellation La Tessellation permette di incrementare la complessità geometrica di un oggetto 3D, rendendolo quanto mai piu' verosimile alla sua controparte reale, senza appesantire il calcolo della stessa con un numero infinitesimo di poligoni. Attraverso una mesh (vedi definizione), una rappresentazione tridimensionale, semplice o complessa che sia, viene arricchita di nuovi elementi, con il numero di poligoni che aumenta in funzione del dettaglio che si vuole ricreare ed in funzione della vicinanza o lontananza dell'osservatore rispetto all'oggetto in questione. Il vantaggio si capisce in fretta: la cpu deve passare alla scheda grafica un numero di dati inferiore, per via del numero ristretto di poligoni che verranno poi “ampliati” al momento, dall’hardware della scheda video. I piu' recenti sistemi di Tessellation applicano circa 16 pixel per poligono e con l'applicazione di determinate tecniche si fa in modo che per gli oggetti vicini gli effetti della Tessellation vengano incrementati, mentre per gli oggetti lontani tali effetti vengano ridotti. Il termine tesselletion deriva dalle tessere (generalmente di forma triangolare) utlizzate per costruire i modelli poligonali. Video dimostrativo:

http://www.youtube.com/watch?v=bkKtY2G3FbU&feature=related

Tile Based Rendering Dobbiamo al Dreamcast questa tecnica. Con il "Tile Based Rendering" il piano poligonale da strutturare viene suddiviso in più "piastrelle" (da cui appunto "Tile"), ogni piastrella è calcolata in modo diverso in funzione della posizione del giocatore... e se ad esempio un albero poligonale si trova dietro ad un muro poligonale, e al giocatore è invisibile, l'albero non viene calcolato e messo a schermo, la CPU non viene impegnata e si può dedicare a calcolare ciò che invece è visibile. Simile concettualmente al clipping, funziona molto ma molto meglio, in quanto non c'è pericolo che generi pop-up. Leva gli elementi scenario in modo intelligente, basandosi su più fattori e non unicamente sulla distanza. Con il clipping infatti, anche se l'oggetto è visibile, viene tolto comunque, basta che sia a 1000 pixel (distanza ipotetica) dal giocatore... e si crea bad clipping! Triangle Setup Fase del processo grafico che porta alla creazione e alla manipolazione degli oggetti 3D in uno spazio virtuale a tre dimensioni, determinando i parametri che dai vertici verranno utilizzati su tutti i pixel del poligono. Richiede l'esecuzione di numerose operazioni matematiche in virgola mobile. Trilinear texture filtering Processo di applicazione di una texture su una superficie più grande della texture stessa o su oggetti 3D dalla forma molto complessa, che permette di eliminare l'effetto mosaico dovuto all'espansione della texture. Questo sistema di filtraggio analizza un texel alla volta e lo interpola con gli 8 texel adiacenti, calcolando in questo modo il colore dei punti di contatto. Triple Buffering Sistema che velocizza e rende più fluida la creazione di immagini 3D, necessario per sfruttare al massimo i veloci chip di ultima generazione, riducendo le attese della visualizzazione su monitor. Rispetto al double buffering, con questa tecnica si utilizzano 3 distinte zone di memoria per contenere i frame da visualizzare: nella prima si salva il frame in fase di visualizzazione sul monitor; nella seconda il frame successivo, già pronto per essere visualizzato; nella terza il frame in fase di creazione. V-Sync (Vertical-retrace Synchronisization) Segnale di sincronismo che indica il completamento della visualizzazione del frame corrente sul monitor. Il V-Sync dà il via allo scambio tra il buffer primario e quello secondario e quindi alla visualizzazione su monitor del frame successivo. Se abilitato, il framerate coincide perciò con la frequenza di refresh verticale (per esempio 60 Hz permettono al massimo 60 fps): con le schede grafiche recenti, è generalmente bene disabilitare il V-Sync, in modo da ottenere migliori framerate. Vertex Punto che definisce i vertici di uno o più poligoni. Z-Buffer Memoria video dove è conservata la posizione di un punto nello spazio 3D. Lo Z-buffer, in particolare, conserva le informazioni dell'asse z di un pixel (e quindi le informazioni sulla profondità del punto). Lo Z-Buffer può avere una precisione a 16, 24 oppure 32 bit: maggiori sono i bit utilizzati, più precisa è l'informazione memorizzata e migliore saà la qualità finale del rendering. Questo buffer permette infatti al processore grafico di selezionare quali pixel dovranno essere renderizzati e quali sono coperti da altri pixel o sono troppo lontani per essere visualizzati.

APPROFONDIMENTI

Metodi di AA (si ringrazia Rock3r):

  • SSAA (SuperSampling AA): E' il metodo di AA per eccellenza. Elimina l'aliasing sulle geometrie, shader aliasing, shimmering...tutto. Tra i contro ci sono l'estremo costo sulle performance e l'uso sproporzionato di VRAM.
  • OGSSAA (ordered grid): Renderizza l'immagine a risoluzioni maggiori per poi scalarla a quella del monitor, è anche chiamato downsampling.
  • SGSSAA (sparse grid): Renderizza l'immagine diverse volte, applicando ogni volta un offset in direzioni diverse. Alla fine le varie immagini vengono unite via post processing per ottenere il risultato finale.
  • MSAA (Multisampling AA): Probabilmente è il più usato ed il più noto. A differenza dell'SSAA è decisamente più leggero ma agisce solo sulle geometrie e quindi non fa niente contro lo shader aliasing. Inoltre non va d'accordo con il deferred rendering, con le DX11 è stata introdotta qualche soluzione anche per questo ma solitamente i risultati sono comunque scarsi (soprattutto considerando il confronto tra il rapporto prestazioni/qualità sui motori forward rendering), basta vedere Battlefield 3.
  • TXAA (non so per cosa stia l'acronimo ma la T dovrebbe essere "Temporal" 😞 E' un nuovo metodo AA sviluppato da NVIDA e Timothy Lottes (lo stesso dell'FXAA ) e disponibile per ora esclusivamente per le schede Kepler e le serie successive di NVIDIA. Gli obiettivi per questo TXAA sono la riduzione significativa dell'aliasing soprattutto in movimento, una migliore resa con le geometrie alpha tested (come lo è solitamente la vegetazione), una resa corretta quando c'è l'HDR e l'assenza di ghosting. Il tutto senza eccessive richieste di risorse hardware. L'immagine finale sarà però meno nitida rispetto ad altre forme di AA. Per Timothy Lottes, però, questo non è un difetto ma un modo per avvicinarsi all'obiettivo di ottenere un risultato più "cinematografico" possibile.

Post-processing AA

  • MLAA (Morphological AA): Metodo post-processing originariamente presentato da Intel ed usato su PS3 attraverso il Cell (God of War 3 dovrebbe essere stato il primo titolo con MLAA). Successivamente AMD ne ha creato una versione esclusiva per le proprie schede video. L'MLAA analizza il frame, cerca le zone con alto contrasto e applica un blur localizzato. Le considerazioni che seguono sono valide per la versione di MLAA che gira sulle GPU, ossia quella selezionabile via driver dai possessori di GPU AMD. Riduce l'aliasing ma per forza di cose non preserva la nitidezza dell'immagine dato che intacca anche le textures. Crea problemi ai testi e all'HUD. Personalmente ritengo la versione AMD ancora molto acerba rispetto ad altre forme di AA simili.

  • FXAA (Fast Approximate AA): Deriva direttamente dall'MLAA ed è stato sviluppato da Timothy Lottes. E' sempre post processing e si può inserire facilmente in più o meno qualsiasi motore.
  • Migliora sensibilmente sia le performance che la qualità rispetto all'MLAA ma ne mantiene anche i difetti dovuti al fatto che è pur sempre un metodo post processing.
  • SMAA (Subpixel Morphological AA): Simile a quanto scritto sopra per l'FXAA ma con la differenza che preserva in modo maggiore la nitidezza dell'immagine. Inoltre alcune versioni di SMAA lavorano in coppia con particolari forme di MSAA/SSAA per una migliore resa con i sub-pixel. La versione scaricabile e applicale sui PC (Injector) però non supporta queste features. E' sviluppato da Jorge Jimenez.

MLAA (sia CPU che GPU) e FXAA sono presenti anche su console ma, dato che le loro implementazioni variano parecchio da gioco a gioco, la lista qui sopra prende in analisi solo le loro forme più evolute presenti su PC.

Deferred rendering (si ringrazia Rock3r):

Forward VS Deferred Con il rendering tradizionale (forward rendering) il processo di shading, ossia la determinazione del colore finale del pixel, avviene più o meno in questo modo: per ogni geometria nella scena si guarda quale luce o luci la interessano e infine si “calcola” il risultato finale basandosi sul materiale dell'oggetto stesso. Questo ci porta ad avere un costo computazionale dello shading pari a numero geometrie * numero luci (nella peggior ipotesi). Quindi, se abbiamo più oggetti colpiti da diverse luci, verrebbero sprecate parecchie risorse perchè ad ogni luce aggiunta si è costretti a renderizzare un'altra volta la geometria e se ad esempio avessimo 3 oggetti poligonali uno davanti all'altro verrebbero compresi nel processo di shading pure quelle parti non necessarie perchè sono coperte dall'oggetto che sta davanti e che quindi non sono visibili. Con il deferred rendering invece viene creato il cosiddetto “g-buffer” che contiene gli attributi fondamentali delle geometrie (vedremo più avanti nel dettaglio), in seguito l'illuminazione è processata usando appunto le informazioni presenti nel g-buffer e viene applicata proprio come se fosse un effetto di post processing in 2D. Quindi la formula sarebbe numero geometrie + numero luci. E' chiaro che nelle situazioni con più di un paio di luci dinamiche il risparmio di risorse spese per l'illuminazione è tantissimo, potenzialmente si possono avere centinaia di luci dinamiche assieme senza troppi problemi. Inoltre la differenza tra avere una moltitudine di luci oppure averne una sola ma che copre gran parte delle geometrie è quasi nulla ...più o meno. G-buffer (Geometry buffer) Il g-buffer è un insieme di più buffer intermedi (render targets) che contengono le informazioni necessarie per il processo dell'illuminazione, quindi i vari attributi delle geometrie e dei materiali. Sono richiesti almeno questi 3:

  • Albedo, diffuse o texture color: semplicemente il colore “neutro” delle textures.
  • Depth (oppure world position che comunque può essere ottenuto dal depth): necessario per quelle luci che non colpiscono tutti gli oggetti in modo uguale, come le luci locali che interessano solo gli oggetti più vicini.
  • Normal: in breve definisce se una superficie deve essere illuminata o no.

Oltre a questi solitamente ci sono pure altri attributi come specular intensity/power, material ID, emissive... quello che ritengono opportuno gli sviluppatori insomma. MRT (Multiple Render Targets) Permette di creare diversi render targets in un solo passaggio evitando quindi di renderizzare la scena più volte (tante quante sono i render targets). Ha lo svantaggio che ognuno di questi render targets deve avere la stessa grandezza in bit: ad esempio se per l'albedo abbiamo bisogno di un formato a 32 bit come R8G8BA8 (i classici Red Green Blue Alpha con in questo caso 8 bit per canale) allora pure il Normal sarà per forza a 32 bit, così come il Depth. Però se 8 bit per canale bastano per l'albedo (RGB 24bit + 8 liberi) non lo sono del tutto per il Normal … ma se vogliamo almeno 16 bit per canale (totale 64) con quest'ultimo dovremo averli pure per il colore delle textures e questo sarebbe uno spreco di spazio. L'importanza della scelta di cosa mettere nel g-buffer e come metterlo fanno davvero la differenza perchè ovviamente bisogna trovare il giusto compromesso tra la qualità che potrebbe dare un g-buffer bello carico e le performance maggiori dati da uno leggero e meno esoso di memoria. Per fare un esempio su come gli sviluppatori spremono al massimo tutto il possibile possiamo prendere i Guerrilla con Killzone 2: il formato del loro g-buffer è R8G8B8A8 (32 bit), per l'albedo sono andati con i classici 8 bit per canale RGB con gli 8 bit rimanenti usati per l'occlusione del sole pre-renderizzata, mentre per il Normal al posto di usare 8 bit per ognuna delle assi necessarie X,Y,Z (con 8 bit rimanenti) hanno preferito usare 16 bit per X e 16 per Y estrapolando Z con un calcolo matematico. In questo modo hanno una maggior precisione per questo Render Targets risparmiando memoria al costo di un po' di potenza computazionale. Vantaggi e svantaggi del deferred rendering: Pro

  1. Luci dinamiche come se piovesse e senza troppa preoccupazione per le performance.
  2. Semplice da implementare.
  3. Niente spreco di risorse dovute al fatto che solo i pixel visibili sono processati.
  4. Con le informazioni del g-buffer si possono inserire diversi effetti di post processing in modo relativamente semplice.

Contro

  1. Nessun supporto nativo per l'hardware antialiasing, l'MSAA (risolto in parte).
  2. Niente trasparenze (...non è vero... ma vediamo dopo).
  3. Il costo sulla memoria è importante, sia come spazio richiesto che come bandwidth.
  4. La differenziazione dei materiali è strettamente legata al g-buffer e quindi potenzialmente limitata.
  5. Tante luci sì ...ma quelle che castano ombre saranno comunque limitate.

Guardiamo un po' i vari contro. I primi due sono i più palesi, se avete qualche idea di come funziona l'MSAA è chiaro che per averlo in modo corretto è necessario applicarlo ad ogni render target e fino all'arrivo delle dx11 era impossibile farlo con l' MRT (ecco perchè non c'è il supporto all'MSAA per i motori deferred che usano le dx9). Tuttavia anche con le dx11, facendo due calcoli, l'MSAA diventa davvero pesante in termini di risorse e in alcuni giochi viene applicato in modo oculato al fine di non distruggere le performance (Hitman:Absolution ad esempio lo usa solo su alcune geometrie a discrezione degli sviluppatori). Questo è il motivo per cui spesso si vede l'implementazione di AA post processing nei motori deferred. Piccola parentesi, spesso sento qualcuno che si chiede del perchè serva per forza inserire l'MSAA quando MLAA/FXAA/SMAA fanno bene il loro lavoro e a volte pure meglio ad una frazione delle risorse... ecco, se ve lo chiedete pure voi avete la mia invidia perchè vuol dire che vivete meglio di me

:asd: Ci sarebbe davvero da scrivere pagine e pagine sull'aliasing :sisi: Il problema con le trasparenze è pure lui abbastanza evidente, infatti i g-buffer ha solo le informazioni sulle superfici vicine e non su quelle che stanno “dietro”. C'è il modo per avere oggetti trasparenti con il deferred rendering ma è talmente complesso che al 99,9% gli sviluppatori ritornano al forward rendering quando si tratta di renderizzarle. In definitiva questo metodo di rendering si sta diffondendo sempre di più (il futuro Unreal Engine 4 ad esempio sarà deferred), ha i suoi vantaggi come pure qualche problema apparentemente insormontabile. Ci sono già soluzioni ibride o modificate ad hoc per avere i maggiori benefici possibili e le possibilità sono grandissime, l'illuminazione globale in tempo reale è possibile appunto grazie al fatto che si possono posizionare moltissime luci per simularne l'effetto. Sarebbe praticamente infattibile con un motore forward. Vedremo in futuro come si evolverà la situazione :morris82: Bon, questa è giusto un' infarinatura generale su un argomento che comunque è bello complesso (g-buffer ed i suoi formati e MRT soprattutto). Io non sono un granché con le spiegazioni e non sono né programmatore né sviluppatore ma spero comunque di essere stato di qualche aiuto :nev: Se avete domande o correzioni scrivete pure.

Supersampling (si ringrazia Rock3r)

In breve, con il supersampling si prendono più samples per ogni pixel in modo che quando l'immagine sarà risolta verrà fatta la media tra i diversi samples che darà il colore finale del pixel: immagina un normale rombo nero su sfondo bianco, senza AA avresti solo pixel completamente neri e pixel completamente bianchi, mentre con l'AA avendo più samples (e facendo la media del colore) il risultato mostrerebbe dei pixel sui lati obliqui di diverse gradazioni di grigio riducendo così l'aliasing (più samples vengono usati e più si riduce l'aliasing ...e più pesa sulle prestazioni). Nei metodi post processing come FXAA e SMAA base invece "semplicemente" il programma cerca gli "spigoli" e applica del blur ...certo è che lo shader deve riconoscere dove applicare il blur e dove no, ma ti basta sapere che i samples per pixel sono sempre uguali a 1 e questo fa la differenza tra le 2 tipologie (MSAA e SSAA/ vs AA post processing). Ora, tornando all'SSAA questi samples possono esser presi seguendo una griglia ordinata ed il risultato sarebbe il classico OGSSAA che non è altro che quello usato spesso adesso su PC tramite downsampling, aumenti la risoluzione per ogni lato e scali a quella del monitor. Se invece li prendi in ordine sparso o ruotando la famosa griglia hai rispettivamente SGSSAA e RGSSAA, non mi addentro di più su questi due perchè ho ancora diverse cose poco chiare a riguardo. All'inizio credevo che l'Ubersampling di The Witcher 2 fosse OGSSAA ma poi da quanto ho capito è invece più simile a SGSSAA/RGSSAA. In diversi giochi per rimediare all'aliasing è possibile renderizzare a risoluzioni particolari, magari lasciando un' asse alla res "normale" e l'altra al doppio o comunque maggiore a quella del target finale, poi verrà appunto scalata solo su quell'asse riducendo così l'AA es. gioco generato alla risoluzione 1280*1440 ---> immagine finale 1280*720. Così avresti una via di mezzo tra prestazioni e resa visiva. Mi viene in mente Soul Calibur 5 i cui sviluppatori fecero qualcosa di simile: su X360 il gioco veniva renderizzato ad una risoluzione leggermente superiore e poi riportato a 720p, quindi usufruiva del supersampling. Certo, il risultato non cambiava la vita ma è giusto per dimostrare che questa tecnica può tranquillamente essere usata anche sulle console attuali, in questo caso addirittura in un titolo a 60fps. Quindi supersampling è un termine piuttosto generico, non bisogna subito pensare alle opzioni PC ammazza framerate e non implica per forza l'uso di risoluzioni altissime ma comprende qualsiasi cosa che permetta di avere più di un sample per pixel (per ogni pixel). Non è un metodo particolarmente efficiente, anzi... però, dato che si stanno diffondendo i motori deferred, l'MSAA è sempre meno usato a causa delle scarse prestazioni su questo tipo di engine e quindi potrebbe essere un'alternativa. E' per questo motivo che ho ipotizzato la possibilità di usare il supersampling a supporto dell'FXAA, qualcosa di leggero come 1920*1440@1080p (scalando solo un asse) o 1,2x per entrambi gli assi ...insomma che sia anche poco ma che aiuti l'FXAA che ricordo, avendo a disposizione solo un sample per pixel, usato da solo avrà sempre problemi di shimmering e altri artefatti, negli screenshot va anche bene ma in movimento no. Ultima nota, il supersampling è spesso usato anche nei vari buffer intermedi in un gioco o solo selettivamente: esempio in Killzone 2 per il pass della luce (è deferred pure lui) o molto più comune è il cosiddetto "transparency supersampling" che è applicato solo alle textures alpha (usato parecchio soprattutto sulla vegetazione tipo foglie, erba, ecc...).

Physically Based Rendering (si ringrazia Rock3r)

Come ho dette ieri volevo parlare un po' del famigerato Physically Based Rendering (abbreviato PBR) dato che è una delle "ultime " novità nel campo della grafica 3D, real time e non. The Order 1886, Ryse, Killzone Shadowfall, Star Citizen (che sta andando verso il PBR), il futuro Unreal Engine 4 e molti altri progetti presenti e futuri hanno come denominatore comune proprio il physically based rendering. Ho trovato un bel portfolio sul forum di Polycount di un artista che ha iniziato a lavorare con PBR e le immagini dei suoi lavori sono utili per capire i cambiamenti rispetto a prima: Questa è una pistola da softair, renderizzata usando Toolbag 2 di Marmoset che è un avanzato motore real-time usatissimo dagli artisti per "testare" i loro lavori sul campo, recentemente passato anche al PBR.

joerivromman_AR_7_Small.jpgjoerivromman_AR_6_Small.jpg

Questo è il wireframe:

joeriVromman_ARwires_2_Small.jpg

E infine queste sono le textures usate:

Ar_Flats.jpg

...l'ho messa solo perchè è bellissima

:asd: ma in verità voglio prendere in esame un altro suo modello con cui si riesce a capire meglio la situazione:
WeldingTroch_JoeriVromman_1_Small.jpgWeldingTroch_JoeriVromman_3_Small.jpg
Wireframe:
WeldingTroch_JoeriVromman_2_Wires_Small.
Textures, dall'alto a sinistra in senso orario: albedo, reflectance, normal e roughness:
WeldingTroch_JoeriVromman_2__F_Small.jpg
Le textures sono quelle che ci interessano:
  • Albedo: è il colore base del materiale, precedentemente anche chiamato diffuse (pure adesso in verità ma è meglio solo albedo d'ora in poi). Se avete visto una texture normale prima d'ora questa vi sembrerà un po' diversa dal solito, il saldatore come vedete dal render è tutto colorato mentre il suo albedo è praticamente solo nero, grigio e rosso. Il motivo è presto spiegato, tutti i materiali metallici (conduttori) con il PBR devono avere l'albedo nero, gli altri tipi di materiali che non sono conduttori (legno, plastica, rocce, tessuti vari e tutto il resto) invece useranno il colore base reale, nel caso della saldatrice il manico è di gomma mentre il resto è fatto di materiali metallici. Il motivo è strettamente legato all'interazione tra materiali e luce che c'è anche nel mondo reale ma non voglio dilungarmi oltre quindi si fa così perchè sì, bon. Un'altra cosa molto importante nell'albedo quando si lavora con il PBR è che deve avere meno informazioni sulla luce baked possibili, meglio niente del tutto perchè sarà poi il motore in tempo reale ad occuparsi di queste cose. Prima era normale creare una texture diffuse contenente già alcune informazioni come ad esempio l'occlusione ambientale ma ora non serve più, sarebbe pure deleterio. Se si vuole l'AO si crea una texture a parte.
  • Reflectance: definisce la quantità di luce che viene riflessa da un materiale. A qualcuno potrebbe far venire in mente le vecchie specular maps ...ma quelle non erano textures solitamente in scala di grigi mentre questa è tutta colorata? WTF!? Il fatto è che la reflectance map è molto diversa ed il motivo per la quale qui sia piuttosto colorata deriva da quello che ho scritto sopra, i metalli avendo l'albedo nero "prendono il colore" da questa texture. Se ci fate caso nella realtà i riflessi speculari dei metalli hanno proprio il colore del metallo, se prendete un lingotto d'oro (chi non ce l'ha sottomano) vedrete che il suo riflesso speculare è tendente al giallino, idem il rame (sull'arancione/rosa) o il bronzo (... bronzeo) o qualunque altro metallo come si vede bene nel render del saldatore. Questa texture dovrebbe anche tenere conto dell'indice di rifrazione -IOR- di un oggetto, si cercano i dati dei materiali reali online e a seconda del loro valore RGB il motore usa queste informazioni per il calcolo per lo shading.
  • Roughness: (anche chiamata gloss map) descrive quanto un materiale è ruvido o liscio, parlando a livelli microscopici. Quindi per farla breve se è uno specchio o no, con tutte le vie di mezzo; in questo caso più la parte è bianca e più sarà lucida e viceversa. Guardate il pezzo rosso di plastica del saldatore, nella roughness map è grigio scuro ossia molto poco lucido (non glossy). La quasi totalità dei graffi, danni da usura e cose simili sono stati apportati in questa texture e questi piccoli dettagli nel risultato finale fanno la differenza, modificandola ad hoc si può anche usare per simulare un materiale bagnato. PBR tra le tante cose equivale anche a energy conservation, la quantità di luce riflessa non può essere maggiore di quella ricevuta e questa immagine mostra bene le conseguenze: 640xc3u04.jpg Più la superficie si fa "ruvida" (rough) e più il riflesso si allarga e allo stesso tempo diminuisce di intensità, proprio per il principio della conservazione dell'energia.
  • Normal: grazie a dio la normal map è uguale al passato :asd:
NB: Questa veloce descrizione vale per questo specifico lavoro: ogni motore PBR gestisce la situazione a modo proprio, il concetto di PBR è sempre lo stesso ma la gestione delle textures può variare, ad esempio c'è chi usa la roughness map al contrario (bianco = rough) o se dovessi fare lo stesso lavoro per un modello fatto per l'Unreal Engine 4 dovrei scrivere un altro bel pò dato che ci sono diverse variazioni. Toolbag 2 permette più approcci proprio per venire incontro agli artisti ma alla fine ci interessa poco. Questo è il sito del tizio alla quale ho rubato le immagini: http://www.joerivromman.com/index.html

Skin Rendering (si ringrazia Cifa per il contributo)

Visto che oggi di studiare non ne ho voglia scrivo una prima puntata di 'sta cosa che annoierà i più, ma magari ad uno o due può interessare

:asd: Mi metto a scriverla a puntate perchè so che non avrò mai il tempo di scrivere un papiro tutto di colpo, quindi di questo mi scuso in anticipo. In testa ho una cosa del tipo: :D Ora purtroppo mi devo fermare che c'ho un fottio di roba arretrata da studiare, spero di scrivere la seconda parte al più presto e/o aggiungere qualcosa a questo. Questo post oltretutto non contiene neanche per sbaglio tutti i dettagli che sarebbero da coprire quando si parla delle sopracitate cose, ma era giusto per dare un infarinatura. Oltretutto mi sono buttato in questo campo da una settimana circa, quindi potrei aver commeso diversi errori di cui mi scuso anticipatamente :) Spero di correggerli nel caso me ne dovessi accorgere. Altra cosa da sottolineare: non mi sono focalizzato su come ottenere le texture, normali ed i valori/parametri necessari per la nostra BRDF e (approssimazione di) BSSRDF. E' n'altra faticata di cui se volete posso raccontare qualcosa. ___ NOTA 1: Per la componente speculare, viene tipicamente usata la Kelemen/Szirmay-Kalos Specular BRDF per la sua efficienza. In questa tocca considerare termini di Fresnel e tanta altra roba che purtroppo difficilmente interessa e che non è facilmente spiegabile ad un "pubblico" eterogeneo e con credo non una preparazione universitaria di fisica/matematica/grafica. ___ EDIT: Mi scuso anche del fatto che ci saranno milioni di errori grammaticali e che magari l'esposizione è confusa. Ormai sto perdendo l'abitudine a scrivere in Italiano e ho scritto tutto di getto :) EDIT2: Maggior parte di questo post si basa sul capitolo 14 di GPU Gems3 di Nvidia e scritto da d'Eon e Luebke. E' un articolo formidabile che invito tutti quelli che desiderano di dargli un occhio. Nelle prossime parti questa fonte verrà riutilizzata, ma attingerò da alcune altre.
  • 1/3: Motivazioni e basi sull'interazione con la luce
  • 2/3: Algoritmi real time: qualche base (questa parte purtroppo sarà castrata dato fino a quanto posso spingermi senza introdurre tecnicismi )
  • 3/3: Particolari su altri vari fattori e componenti coinvolte. Il colore.
Il rendering della pelle dei volti è un qualcosa di particolare rispetto al rendering di altri materiali/oggetti. Ma perchè ci preoccupiamo tanto? Perchè ci sono una marea di tecniche studiate quasi appositamente per la pelle? Perchè non possiamo usare le tecniche usate per qualsiasi altro oggetto? La risposta è ovvia, è difficile da fregare l'occhio umano su qualcosa che vede e su cui si concentra tutti i giorni. La faccia è indubbiamente la parte del corpo che più osserviamo dato che probabilmente è la parte del corpo con cui più comunichiamo. Diventa dunque indispensabile fare di tutto per produrre risultati decenti. Ma cosa rende la pelle tanto diversa? Prima di rispondere alla domanda devo introdurre brevemente (e male, se vi interessa c'è taanto da dire) la Bidirectional reflectance distribution function (d'ora in poi BRDF).
300px-BRDF_Diagram.svg.png
Ignorando tutti i vari simboli, la BRDF in un contesto di PBR, ci dice come la luce viene riflessa da una superficie, in particolare data una direzione da cui la luce arriva, ci dice in che percentuale la luce viene riflessa in una data direzione d'uscita (di riflessione). Questa sarà diversa per ogni materiale dato che ovviamente ogni materiale riflette la luce in modo diverso. Ci sarebbero almeno una decina di pagine per spiegare meglio la BRDF, ma non ci è utile adesso e penso che sia noioso ai più (ancor più di questo post qua :asd:) quindi mi fermo a questo. Bene, fighissimo, usiamo la BRDF anche con la pelle! Eh no. E' proprio qua la chiave di tutto. Se guardate la figura di prima potete vedere come con la BRDF non ci si interessa affatto di quello che succede all'interno della superficie e nella pelle succede di tutto quando la luce penetra all'interno. Diventa dunque fondamentale considerare il subsurface scattering, ovverosia il processo a cui è "sottoposta" la luce sotto la pelle. Questa farà un sacco di giri, verrà in parte assorbita e poi uscirà fuori.
fZZmUa6.pngBS9GLYl.jpg
Queste figure sono stilizzate, ma immaginate che ogni freccia che esce dalla pelle è il frutto di un percorso strambo tipo quelli illustrati qua. Questo rende la pelle un materiale translucido e questo è particolarmente evidente per parti molto sottili come le orecchie o Tutto questo non si può descrivere con la BRDF così com'è. Solo una piccola parte (circa il 6%) della luce viene direttamente riflessa e questo è dovuto allo strato olioso che vi è in superficie, ma ovviamente 'sto 6% non è abbastanza per usare solo la BRDF. Tuttavia questo aspetto esiste e il nostro obiettivo è di arrivare ad un risultato il più realistico possibile, quindi manco possiamo ignorarla. Nel modello utilizzato [Nota 1] ci sono tre fattori con cui viene permesso di giocare tipicamente (anche se i valori migliori sono "noti") per ottenere diversi "aspetti". Un fattore che entra in gioco per il termine di Fresnel (non ve ne preoccupate), un fattore di "roughness" che può variare per tutta la faccia e un fattore, ancora variabile su tutta la faccia, che ci indica quanto una porzione è "scintillante". Il variare di questi non porta a cambiamenti drastici, ma introduce sottigliezze molto importanti al risultato finale (ricordate? L'occhio umano è difficile da fregare per la pelle). Qua ad esempio due casi:
14fig08.jpg
Se osservate il naso e le labbra si osserva come in un caso sono più lucenti che nell'altro. Da sottolineare come questi parametri non li ho qua descritti in modo esaustivo perchè non voglio appesantire il tutto che già mi sa che è pesante. Il risultato senza considerare il subsurface scattering (d'ora in poi SSS) è il seguente:
hQFDB7M.jpg
Che percarità, non fa schifo, ma sembra molto "duro", asciutto e rozzo, non di certo come la nostra pelle è. Per far fronte a ciò si usa la BSSRDF (Bidirectional Surface Scattering Reflectance Distribution Function), che tiene conto di questo fenomeno e quindi mettere da parte quasi totalmente da parte la BRDF. Facendo ciò il risultato postato diventa quanto qui è mostrato a destra:
14fig02.jpg
Ah-ha! Molto più morbido e realistico rispetto al risultato prima mostrato. Stiamo nella giusta direzione. Ora senza che vi butto qua equazioni integrali che fanno paura vi dico subito che è impossibile calcolare la BSSRDF così com'è in real time, ma proprio no e non penso si potrà prima di un numero discreto di anni. Bisogna trovarne una approssimazione, che però per comprendere servono un po' di basi di grafica/image processing/matematica che non posso di certo riassumere in un post sul forum o quantomeno non in modo completo. Se comunque qualcuno è interessato posso provare

Condividi questo messaggio


Link di questo messaggio

Il topic perfetto finalmente per parlare della grafica, ottimo Gatsu. ;)

Condividi questo messaggio


Link di questo messaggio
Non c'era già il topic?:azz:

 

Si ma abbiamo deciso di aprirne uno nuovo, più completo e ordinato :asd:

Condividi questo messaggio


Link di questo messaggio

Ebbravi :hail: ma devo prima impararmi tutta la terminologia. troppe informazioni...:paura:

Condividi questo messaggio


Link di questo messaggio

Non essendo un tecnico mi esulo da dare giudizi, ma per dare il via alla discussione metto i giochi che secondo me almeno su PS3 sono i migliori:

 

God Of war 3

 

 

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103.jpg

 

avermediacenter20020103x.jpg

 

avermediacenter20020103.jpg

 

 

Uncharted 2

 

 

cliffhanger002150.jpg

 

cliffhanger002489.jpg

 

cliffhanger003038.jpg

 

cliffhanger003398.jpg

 

cliffhanger003670.jpg

 

cliffhanger004518.jpg

 

cornerd003010.jpg

 

cornerd005183.jpg

 

cornerd006500.jpg

 

 

 

Killzone 3

 

 

avermediacenter20020208.jpg

 

avermediacenter20020208.jpg

 

avermediacenter20020208.jpg

 

avermediacenter20020208.jpg

 

avermediacenter20020208.jpg

 

avermediacenter20020208.jpg

 

avermediacenter20020208.jpg

 

avermediacenter20020208.jpg

 

avermediacenter20020208.jpg

 

avermediacenter20020208.jpg

 

 

Crysis 2

 

 

jaksqc.jpg

 

ix75mv.jpg

 

m79d05.jpg

 

xp7osn.jpg

 

2luf6h2.jpg

 

15hlnrl.jpg

 

2u922cm.jpg

 

33ll3wk.jpg

 

b5me5i.jpg

 

2zea5jk.jpg

 

 

 

Spero di aver fatto lavoro gradito :)

Condividi questo messaggio


Link di questo messaggio

Mamma mia God Of War...Ogni volta che guardo uno screen rimango a bocca aperta:asd:

Condividi questo messaggio


Link di questo messaggio
Allelujia

 

Già, era diventata la cosa più insopportabile del topic e speriamo di riuscire ad esportare la regola in tutto il forum! :asd:

Condividi questo messaggio


Link di questo messaggio

Ho capito cos'è HDR solo all'ultima riga. :rickds:

Condividi questo messaggio


Link di questo messaggio

*** santo...no ragazzi io passo...nel tempo che impiegherei a leggere il dizionario ci finisco 2 volte oblivion...ma davvero ne avete voglia?! Ma andate a giocare! :game:

Condividi questo messaggio


Link di questo messaggio

Finalmente vedo postare belle immagini per Crysis. :asd:

Condividi questo messaggio


Link di questo messaggio
So figo eh? :.bip:

Se solo non fossi Sonaro... :tristenev: :tragic: :cry:

 

...si scherza eh! :asd:

 

Condividi questo messaggio


Link di questo messaggio

Ieri ho rigiocato un paio di capitoli di Uncharted 2 e oltre al divertimento assicurato non ricordavo una grafica così pulita, colorata, con un enorme varietà di texture e con livelli così ben strutturati. Se il terzo manterrà le buone cose del suo predecessore e migliorerà alcuni effetti mi direi più che soddisfatto.

Condividi questo messaggio


Link di questo messaggio

Complimenti per chi ha fatto il dizionario tecnico, quando ho più tempo me lo leggo meglio.

Condividi questo messaggio


Link di questo messaggio
Si ma abbiamo deciso di aprirne uno nuovo, più completo e ordinato :asd:

 

Quoto, questo sembra molto più pulito e ordinato di quell'altro, pieno di trollface eccetera, bravi così :sisi:

 

Appena potrò leggerò il dizionario tecnico :asd:

Condividi questo messaggio


Link di questo messaggio

Sono sempre più convinto che il vero metro di paragone sia uncharted 2, per via della tipologia di gioco. Sarà anche a corridoi, ma di certo non sono ai livelli di god of war 3, puoi mirare verso quello che vuoi, e il tutto mantenendo un livello grafico altissimo. Un uncharted con telecamere dinamiche ma pur sempre fisse(perchè al contrario di qualcuno che la pensa diversamente, se una telecamera non la puoi muovere a piacimento è fissa), alla gow 3 diciamo, avrebbe una grafica ancora più bella. Tutto chiaramente secondo me, non vorrei scatenare l'ira di qualcuno ;p

Condividi questo messaggio


Link di questo messaggio
Sono sempre più convinto che il vero metro di paragone sia uncharted 2, per via della tipologia di gioco. Sarà anche a corridoi, ma di certo non sono ai livelli di god of war 3, puoi mirare verso quello che vuoi, e il tutto mantenendo un livello grafico altissimo. Un uncharted con telecamere dinamiche ma pur sempre fisse(perchè al contrario di qualcuno che la pensa diversamente, se una telecamera non la puoi muovere a piacimento è fissa), alla gow 3 diciamo, avrebbe una grafica ancora più bella. Tutto chiaramente secondo me, non vorrei scatenare l'ira di qualcuno ;p

 

Però conta che God Of War gira pure a 40/45 fps di media ,quindi se lo lockassero a 30 avrebbero,forse,altre risorse da spendere altrove:D

Condividi questo messaggio


Link di questo messaggio

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per poter lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra comunità. È facile!

Registra un nuovo account

Accedi Subito

Sei già registrato? Accedi da qui.

Accedi Adesso
  • Navigazione Recente   0 utenti

    Nessun utente registrato visualizza questa pagina.

×

Informazione Importante

Abbiamo inserito cookie sul tuo dispositivo per contribuire a migliorare questo sito web. Puoi modificare le impostazioni dei cookie, altrimenti supponiamo che tu possa continuare.