【Babylonjs】材質
使用材質可以使你能夠覆蓋物體網格的顏色和紋理,它們需要在被光線照射下才能被看到。一種材質可以用來覆蓋你所希望改變的物體的網格。
對光線的反應
不管材質是顏色還是質地,它對光的反應都有不同的方式。
漫反射(Diffuse)—— 在光線下觀察的材料的基本顏色或質地;
鏡面,也叫高光(Specular)—— 光線給材質的亮點;
發光(Emissive)—— 發光材料的顏色或質地,如自發光;
環境(Ambient)—— 由環境背景光照明的材料的顏色或質地。
漫反射和鏡面材料需要建立光源。
環境顏色需要設定場景的環境顏色,提供環境背景照明。
scene.ambientColor = new BABYLON.Color3(1, 1, 1);
透明度(Transparency)—— 你可以通過該材料看到部分透明的影象,它可以使材料的適當部分是看不見的。這需要設定一個alpha屬性。
顏色(Color)
首先建立一個可使用的材質。
var myMaterial = new BABYLON.StandardMaterial("myMaterial", scene);
使用diffuseColor、specularColor、emissiveColor和ambientColor屬性中的一個或幾個設定材質的顏色。其中,ambientColor只有在場景的環境光已經被設定了以後才會生效。
var myMaterial = new BABYLON.StandardMaterial("myMaterial", scene); myMaterial.diffuseColor = new BABYLON.Color3(1, 0, 1); myMaterial.specularColor = new BABYLON.Color3(0.5, 0.6, 0.87); myMaterial.emissiveColor = new BABYLON.Color3(1, 1, 1); myMaterial.ambientColor = new BABYLON.Color3(0.23, 0.98, 0.53); mesh.material = myMaterial;
漫反射顏色的例子
給出一個概念,即物質漫射色對漫射光色的反應如下
下列圖中材質的基本顏色從左到右,從上到下,分別為黃色、紫色、青色、白色。分別對白色、紅色、綠色和藍色漫反射燈作出反應。注意視角如何調節燈光。
環境顏色的例子
所有的球都被同一個diffuseColor為紅色,groundColor為綠色的HemisphereicLight照射。第一個球體沒有周圍的顏色,中間的球體有紅色的環境顏色定義在其材料上,右邊的球體是一個有綠色環境顏色的材料。必須呈現的場景環境顏色是白色。當場景的環境顏色元件設定為0,例如紅色,那麼無論材質顏色周圍的紅色值是什麼,都不會有效果。
透明度顏色的例子
通常我們通過設定物體材質alpha值來改變它的透明度,範圍是0-1之間。
var myMaterial.alpha = 0.5;
紋理(Texture)
紋理由儲存的圖片組成。
建立一個可使用的材質。
var myMaterial = new BABYLON.StandardMaterial("myMaterial", scene);
使用diffuseTexture、specularTexture、emissiveTexture以及ambientTexture等屬性中的一個或多個來設定一個材質的紋理。其中,ambientTexture只有在沒有設定場景環境顏色的時候才被使用。
var myMaterial = new BABYLON.StandardMaterial("myMaterial", scene);
myMaterial.diffuseTexture = new BABYLON.Texture("PATH TO IMAGE", scene);
myMaterial.specularTexture = new BABYLON.Texture("PATH TO IMAGE", scene);
myMaterial.emissiveTexture = new BABYLON.Texture("PATH TO IMAGE", scene);
myMaterial.ambientTexture = new BABYLON.Texture("PATH TO IMAGE", scene);
mesh.material = myMaterial;
注意:當沒有指定法線時,BabylonJs的標準材料將計演算法線。
紋理的例子
所有的球都被同一個diffuseColor為紅色,groundColor為綠色的HemisphereicLight照射。第一個球體有一個漫反射的紋理,中間是一個發光的紋理,右邊的一個有紅色的漫射顏色和一個環境紋理。
透明紋理的例子
先設定材質的透明度
var myMaterial.alpha = 0.5;
此外,用於紋理影象可能已經有一個透明度設定,如這張來自維基共享資源的一隻狗,它有一個透明的背景;
在例子中,我們需要設定紋理的hasAlpha屬性的值為true。
var myMaterial.diffuseTexture.hasAlpha = true;
對於立方體的背面,通過前面的透明區域可以看到,我們必須處理背面的剔除。
背面的剔除
這是一種有效地繪製三維模型的二維螢幕渲染的方法。通常不需要畫立方體或其他物體的背面,因為它會被前面的面遮住。在BabylonJS的預設設定為true。
看下面的圖片,當材料的效能backfaceculling是true的時候,你可以看到,在狗的透明區域仍然是透明的,你可以通過他們看到背景。然而,你不能看到背面的影象,因為它們已經被剔除(或刪除)。當backfaceculling是false的時候,背面不在渲染過程中可以通過前面的透明區域看到去除面。
Back Face Culling True | Back Face Culling False |
---|---|
線框(WireFrame)
你可以看到一個線上框模式下的物體網格。
materialSphere1.wireframe = true;