Computer grafica 3D: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Superninobot (discussione | contributi)
m rimozione wlink a voce cancellata
Nessun oggetto della modifica
Etichette: Modifica visuale Modifica da mobile Modifica da web per mobile
 
(46 versioni intermedie di 31 utenti non mostrate)
Riga 1:
[[File:Raytraced_image_of_several_glass_objects.png|thumb|Immagine generata con la computer grafica 3D]]
 
La '''computer grafica [[3D]]''' è un ramo della [[computer grafica]] che si basa sull'[[elaborazione]] di un insieme di modelli tridimensionali tramite algoritmi atti a produrre una verosimiglianza fotografica e ottica nell'immagine finale. Essa viene utilizzata nella creazione e postproduzione di opere o parti di opere per il [[cinema]] o la [[televisione]], nei [[videogioco|videogiochi]], nell'[[architettura]], nell'[[ingegneria]] ([[Computer-aided design|CAD]]), nell'[[arte]] e in svariati ambiti scientifici, dove la produzione di contenuti con altri mezzi non è possibile o non conveniente.
 
== Aspetti teorici ==
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 rendering" 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]] ===
[[File:Wasp11.jpg|thumb|Modello 3D di una vespa]]
Oggetti tridimensionali semplici possono essere rappresentati con equazioni operanti su un [[sistema di riferimento|sistema di riferimento cartesiano tridimensionale]]: per esempio, l'equazione x²+y²+z²=r² è perfetta per una sfera di raggio ''r''. Anche se equazioni così semplici possono sembrare limitative, l'insieme degli oggetti realizzabili viene ampliato con una tecnica chiamata [[CSG (grafica)|geometria solida costruttiva]] (CSG, ''constructive solid geometry''), la quale combina oggetti solidi (come cubi, sfere, cilindri, ecc.) per formare oggetti più complessi attraverso le [[algebra di Boole|operazioni booleane]] (unione, sottrazione e intersezione): un tubo può ad esempio essere rappresentato come la differenza tra due cilindri aventi diametro differente.
 
Oggetti tridimensionali semplici possono essere rappresentati con equazioni operanti su un [[sistema di riferimento|sistema cartesiano]] [[Sistema di riferimento cartesiano tridimensionale|tridimensionale]]: per esempio, l'equazione <math>x²^2+y²^2+z²^2=r²^2</math> è perfetta per una sfera di raggio ''r''. Anche se equazioni così semplici possono sembrare limitative, l'insieme degli oggetti realizzabili viene ampliato con una tecnica chiamata [[CSG (grafica)|geometria solida costruttiva]] (CSG, ''constructive solid geometry''), la quale combina oggetti solidi (come cubi, sfere, cilindri, ecc.) per formare oggetti più complessi attraverso le [[algebra di Boole|operazioni booleane]] (unione, sottrazione e intersezione): un tubo può ad esempio essere rappresentato come la differenza tra due cilindri aventi diametro differente.
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]].
 
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 [[Superficie di Bézier|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 quantità di informazioni necessaria a memorizzare l'oggetto risultante, chiamato [[Mesh poligonale|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.
 
=== Creazione della scena ===
[[File:Blender 2.36 Screenshot.jpg|thumb|Gestione di un modello tridimensionale nel programma [[Blender (programma)|Blender]]]]
Una scena si può comporre a partire da "primitive", ossia modelli tridimensionali rappresentanti primitive geometriche, scomponibili in singole facce o combinabili per formare oggetti più complessi. Il modo più semplice per organizzarla è quello di creare un [[array]] di primitive, ma questo metodo non permette una descrizione più dettagliata della scena, semplicemente "spiega" al ''renderer'' come disegnare la stessa. Una tecnica più avanzata organizza gli oggetti in una [[Albero (grafo)|struttura dati ad albero]] (''scene graph''), che permette di raggruppare logicamente gli oggetti (ad esempio, si può quindi replicare più volte un oggetto, avendolo modellato attraverso più ''patch'' NURBS raggruppate, all'interno della stessa scena).
 
Le primitive sono generalmente descritte all'interno del proprio sistema di riferimento locale, e vengono posizionate sulla scena attraverso opportune [[trasformazione geometrica piana|trasformazioni]]. Le trasformazioni affini più impiegate, come [[omotetia]], [[rotazione]] e [[Traslazione (geometria)|traslazione]], possono essere descritte in uno [[spazio proiettivo]] con una [[matrice]] 4x4: esse si applicano moltiplicando la matrice per il [[array|vettore]] a quattro componenti che rappresenta ogni punto di controllo delle curva. La quarta dimensione è denominata [[Coordinate omogenee|coordinata omogenea]].
 
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".
Riga 25 ⟶ 26:
=== ''Rendering'' ===
{{vedi anche|Rendering}}
 
[[File:3D Plus 3DBuilding.jpg|thumb|Rendering fotorealistico di un edificio]]
Il ''rendering'' è il processo di produzione dell'immagine finale a partire dal modello matematico del soggetto (scena). Esistono molti algoritmi di ''rendering'', ma tutti implicano la [[proiezione (geometria)|proiezione]] dei modelli 3D su una superficie 2D.
 
Gli algoritmi di ''rendering'' si dividono in due categorie: ''[[scanline rendering|scanline renderersrenderer]]'' e ''[[ray tracing|ray tracerstracer]]''. I primi operano oggetto per oggetto, disegnando direttamente su schermo ogni poligono costituente il modello 3d; essi richiedono quindi che tutti gli oggetti (anche quelli modellati con curve continue) siano costruticostruiti come suddivisi in poligoni. I secondi operano pixel per pixel, tracciando un raggio visuale immaginario dal punto di vista all'interno della scena, e determinando il colore del pixel dalle intersezioni con gli oggetti.
 
Una delle funzioni principali di un ''renderer'' è la [[determinazione della [[superficie nascosta]]. Il ''ray tracing'' svolge implicitamente questa funzione, determinando il colore di un [[pixel]] in base all'intersezione del raggio visuale col primo oggetto, ma per l'altro tipo di algoritmi servono tecniche più avanzate per determinare quale poligono sia il più vicino al punto di vista. Il metodo più semplice è quello di disegnare i poligoni a partire da quelli più lontani, in modo che quelli più vicini li sovrascrivano; ma questa tecnica, detta ''painter's algorithm'', "[[algoritmo del pittore]]", si rivela inefficace con poligoni sovrapposti. Per risolvere questo problema fu sviluppato lo [[z-buffer]]ing, che impiega un [[buffer]] per conservare la coordinata ''z'' relativa ad ogni pixel elaborato: se la profondità del poligono che sta per essere elaborato per il pixel è minore di quello in memoria, il pixel viene riscritto; altrimenti l'algoritmo passa al pixel successivo.
 
Un'immagine perfettamente nitida, con [[profondità di campo]] infinita non è affatto fotorealistica. L'occhio umano è abituato alle imperfezioni come il ''[[Flare (ottica)|lens flare]]'' (il riflesso sulla lente), la limitatezza della profondità di campo e ill'effetto ''[[motionMosso blur(fotografia)|mosso]]'' ("effetto movimento") presenti nelle fotografie e nei film.
 
=== Illuminazione e ''shading'' ===
Riga 39 ⟶ 40:
[[File:Glas-2000-enery.jpg|thumb|Illuminazione 2000]]
[[File:Glas-6000-enery.jpg|thumb|Illuminazione 6000]]
 
Lo ''shading'' (lett. "{{Lett|ombreggiatura"}}) è il processo di determinazione del colore di un determinato pixel dell'immagine. Esso comprende in genere il processo di illuminazione (''lighting''), che ricostruisce l'interazione tra gli oggetti e le sorgenti di luce: a questo scopo sono necessari per un modello di illuminazione le proprietà della luce, le proprietà di [[riflessione (Computer grafica)|riflessione]] e la [[normale (superficie)|normale]] alla superficie nel punto in cui l'equazione di illuminazione viene calcolata.
 
Per produrre una rappresentazione visuale dell'immagine efficace, bisogna simulare la fisica della luce. Il modello matematico più astratto del comportamento della luce è l'[[Rendering#Le equazioni alla base del rendering|equazione di rendering]], basata sulla [[legge di conservazione dell'energia]]. Essa è un'equazione [[integrale]], che calcola la luce in una certa posizione come la luce emessa in quella posizione sommata all'integrale della luce riflessa da tutti gli oggetti della scena che colpisce quel punto. Questa equazione infinita non può essere risolta con algoritmi finiti, quindi necessita di approssimazione.
Riga 60 ⟶ 62:
 
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.
 
=== 3D simulato ===
[[File:3d-simulation-psd-vector.png|alt=Esempio di 3D simulato. Questo stesso risultato (visivamente) si può ottenere con Adobe Photoshop o Gimp o Adobe Illustrator o Inkscape o Blender o Maya|miniatura|Esempio di 3D simulato. Questo stesso risultato (visivamente) si può ottenere con software per l'elaborazione di immagini come Adobe Photoshop o Gimp oppure con applicativi di grafica vettoriale come ad esempio Adobe Illustrator o Inkscape.]]
 
Con software per la [[grafica]] come [[Adobe Illustrator]], [[Adobe Photoshop]], [[Inkscape]] o [[GIMP|Gimp]] è possibile simulare l'effetto 3D senza rendering, lavorando con livelli, sfumature e ombre. Il punto debole di questa tecnica rispetto ai software specializzati in 3D è che per modificare anche solo leggermente un rendering con, ad esempio, [[Blender (programma)|Blender]], basta modificare il file originale ".blend" e ripetere il comando di rendering, senza rifare tutto il progetto da zero. Con un 3D simulato con programmi di grafica invece si dovrà ripetere l'intero progetto anche solo per spostare, per esempio, la prospettiva di pochi gradi<ref>{{Cita web|url=https://unblast.com/light-3d-text-effect-psd/|titolo=Neon Light 3D Text Effect (PSD)|sito=Unblast|data=2018-06-28|accesso=2021-02-05}}</ref><ref>{{Cita web|url=https://www.pinterest.com/pin/307159637058336567/|titolo=Lion vector 3D {{!}} Ilustrator, Ilustrasi, Gambar hewan|sito=Pinterest|lingua=it|accesso=2021-02-05}}</ref><ref>{{Cita web|url=https://blenderartists.org/t/when-to-use-photoshop-when-blender/572242|titolo=When to use Photoshop, when Blender?!|sito=Blender Artists Community|data=2013-04-19|lingua=en|accesso=2021-02-05}}</ref>.
 
== Web 3D ==
{{vedi anche|Web 3D}}
 
Web 3D è un termine utilizzato per indicare i contenuti 3D interattivi inseriti in una pagina HTML, visualizzabili da un comune browser attraverso un particolare visualizzatore 3D web. Si utilizza il concetto di Web 3D anche per indicare una possibile evoluzione del Web in cui viene abbandonata l'idea di pagina e ci si immerge in uno spazio tridimensionale interattivo.
 
== Programmi per la grafica 3D ==
Riga 72 ⟶ 84:
* [[ClayTools]]
* [[Daz Studio]]
* [[FreeCAD]], software(modellatore parametrico 3D open source e multiplatformmultipiattaforma)
* [[FreeForm Modelling]]
* [[Houdini (software)|Houdini 3D]]
* [[LightWave 3D]]
* [[Modo (software)|Luxology Modo]]
* [[MakeHuman]] (modellatore parametrico open source di figure umane)
* [[Maxon Cinema 4D|Cinema 4D]]
Riga 92 ⟶ 104:
* [[Softimage XSI]]
* [[Solidthinking]]
* Source Filmmaker (software open source)
* [[Terragen]]
* [[Vue Esprit]]
* [[Wings3D]] (modellatore con capacità di sculpting)
* [[Xfrog]] (modellatore organico parametrico di piante e alberi)
* [[ZBrush]]
 
== Motori di ''rendering'' ==
* AccuRender
* Arnold Renderer
* Aqsis (open source)
* Brazil R/S
* Corona Render
* [[Cycles render|Cycles Render]] ([[unbiased]])
* Finalrender
Riga 107 ⟶ 122:
* FPrime
* Fryrender ([[unbiased]])
* Keyshot
* Kray
* Indigo Renderer
Riga 114 ⟶ 130:
* [[Pixie (software)|Pixie]] (software open source)
* [[POV-Ray]] (software open source)
* Redshift Render
* [[RenderMan]]
* [[Sunflow]] (software open source)
Riga 119 ⟶ 136:
* [[Vray|V-ray]]
* [[YafRay]]
 
== Note ==
<references />
 
== Voci correlate ==
* [[Computer-generated imagery]]
* [[Attore virtuale]]
* [[ModellazioneComputer geometricagrafica]]
* [[Z-buffer]]
* [[Cinema tridimensionale]]
* [[Computer-generated imagery]]
* [[Modellazione geometrica]]
* [[Pipeline grafica]]
* [[Shadow mapping]]
* [[Sistema di specchi rotanti]]
* [[Z-buffer]]
 
== Altri progetti ==
{{interprogetto|commonspreposizione=Category:3D computer graphicssulla}}
 
== Collegamenti esterni ==
* {{cita web | 1 = http://www.focgames.com/it/games/giochi-3D | 2 = Giochi 3D | accesso = 13 novembre 2013 | urlarchivio = https://web.archive.org/web/20131103204529/http://www.focgames.com/it/games/giochi-3D | dataarchivio = 3 novembre 2013 | urlmorto = sì }}
* {{cita web | 1 = http://3dblogging.net/ | 2 = Portale Italiano Grafica 3D | urlmorto = sì }}
* {{cita web | 1 = http://www.low-poly.it/ | 2 = Low Poly | accesso = 1º agosto 2015 | urlarchivio = https://web.archive.org/web/20150927131953/http://www.low-poly.it/ | dataarchivio = 27 settembre 2015 | urlmorto = sì }}
*[https://web.archive.org/web/20181201005153/http://blogrenderingsitiweb.com/ Blog Grafica 3D] Blog Grafica 3D
* http://www.wegroups.eu , Render 3D
 
{{Controllo di autorità}}
{{Portale|Informatica|Software libero}}
 
[[Categoria:Grafica 3D| ]]
[[Categoria:Computer grafica]]