Computer grafica 3D: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nella voce relativa ad uno dei motori di rendering era assente il collegamento ad uno di questi che è stato correttamente recensito su wikipedia per cui ho ritenuto utile per tutti aggiornare il link di collegamento della pagina.
mNessun oggetto della modifica
Riga 3:
 
== Aspetti teorici ==
La grafica computerizzata tridimensionale è una tecnica per rappresentare mediante modelli matematici un'immagine bidimensionale in oggetti tridimensionali. Schematicamente, il metodo di produzione della computer grafica 3D è composto da due elementi: una descrizione di ciò che si intende visualizzare (scena), composta di rappresentazioni matematiche di oggetti tridimensionali, detti "modelli", e un meccanismo di produzione di un'immagine 2D dalla scena, detto "motore di render" che si fa carico di tutti i calcoli necessari per la sua creazione, attraverso l'uso di algoritmi che simulano il comportamento della luce e le proprietà ottiche e fisiche degli oggetti e dei materiali.
Schematicamente, il metodo di produzione della computer grafica 3D è composto da due elementi: una descrizione di ciò che si intende visualizzare (scena), composta di rappresentazioni matematiche di oggetti tridimensionali, detti "modelli", e un meccanismo di produzione di un'immagine 2D dalla scena, detto "motore di render" che si fa carico di tutti i calcoli necessari per la sua creazione, attraverso l'uso di algoritmi che simulano il comportamento della luce e le proprietà ottiche e fisiche degli oggetti e dei materiali.
 
=== Modelli 3D ===
Riga 12 ⟶ 11:
Queste equazioni non sono tuttavia sufficienti a descrivere con accuratezza le forme complesse che costituiscono la gran parte del mondo reale, per cui non è di utilizzo comune. Per modellare [[superfici curve]] in modo arbitrario si possono usare le ''patch'', ovvero l'estensione delle ''[[spline]]'', che approssimano curve continue, alle tre dimensioni. Le ''patch'' più comunemente usate sono in pratica basate su ''spline'' [[NURBS]].
 
L'impiego di equazioni matematiche pure come queste richiede l'utilizzo di una gran quantità di potenza di calcolo, e non sono quindi pratiche per le applicazioni in tempo reale come videogiochi e simulazioni. Una tecnica più efficiente, e tuttora la più diffusa e flessibile è il poly-modelling o modellazione poligonale. Questa permette un maggiore livello di dettaglio a spese però della maggiore quantita di informazioni necessaria a memorizzare l'oggetto risultante, chiamato [[modello poligonale]].
 
Un modello poligonale e "sfaccettato" come una scultura grezza può essere comunque raffinato con [[algoritmo|algoritmi]] per rappresentare superfici curve: questa tecnica è chiamata "[[superfici di suddivisione]]". Il modello viene raffinato con un processo di [[interpolazione]] iterativa rendendolo sempre più denso di poligoni, che approssimeranno meglio curve ideali, derivate matematicamente dai vari vertici del modello.
Riga 24 ⟶ 23:
Ad ogni nodo dello ''scene graph'' è associata una trasformazione, che si applica anche ad ogni nodo sottoposto, ricreando l'interazione fisica tra oggetti raggruppati (come quella tra un uomo e il suo vestito). Anche in sistemi di modellazione e ''rendering'' che non fanno uso di ''scene graph'' è comunque generalmente presente il concetto di trasformazione applicata "in verticale".
 
=== ''Rendering'' ===
{{vedi anche|Rendering}}
[[File:3D Plus 3DBuilding.jpg|thumb|right|Rendering fotorealistico di un edificio]]
Riga 35 ⟶ 34:
Un'immagine perfettamente nitida, con [[profondità di campo]] infinita non è affatto fotorealistica. L'occhio umano è abituato alle imperfezioni come il ''[[lens flare]]'' (il riflesso sulla lente), la limitatezza della profondità di campo e il ''[[motion blur]]'' ("effetto movimento") presenti nelle fotografie e nei film.
 
