mtl檔案詳解

CopperDong發表於2018-04-20
三維模型處理會要讀取.mtl檔案來獲得材質資訊。

   .mtl檔案(Material Library File)是材質庫檔案,描述的是物體的材質資訊,ASCII儲存,任何文字編輯器可以將其開啟和編輯。一個.mtl檔案可以包含一個或多個材質定義,對於每個材質都有其顏色,紋理和反射貼圖的描述,應用於物體的表面和頂點。
以下是一個材質庫檔案的基本結構:
newmtl mymtl_1
   材質顏色光照定義
   紋理貼圖定義
   反射貼圖定義
newmtl mymtl_2
   材質顏色光照定義
   紋理貼圖定義
   反射貼圖定義
newmtl mymtl_3
   材質顏色光照定義
   紋理貼圖定義
   反射貼圖定義
……
註釋:每個材質庫可含多個材質定義,每個材質都有一個材質名。用newmtl mtlName來定義一個材質。對於每個材質,可定義它的顏色光照紋理反射等描述特徵。
主要的定義格式如下文所示:
材質顏色光照
1。環境反射有以下三種描述格式,三者是互斥的,不能同時使用。

Ka r g b    \\用RGB顏色值來表示,g和b兩引數是可選的,如果只指定了r的值,則g和b的值都等於r的值。三個引數一般取值範圍為0.0~1.0,在此範圍外的值則相應的增加或減少反射率;
Ka spectral file.rfl factor   \\用一個rfl檔案來表示。factor是一個可選引數,表示.rfl檔案中值的乘數,預設為1.0;
Ka xyz x y z   \\用CIEXYZ值來表示,x,y,z是CIEXYZ顏色空間的各分量值。y和z兩引數是可選的,如果只指定了x的值,則y和z的值都等於r的值。三個引數一般取值範圍為0~1。

2。漫反射描述的三種格式:
Kd r g b
Kd spectral file.rfl factor
Kd xyz x y z

3。鏡反射描述的三種格式:
Ks r g b
Ks spectral file.rfl factor
Ks xyz x y z

4。濾光透射率描述的三種格式:
Tf r g b
Tf spectral file.rfl factor
Tf xyz x y z

5。光照模型描述格式:

illum illum_#
指定材質的光照模型。illum後面可接0~10範圍內的數字引數。各個引數代表的光照模型如下所示:
************************************************************************************************************

光照模型               屬性
 0                   Color on and Ambient off
 1                   Color on and Ambient on
 2                   Highlight on
 3                   Reflection on and Ray trace on
 4                   Transparency: Glass on
                     Reflection: Ray trace on
 5                   Reflection: Fresnel on and Ray trace on
 6                   Transparency: Refraction on
                     Reflection: Fresnel off and Ray trace on
 7                   Transparency: Refraction on
                     Reflection: Fresnel on and Ray trace on
 8                   Reflection on and Ray trace off
 9                   Transparency: Glass on
                     Reflection: Ray trace off
 10                  Casts shadows onto invisible surfaces

**************************************************************************************************************

6。漸隱指數描述

d factor
引數factor表示物體融入背景的數量,取值範圍為0.0~1.0,取值為1.0表示完全不透明,取值為0.0時表示完全透明。當新建立一個物體時,該值預設為1.0,即無漸隱效果。
與真正的透明物體材質不一樣,這個漸隱效果是不依賴於物體的厚度或是否具有光譜特性。該漸隱效果對所有光照模型都有效。

d -halo factor
指定一種受觀察者影響的漸隱效果。例如,對於一個定義為 d -halo 0.0的球體,在它的中心是完全消隱的,而在表面邊界處將逐漸變得不透明。
其中factor表示應用在材質上的漸隱率的最小值。而材質上具體的漸隱率將在這個最小值到1.0之間取值。其計算公式為:
dissolve = 1.0 - (N*v)(1.0-factor)

7。反射指數描述

Ns exponent
指定材質的反射指數,定義了反射高光度。
exponent是反射指數值,該值越高則高光越密集,一般取值範圍在0~1000。

8。清晰度描述

Sharpness value
指定本地反射貼圖的清晰度。如果材質中沒有本地反射貼圖定義,則將此值應用到預覽中的全域性反射貼圖上。
value可在0~1000中取值,預設60。值越高則越清晰。

9。折射值描述

