今天郭先生說一說three.js的材質。材質描述了對象objects的外觀。它們的定義方式與渲染器無關, 因此,如果您決定使用不同的渲染器,不必重寫材質。
1. three.js材質基類
所有其他材質類型都繼承了Material。
下面是一些屬性:
.alphaTest : Float
設置運行alphaTest時要使用的alpha值。如果不透明度低於此值,則不會渲染材質。默認值為0。
.blendDst : Integer
混合目標。默認值為OneMinusSrcAlphaFactor。 目標因子所有可能的取值請參閱constants。 必須將材質的blending設置為CustomBlending才能生效。
.blendDstAlpha : Integer
.blendDst的透明度。 默認值為 null.
.blendEquation : Integer
使用混合時所采用的混合方程式。默認值為AddEquation。 混合方程式所有可能的取值請參閱constants。 必須將材質的blending設置為CustomBlending才能生效。
.blendEquationAlpha : Integer
.blendEquation 的透明度. 默認值為 null.
.blending : Blending
在使用此材質顯示對象時要使用何種混合。
必須將其設置為CustomBlending才能使用自定義blendSrc, blendDst 或者 [page:Constant blendEquation]。 混合模式所有可能的取值請參閱constants。默認值為NormalBlending。
.blendSrc : Integer
混合源。默認值為SrcAlphaFactor。 源因子所有可能的取值請參閱constants。
必須將材質的blending設置為CustomBlending才能生效。
.blendSrcAlpha : Integer
.blendSrc的透明度。 默認值為 null.
.clipIntersection : Boolean
更改剪裁平面的行為,以便僅剪切其交叉點,而不是它們的並集。默認值為 false。
.clippingPlanes : Array
用戶定義的剪裁平面,在世界空間中指定為THREE.Plane對象。這些平面適用於所有使用此材質的對象。空間中與平面的有符號距離為負的點被剪裁(未渲染)。 這需要WebGLRenderer.localClippingEnabled為true。 示例請參閱WebGL / clipping /intersection。默認值為 null。
.clipShadows : Boolean
定義是否根據此材質上指定的剪裁平面剪切陰影。默認值為 false。
.colorWrite : Boolean
是否渲染材質的顏色。 這可以與網格的renderOrder屬性結合使用,以創建遮擋其他對象的不可見對象。默認值為true。
.defines : Object
注入shader的自定義對象。 以鍵值對形式的對象傳遞,{ MY_CUSTOM_DEFINE: ‘’ , PI2: Math.PI * 2 }。 這些鍵值對在頂點和片元着色器中定義。默認值為undefined。
.depthFunc : Integer
使用何種深度函數。默認為LessEqualDepth。 深度模式所有可能的取值請查閱constants。
.depthTest : Boolean
是否在渲染此材質時啟用深度測試。默認為 true。
.depthWrite : Boolean
渲染此材質是否對深度緩沖區有任何影響。默認為true。
在繪制2D疊加時,將多個事物分層在一起而不創建z-index時,禁用深度寫入會很有用。
.flatShading : Boolean
定義材質是否使用平面着色進行渲染。默認值為false。
.fog : Boolean
材質是否受霧影響。默認為true。
.id : Integer
此材質實例的唯一編號。
.isMaterial : Boolean
用於檢查此類或派生類是否為材質。默認值為 true。
因為其通常用在內部優化,所以不應該更改該屬性值。
.lights : Boolean
材質是否受到光照的影響。默認為true。
.name : String
對象的可選名稱(不必是唯一的)。默認值為空字符串。
.needsUpdate : Boolean
指定需要重新編譯材質。
實例化新材質時,此屬性自動設置為true。
.opacity : Float
在0.0 - 1.0的范圍內的浮點數,表明材質的透明度。值0.0表示完全透明,1.0表示完全不透明。
如果材質的transparent屬性未設置為true,則材質將保持完全不透明,此值僅影響其顏色。 默認值為1.0。
.polygonOffset : Boolean
是否使用多邊形偏移。默認值為false。這對應於WebGL的GL_POLYGON_OFFSET_FILL功能。
.polygonOffsetFactor : Integer
設置多邊形偏移系數。默認值為0。
.polygonOffsetUnits : Integer
設置多邊形偏移單位。默認值為0。
.precision : String
重寫此材質渲染器的默認精度。可以是"highp", “mediump” 或 “lowp”。默認值為null。
.premultipliedAlpha : Boolean
是否預乘alpha(透明度)值。有關差異的示例,請參閱WebGL / Materials / Transparency。 默認值為false。
.dithering : Boolean
是否對顏色應用抖動以消除條帶的外觀。默認值為 false。
.shadowSide : Integer
定義投影的面。設置時,可以是THREE.FrontSide, THREE.BackSide, 或Materials。默認值為 null。
如果為null, 則面投射陰影確定如下:
Material.side Side casting shadows
THREE.FrontSide 背面
THREE.BackSide 前面
THREE.DoubleSide 雙面
.side : Integer
定義將要渲染哪一面 - 正面,背面或兩者。 默認為THREE.FrontSide。其他選項有THREE.BackSide和THREE.DoubleSide。
.transparent : Boolean
定義此材質是否透明。這對渲染有影響,因為透明對象需要特殊處理,並在非透明對象之后渲染。
設置為true時,通過設置材質的opacity屬性來控制材質透明的程度。
默認值為false。
.type : String
值是字符串’Material’。不應該被更改,並且可以用於在場景中查找此類型的所有對象。
.uuid : String
此材質實例的UUID,會自動分配,不應該被更改。
.vertexColors : Integer
是否使用頂點着色。默認值為THREE.NoColors。 其他選項有THREE.VertexColors 和 THREE.FaceColors。
.vertexTangents : Boolean
TODO.
.visible : Boolean
此材質是否可見。默認為true。
.userData : object
一個對象,可用於存儲有關Material的自定義數據。它不應該包含對函數的引用,因為這些函數不會被克隆。
下面是一些方法:
EventDispatcher 方法在此類中可用。
.clone ( ) : Material
返回與此材質具有相同參數的新材質。
.copy ( material : material ) : Material
將被傳入材質中的參數復制到此材質中。
.dispose () : null
處理材質。材質的紋理不會被處理。需要通過Texture處理。
.onBeforeCompile ( shader : Shader, renderer : WebGLRenderer ) : null
在編譯shader程序之前立即執行的可選回調。此函數使用shader源碼作為參數。用於修改內置材質。
.setValues ( values : object ) : null
values – 具有參數的容器。 根據values設置屬性。
.toJSON ( meta : object ) : null
meta – 包含元素,例如材質的紋理或圖像。 將材質轉換為three.js JSON格式。
2. three.js材質種類
名稱 | 介紹 |
---|---|
LineBasicMaterial | 一種用於繪制線框樣式幾何體的材質。 |
LineDashedMaterial | 一種用於繪制虛線樣式幾何體的材質。 |
MeshBasicMaterial | 一個以簡單着色(平面或線框)方式來繪制幾何體的材質。這種材質不受光照的影響。 |
MeshLambertMaterial | 一種非光澤表面的材質,沒有鏡面高光。該材質使用基於非物理的Lambertian模型來計算反射率。 這可以很好地模擬一些表面(例如未經處理的木材或石材),但不能模擬具有鏡面高光的光澤表面(例如塗漆木材)。 |
MeshPhongMaterial | 一種用於具有鏡面高光的光澤表面的材質。該材質使用非物理的Blinn-Phong模型來計算反射率。 與MeshLambertMaterial中使用的Lambertian模型不同,該材質可以模擬具有鏡面高光的光澤表面(例如塗漆木材)。 |
MeshNormalMaterial | 一種把法向量映射到RGB顏色的材質。 |
MeshDepthMaterial | 一種按深度繪制幾何體的材質。深度基於相機遠近平面。白色最近,黑色最遠。 |
MeshDistanceMaterial | 在內部用於使用PointLight來實現陰影映射。 |
MeshMatcapMaterial | 由一個材質捕捉(MatCap,或光照球(Lit Sphere))紋理所定義,其編碼了材質的顏色與明暗。可以理解為自帶光效果的材質 |
MeshToonMaterial | MeshPhongMaterial卡通着色的擴展。 |
PointsMaterial | 點材質,粒子系統所使用的缺省材料。 |
SpriteMaterial | 點精靈材質,一種使用Sprite的材質。 |
MeshPhysicalMaterial | MeshStandardMaterial的擴展,能夠更好地控制反射率。請注意,為了獲得最佳效果,您在使用此材質時應始終指定環境貼圖。 |
MeshStandardMaterial | 一種基於物理的標准材質,使用Metallic-Roughness工作流程。這種方法與舊方法的不同之處在於,不使用近似值來表示光與表面的相互作用,而是使用物理上正確的模型。 我們的想法是,不是在特定照明下調整材質以使其看起來很好,而是可以創建一種材質,能夠“正確”地應對所有光照場景。 |
ShadowMaterial | 此材質可以接收陰影,但在其他方面完全透明。 |
ShaderMaterial | 使用自定義shader渲染的材質。 shader是一個用GLSL編寫的小程序 ,在GPU上運行。 您可能需要使用自定義shader, |
這些材料都很常見,這里最最重要的是ShaderMaterial(着色器材質)。日后我將花大量時間說這個,但是現在還不是時候,日后說說Vector3,Matrix3,Matrix4,Quaternion,然后在說說着色器語言。
轉載請注明地址:郭先生的博客