Un materiale standard a base fisica, che utilizza il flusso di lavoro Metallic-Roughness.
Physically based rendering (PBR) è recentemente diventato uno standard in molte applicazioni 3D, come
[link:https://blogs.unity3d.com/2014/10/29/physically-based-shading-in-unity-5-a-primer/ Unity],
[link:https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/PhysicallyBased/ Unreal] e
[link:http://area.autodesk.com/blogs/the-3ds-max-blog/what039s-new-for-rendering-in-3ds-max-2017 3D Studio Max].
Questo approccio differisce da quelli precedenti per il fatto che, invece di utilizzare le approssimazioni
per il modo in cui la luce interagisce con una superficie, viene utilizzato un modello fisicamente corretto.
L'idea è che, invece di modificare i materiali per ottenere un buon risultato con un'illuminazione
specifica, è possibile creare un materiale che reagisca "correttamente" in tutti gli scenari di illuminazione.
In pratica questo fornisce un risultato dall'aspetto più accurato e realistico rispetto a [page:MeshLambertMaterial]
o [page:MeshPhongMaterial], a costo di essere un po' più costoso dal punto di vista computazionale.
[name] utilizza l'ombreggiatura per-fragment.
Si noti che per ottenere risultati migliori si deve sempre specificare una [page:.envMap mappa ambientale]
quando si utilizza questo materiale.
Per un'introduzione non tecnica al concetto di PBR e come impostare il materiale PBR,
consulta questi articoli delle persone di [link:https://www.marmoset.co marmoset]:
Dettagli tecnici dell'approccio utilizzato in three.js (e altri sistemi PBR) possono essere trovati in questo [link:https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf articolo di Disney] (pdf), di Brent Burley.
[page:Object parameters] - (opzionale) un oggetto con una o più proprietà che definiscono l'aspetto del materiale.
Qualsiasi proprietà del materiale (inclusa qualsiasi proprietà ereditata da [page:Material]) può essere passata qui.
L'eccezione è la proprietà [page:Hexadecimal colore], la quale può essere passata come stringa
esadecimale e per impostazione predefinita è `0xffffff` (bianco). [page:Color.set]( color ) viene chiamato internamente.
Vedi la classe base [page:Material] per le proprietà comuni.
La mappa alfa è una texture in scala di grigi che controlla l'opacità sulla superficie
(nero: completamente trasparente; bianco: completamente opaco). Il valore predefinito è `null`.
Viene utilizzato solo il colore della texture, ignorando il canale alfa, se esiste.
Per le texuture RGB e RGBA, il renderer [page:WebGLRenderer WebGL] utilizzarà il canale del verde
durante il campionamento di questa texture a causa del bit extra di precisione fornito per il verde
nei formati RGB 565 compressi e non compressi DXT. Anche le texture solo luminanza e luminanza/alfa continueranno
a funzionare come previsto.
Il canale rosso di questa texture viene utilizzato come la mappa di occlusione ambientale. Il valore predefinito è `null`. AoMap richiede un secondo set di UV.
L'intensità dell'effetto di occlusione ambientale. Il valore predefinito è `1`. Zero non è un effetto di occlusione.
La texture per creare una mappa di rilievo. I valori nero e bianco si associano alla profondità percepita in relazione alle luci. Bump in realtà non influisce sulla geometria dell'oggetto, solo sull'illuminazione. Se viene definita una mappa normale questa verrà ignorata.
Quanto la mappa di rilievo influisce sul materiale. Gli intervalli tipici sono 0-1. Il valore predefinito è 1.
[page:Color Colore] del materiale, il valore predefinito è impostato a bianco (0xffffff).
Un oggetto della forma:
{ 'STANDARD': '' };
Questo viene utilizzato dal [page:WebGLRenderer] per selezionare gli shader.
La mappa di spostamento influisce sulla posizione dei vertici della mesh. A differenza di altre mappe che influenzano solo la luce e l'ombra del materiale, i vertici spostati possono proiettare ombre, bloccare altri oggetti, e altrimenti agire come una vera geometria. La texture di spostamento è un'immagine in cui il valore di ciascun pixel (il bianco è il più alto) viene mappato e riposizionato rispetto ai vertici della mesh.
Quando la mappa di spostamento influenza la mesh (dove il nero non è lo spostamento, e il bianco è lo spostamento massimo). Senza una mappa di spostamento impostata, questo valore non viene applicato. Il valore predefinito è 1.
L'offset dei valori della mappa di spostamento sui vertici della mesh. Senza una mappa di spostamento impostata, questo valore non viene applicato. Il valore predefinito è 0.
Colore emissivo (chiaro) per il materiale, essenzialmente un colore solido non influenzato da altre luci. L'impostazione predefinita è nero.
Imposta la mappa emissiva (bagliore). Il valore predefinito è `null`. Il colore della mappa emissiva è modulato dal colore emissivo e dall'intensità emissiva. Se si dispone di una mappa emissiva, assicurarsi di impostare il colore emissivo su qualcosa di diverso dal nero.
Intensità della luce emissiva. Modula il colore emissivo. Il valore predefinito è `1`.
La mappa ambientale. Per assicurare un rendering fisicamente corretto, è necessario aggiungere solo le mappe ambientali che sono state processate da [page:PMREMGenerator]. Il valore predefinito è `null`.
Ridimensiona l'effetto della mappa ambientale moltiplicando il suo colore.
Definisce se il materiale viene renderizzato con un'ombreggiatura piatta. Il valore predefinito è `false`.
Indica se il materiale è influenzato dalla nebbia. Il valore predefinito è `true`.
Flag di sola lettura per verificare se l'oggetto dato è di tipo [name].
La mappa della luce. Il valore predefinito è `null`. La lightMap richiede un secondo set di UV.
Intensità della luce. Il valore predefinito è `1`.
La mappa colore. Può includere facoltativamente un canale alfa, in genere combinato con [page:Material.transparent .transparent] o [page:Material.alphaTest .alphaTest]. Il valore predefinito è `null`. Il colore della mappa della texture è modulato dal [page:.color] diffuso.
Quanto un materiale è come un metallo. I materiali non metallici come il legno o la pietra utilizzano il valore 0.0, quelli metallici utilizzano il valore 1.0, senza (di solito) nulla nel mezzo. Il valore predefinito è 0.0. Un valore tra 0.0 e 1.0 potrebbe essere utilizzato per un aspetto di metallo arrugginito. Se viene fornito anche metalnessMap, entrambi i valori vengono moltiplicati.
Il canale blu di questa texture viene utilizzato per alterare la metallizzazione del materiale.
La texture per creare una mappa normale. I valori RGB influenzano la normale della superficie per ogni frammento di pixel e cambiano il modo in cui il colore è illuminato. Le mappe normali non modificano la figura effettiva della superficie, ma solo l'illuminazione. Nel caso in cui il materiale abbia una mappa normale creata utilizzando la convezione della mano sinistra, la componente y di normalScale deve essere negata per compensare la diversa mano.
Il tipo di mappa normale.
Le opzioni sono [page:constant THREE.TangentSpaceNormalMap] (impostazione predefinita), e [page:constant THREE.ObjectSpaceNormalMap].
Quanto la mappa normale influenza il materiale. Gli intervalli tipi sono 0-1. Il valore predefinito è un [page:Vector2] impostato a (1,1).
Quanto ruvido appare il materiale. 0.0 un riflesso speculare uniforme, 1.0 significa completamente diffuso. Il valore predefinito è 1.0. Se viene fornita anche roughnessMap, entrambi i valori vengono moltiplicati.
Il canale verde di questa texture viene utilizzato per alterare la ruvidezza del materiale.
Rendering della geometria come wireframe. Il valore predefinito è `false` (cioè renderizzazione come poligoni piatti).
Definisce l'aspetto delle estremità della linea. I valori possibili sono "butt", "round" e "square". Il valore predefinito è 'round'.
Questa corrisponde alla proprietà [link:https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineCap 2D Canvas lineCap]
e viene ignorata dal renderer [page:WebGLRenderer WebGL].
Definisce l'aspetto dei punti di unione della linea. I valori possibili sono "round", "bevel" e "miter". Il valore predefinito è 'round'.
Questa corrisponde alla proprietà [link:https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineJoin 2D Canvas lineJoin]
e viene ignorata dal renderer [page:WebGLRenderer WebGL].
Controlla lo spessore del wireframe. Il valore predefinito è `1`.
A causa delle limitazioni del [link:https://www.khronos.org/registry/OpenGL/specs/gl/glspec46.core.pdf profilo OpenGL Core]
con il renderer [page:WebGLRenderer WebGL] sulla maggior parte delle piattaforme,
la larghezza di riga sarà sempre 1 indipendentemente dal valore impostato.
Vedi la classe base [page:Material] per i metodi comuni.
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]