=== Illuminazione e ''shading'' ===
[[File:Glas-ohne.jpg|thumb|150px|Immagine originale]]
[[File:Glas-1000-enery.jpg|thumb|150px|Illuminazione 1000]]
Riga 48 ⟶ 47:
Gli oggetti sono in realtà bombardati da moltissime sorgenti luminose indirette: la luce "rimbalza" da un oggetto all'altro finché non perde energia. L'"[[illuminazione globale]]" indaga questo comportamento della radiazione luminosa. Come l'illuminazione diretta, essa comprende una componente diffusa ed una speculare. La riflessione reciproca diffusa riguarda la luce che colpisce un oggetto dopo averne già colpito un altro. Dal momento che questo ha assorbito una data lunghezza d'onda dello spettro della luce che lo ha colpito, la luce che respinge ha un colore diverso da quella da cui è illuminato. La riflessione reciproca speculare si manifesta generalmente con caustiche (ovvero con la concentrazione della radiazione luminosa in un punto da parte di una superficie speculare, come quella ottenibile dalla luce solare con una lente).
 
Dato che gli algoritmi completi di illuminazione globale, come [[Radiosity]] e il [[photon mapping]], richiedono grande capacità di calcolo, sono state sviluppate tecniche per approssimare l'illuminazione globale. L'algoritmo di [[occlusione ambientale]], ad esempio, calcola da quanta luce ambientale può essere raggiunto ogni punto di un modello.
 
I modelli poligonali impiegati in applicazioni in tempo reale non possono avere un alto livello di dettaglio; il sistema più semplice per illuminarli è calcolare un valore di intensità luminosa per ogni poligono, basato sulla sua normale. Questo metodo è chiamato ''[[flat shading]]'', dato che rivela la forma "piatta" di ogni poligono. Per evitare questa "sfaccettatura", i valori corrispondenti ai vertici devono essere interpolati. Il [[Gouraud shading]] calcola l'intensità luminosa ad ogni vertice del modello basandosi sulla normale corrispondente, quindi esegue una [[interpolazione lineare]] su tutta la superficie del poligono. Il difetto più evidente di questa tecnica è che "perde" i riflessi speculari vicini al centro di un poligono. La soluzione data dal [[Phong shading]] è l'interpolazione su tutta la superficie del poligono delle normali ai vertici, e successivamente il calcolo dell'illuminazione pixel per pixel.
 
Queste equazioni si applicano a oggetti che possiedono colorazione propria, ma modellare ogni dettaglio presente sulla superficie di un oggetto sarebbe enormemente dispendioso. Col ''[[texture mapping]]'' si può descrivere la superficie di un oggetto senza aggiungere complessità alla scena: un'immagine (''texture'') viene "spalmata" sulla superficie di un oggetto, come un planisfero su una sfera per creare un mappamondo; durante lo ''shading'', il colore del modello viene identificato in quello della texture, nel suo pixel ("texel") corrispondente.
 
Dato che le ''texture'' non possono rispecchiare l'illuminazione della scena, ma solo il colore del modello, per "perturbare" le normali ai poligoni si usa il ''[[bump mapping]]''. Questo fa uso di immagini che contengono, anziché un colore, un valore usato per modificare la normale al poligono nel punto corrispondente, e modificare così la forma della superficie. Questa tecnica aggiunge "ruvidità" alle superfici con grande risparmio di poligoni.
 
Il ''[[normal mapping]]'' è una tecnica che sostituisce invece di perturbare la normale alla superficie: una ''normal map'' è un'immagine a 3 canali in cui ogni pixel rappresenta un vettore 3D, ovvero la normale al punto stesso.
 
L'obiettivo di ogni algoritmo di ''shading'' è determinare il colore risultante di uno specifico punto sulla superficie di un oggetto. Gli ''[[shader]]'' programmabili offrono grande versatilità in questo, basandosi su [[linguaggio di programmazione|linguaggi di programmazione]] specifici detti "linguaggi di ''shading''". Questi linguaggi vengono sviluppati per applicazioni specifiche nella computer grafica, e includono [[algebra lineare]] e caratteristiche mirate alle problematiche di illuminazione. Gli ''shader'' possono includere qualsiasi tecnica di illuminazione, ''texture mapping'' e manipolazione geometrica. Uno "''shader'' procedurale" determina il colore risultante in maniera completamente algoritmica: possono così risultare convincenti senza bisogno di grandi ''texture''.
 
Formano una classe a sé stante i "''vertex shader''" e i "''pixel shader''", designati appositamente per funzionare insieme ad algoritmi ''scanline'' e per girare su una [[Graphics Processing Unit|GPU]]. Mentre in precedenza ogni ''hardware'' grafico implementava una specifica ''[[pipeline grafica|pipeline]]'' che costringeva l'utilizzatore ad usare esclusivamente il modello di illuminazione per cui era programmato l'hardware, con questa categoria di ''shader'' ogni momento del ''rendering'' è sotto il controllo dello sviluppatore.
 
== Programmi per la grafica 3D ==
* [[3Cad Evolution]]
* [[3D Coat]] (modellatore con capacità di sculpting e painting)
* [[3D Studio Max]]
* [[AC3D]]
* [[ArchiCAD]]
* [[Art of Illusion]] (software open source)
* [[AutoCAD]]
* [[Blender (programma)|Blender]] (software open source)
* [[ClayTools]]
* [[Daz Studio]]
* FreeCAD, software open source e multiplatform
* [[FreeForm Modelling]]
* [[Houdini 3D]]
* [[LightWave 3D]]
* [[Luxology Modo]]
* [[MakeHuman]] (modellatore parametrico open source di figure umane)
* [[Maxon Cinema 4D|Cinema 4D]]
* [[Maya (software)|Maya]]
* [[MeshLab]] (Editor open source di mesh triangolari, 3d scanning)
* [[Mudbox]] (modellatore con capacità di sculpting)
* [[Nevercenter Silo]] (modellatore con capacità di sculpting)
* [[Poser (software)|Poser]] (specializzato nel disegno di figure umane)
* [[Realsoft 3D]]
* [[Revit]]
* [[Rhinoceros (software)|Rhinoceros]] (solitamente coadiuvato da applicativi esterni specifici per la creazione di rendering)
* [[Silo (software)]] (modellatore con capacità di sculpting)
* [[SketchUp]] (modellatore)
* [[Softimage XSI]]
* [[Solidthinking]]
* [[Terragen]]
* [[Vue Esprit]]
* [[Xfrog]] (modellatore organico parametrico di piante e alberi)
* [[ZBrush]]
 
== Motori di rendering ==
* AccuRender
* Aqsis (open source)
* Brazil R/S
* Finalrender
* Flamingo
* FPrime
* Fryrender ([[unbiased]])
* Kray
* Indigo Renderer
* [[LuxRender]] (open source)
* [[Maxwell Render]] ([[unbiased]])
* [[Mental ray]]
* [[Pixie (software)|Pixie]] (software open source)
* [[POV-Ray]] (software open source)
* [[RenderMan]]
* [[Sunflow]] (software open source)
* [[Toxic Renderer]] (software open source)
* [[:it:Vray|V-ray]]
* [[YafRay]]
 
== Voci correlate ==
*[[Computer-generated imagery]]
*[[Attore virtuale]]
Riga 128 ⟶ 127:
*[[Sistema di specchi rotanti]]
 
== Altri progetti ==
{{interprogetto|commons=Category:3D computer graphics}}
 
== Collegamenti esterni ==
* [http://www.focgames.com/it/games/giochi-3D Giochi 3D]
 
{{Portale|Informatica|Software libero}}