Ni ptical density
指定材質表面的光密度,即折射值。
ptical density是光密度值,可在0.001到10之間進行取值。若取值為1.0,光在通過物體的時候不發生彎曲。玻璃的折射率為1.5。取值小於1.0的時候可能會產生奇怪的結果,不推薦。

 
*************************************************************************************************************
紋理對映
紋理對映可以對對映的相應材質引數進行修改,這個修改只是對原有存在的引數進行疊加修改,而不是替換原有引數,從而紋理對映在物體表面的表現上有很好的靈活性。
紋理對映只可以改變以下材質引數:
- Ka (color)
- Kd (color)
- Ks (color)
- Ns (scalar)
- d (scalar)
除了以上引數,表面法線也可以更改。
紋理檔案型別可以是以下幾種:
1.紋理對映檔案
.mpc:顏色紋理檔案color texture files ——可改變Ka,Kd,Ks的值
.mps:標量紋理檔案scalar texture files——可改變Ns,d,decal的值
.mpb:凹凸紋理檔案bump texture files——可改變面法線
2.程式紋理檔案:
程式紋理檔案是用數學公式來計算紋理的樣本值。有以下幾種格式:
.cxc
.cxs
.cxb

以下是mtl檔案中對於紋理對映的描述格式:
1.map_Ka -options args filename
為環境反射指定顏色紋理檔案(.mpc)或程式紋理檔案(.cxc),或是一個點陣圖檔案。在渲染的時候,Ka的值將再乘上map_Ka的值。
而map_Ka的可選項引數有以下幾個:
-blendu on | off
-blendv on | off
-cc on | off
-clamp on | off
-mm base gain
-o u v w
-s u v w
-t u v w
-texres value

2.map_Kd -options args filename
為漫反射指定顏色紋理檔案(.mpc)或程式紋理檔案(.cxc),或是一個點陣圖檔案。作用原理與可選引數與map_Ka同。

3.map_Ks -options args filename
為鏡反射指定顏色紋理檔案(.mpc)或程式紋理檔案(.cxc),或是一個點陣圖檔案。作用原理與可選引數與map_Ka同。

4.map_Ns -options args filename
為鏡面反射指定標量紋理檔案(.mps或.cxs)。可選引數如下所示:
-blendu on | off
-blendv on | off
-clamp on | off
-imfchan r | g | b | m | l | z
-mm base gain
-o u v w
-s u v w
-t u v w
-texres value

5.map_d -options args filename
為消隱指數指定標量紋理檔案(.mps或.cxs)。作用原理和可選引數與map_Ns同。

6.map_aat on
開啟紋理反走樣功能。

7.decal -options args filename
指定一個標量紋理檔案或程式紋理檔案用於選擇性地將材質的顏色替換為紋理的顏色。可選引數同map_Ns。
在渲染期間, Ka, Kd, and Ks和map_Ka, map_Kd, map_Ks的值通過下面這個公式來進行使用:
result_color=tex_color(tv)*decal(tv)+mtl_color*(1.0-decal(tv))
其中tv表示紋理頂點,result_color是Ka,Kd和Ks的綜合作用值。

8.disp -options args filename
指定一個標量紋理檔案或程式紋理檔案實現物體變形或產生表面粗糙。可選引數同map_Ns。

9.bump -options args filename
為材質指定凹凸紋理檔案(.mpb或.cxb),或是一個點陣圖檔案。
可選引數可為:
-bm mult
-clamp on | off
-blendu on | off
-blendv on | off
-imfchan r | g | b | m | l | z
-mm base gain
-o u v w
-s u v w
-t u v w
-texres value

******************************************************************************************************
反射貼圖
在.mtl檔案中的定義格式為:
1.refl -type sphere -options -args filename
指定一個球體區域將指定的紋理反射對映至物體。filename為一個顏色紋理檔案,或可以對映的點陣圖。

2.refl -type cube_side -options -args filenames
指定一個立方體區域將指定的紋理反射對映至物體。可以通過以下方式來指定紋理位置:
 refl -type cube_top
 refl -type cube_bottom
 refl -type cube_front
 refl -type cube_back
 refl -type cube_left
 refl -type cube_right

“refl”可以單獨使用,或配合以下引數使用。使用時將引數置於“refl”和“filename”之間。
 -blendu on | off
 -blendv on | off
 -cc on | off
 -clamp on | off
 -mm base gain
 -o u v w
 -s u v w
 -t u v w
 -texres value