Delucidazioni sulle schede video

Di recente nelle schede video si sente spesso parlare di termini come pixel shader, rendering, shading… Vediamo di dare delle delucidazione su questi termini e sulle moderne librerie grafiche come OpenGl e DirectX.

SHADING

E’ il processo mediante il quale si mostrano le ombre su una superficie piatta. Principalmente si può usare il Cross Hatching (sovrapposizione di tratti con angoli diversi), oppure tecniche più avanzate di modellazione 3D in modo da cambiare la luminosità del colore tramite algoritmi che tengono conto della fonte luminosa e della sua posizione (quindi angolazione, distanza, distribuzione luminosa).

RENDERING

E’ il processo mediante il quale si generano disegni a partire dalle loro descrizioni (usando per esempio in alcune situazioni lo shading appena visto) tramite dalle classi che modellano il comportamento di ciascun oggetto. Queste descrizioni sono molto complicate e contengono una mole di informazioni molto grande sull’oggetto in questione, come per esempio la geometria dell’oggetto (quindi l’insieme di tutti i punti che lo compongono), tutti i punti da cui un oggetto può essere visto (viewpoint), texture (Immagini di alcune parti dell’oggetto che dovranno tramite un algortmo essere sistemate sulla superficie di quest’ultimo), luci ecc.
Il RENDERING quindi è l’ultimo stadio di visualizzazione di un’immagine che avviene nella Graphics Pipeline o Rendering Pipeline.

GRAPHICS PIPELINE

E’ l’insieme di tutti gli stadi che servono per partire da una rappresentazione 3D tramite dati e ottenere un’immagine “similar 3D” in 2D e quindi visualizzabile su schermo. Il procedimento che consente di fare questo viene anche chiamato rasterization (o rasterizzazione). Si parte dall’immagine costituita da un poligono(Wire frame model), per poi applicare le texture, elaborare le ombre (per mello dello shading o tramite procedimenti multi-texturing) e creare l’immagine risultante (detta Raster) ovvero la griglia di pixels.
Vi sono diversi metodi per associare colori ai pixel, uno di questi è creare un puntatore per ogni pixel ad una tavolozza (procedimento abbastanza costoso se si hanno molti colori). Un altro metodo invece è quello RGB utilizzato comunemente nelle immagini bitmap (ovvero quello di assegnare ad ogni pixel una componente rossa, verde, blu che mescolate danno il colore finale).
Il rendering pipeline è generato di solito per una parte dall’harware della scheda video con dei circuiti appositi, per una parte con delle librerie software quali OPEN GL, Direct3D, DirectX(che sono basate su Direct3D).
Tali librerie devono essere eseguite a livello di processore, che, nelle moderne schede video è la GPU.

OPENGL, DirectX

Spieghiamo un po’ la differenza che c’è tra le due librerie. Innanzitutto la DirectX è una tecnologia Microsoft ed è solo per piattaforme Windows. OpenGL è gestita dall’ARB (Architecture Review Board) ed è invece multipiattaforma (questo ne giustifica anche il lento sviluppo se paragonato a quello delle DirectX). C’è da dire poi che in realtà le DirectX sono un insieme di sotto-librerie, non tutti dedicati alla grafica. Quello più gettonato per la grafica è infatti la parte di DirectX chiamata Direct3D.

  • DirectX contiene infatti (principalmente):
  • DirectDraw per la grafica 2DLOGO DIRECTX10
  • DirectSound per la riproduzione e la manipolazione degli effetti sonori DirectInput per gestire Mouse,Tastiera joystick e quant’altro
  • DirectShow per gestire la riproduzione video
  • DirectPlay per l’ambito del networking (applicazioni di rete)
  • Direct3D per la grafica 3D
  • DirectX Media per le animazioni

Ma perchè si usano queste librerie ? Beh, oltre che per semplificarsi il lavoro di programmatore, le DirectX e le openGL permettono di scavalcare la normale chiamata a piramide dei sistemi operativi (interfacciandosi quindi come driver e non LOGO OPENGLcome libreria classica), riducendo i tempi di esecuzione ed aumentando le prestazioni (una parte comunque rimane sempre destinata al compito di API). Ovvio che OpenGl non può appoggiarsi su DirectX dato che la possibilità di comunicare in via preferenziale senza dialogare prima con il sistema operativo non è possibile se non utilizzando le API di DirectX e viceversa (in più se il compito è quello di aumentare le prestazioni non avrebbe senso avere un interlocutore in più). In realtà la Microsoft era intenzionata a far funzionare openGL solo sopra le sue DirectX (con un degrado pari al 50% di prestazioni). Tuttavia la politica è stata rivista per permettere ai costruttori come ATI o NVidia di costruire i driver opportuni, senza tale degrado. E’ normale pero’ che i giochi affidino alcuni compiti a DirectX ed altri a OpenGL (in ambito windows), per esempio la grafica a openGL e gestione audio, input ecc. al driver DirectX.


SHADER

Uno shader è nell’ambito della computer graphics, una serie di istruzioni da eseguire, che sono usate per realizzare gli effetti di rendering (quindi è un pezzo di libreria grafica come OpenGl o Direct3D). Principalmente si parla di:
Vertex Shaders
Geometry Shaders
Pixel Shaders

Le prime sono funzioni riguardo ai vertici. Tali funzioni sono richiamate nelle trasformazioni dello stato dei vertici per esempio:

  • x,y,z
  • Colore
  • Luminosità
  • Texture

Di solito vengono programmate in Assembler, Cg, GLSL, HLSL.

Le seconde entrano in gioco dopo le Vertex Shaders. Una volta presi in input i vari punti Vertex, queste funzioni trasformano la figura disegnando i poligoni.
Anche queste vengono programmate di solito in Assembler, Cg, HLSL, GLSL.

Ultime le Pixel Shaders, che programmate negli stessi linguaggi, permettono la manipolazione dell’immagine in ogni suo pixel con lo scopo di applicare ombre, luci, effetti, bump mapping (sovrapposizione di texture)… Costituiscono la fase di rendering.
Per ottimizzare l’esecuzione qualche scheda video ha dei chip dedicati al’esecuzione di ognuna di loro, mentre altre famiglie di pensatori hanno introdotto gli stream processors ovvero delle catene sulle quali vengono fatte in sequenza le stesse operazioni. Alla fine sono simili, tranne che, agli stream processors si può affidare qualsiasi shader (sia esso Vertex, Geometry, Pixel o Physics).
Un altro terine gettonato è il ROP (raster operation pipeline) che è una pipeline adibita al rendering.

CONCLUSIONI

Detto questo diciamo che: più vertex ci sono più l’immagine appare ben definita nei contorni (viso labbra, fossette, rughe…);
più geometry e pixel ci sono più l’immagine sembra naturale e “reale”.
Più unità di calcolo ci sono più la scheda è “potente” (supponendo che le code delle pipeline siano uguali alla scheda di confronto e che la velocità di riempimento e di elaborazione siano le stesse in MHz).
Naturalmente non tutto è stato spiegato in quest’articolo ma solo le cose fondamentali. Spero che sià stato comprensibile e utile.

Un saluto ai nostri lettori

by Hochwart

Annunci

~ di Hochwart su giugno 10, 2007.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger hanno fatto clic su Mi Piace per questo: