1. 程式人生 > >【three.js :3D】obj+mtl中大部分引數的含義解析(轉載)+自己補充的。

【three.js :3D】obj+mtl中大部分引數的含義解析(轉載)+自己補充的。

 

轉載:obj + mtl 格式說明

另一個參考:convert_obj_three.py指令碼中,作者對一些引數的解析。【其實這篇轉載的內容後半部分和.py指令碼內容相對應】

 

OBJ(或 .OBJ)是一種開放的幾何定義檔案格式,最初由Wavefront Technologies公司開發,用以描述其Advanced Visualizer動畫包。該格式已被其他3D圖形應用供應商採納,是一種被絕大多數普遍公認的格式。
OBJ檔案格式為簡單資料格式,它僅表現3D幾何體,即頂點的位置、以頂點列表方式定義每個多邊形的頂點、法向量和麵的UV座標,以及紋理頂點。頂點預設以逆時針方向儲存,不必顯式宣告法向。

1. 檔案格式
註釋行以#號起首
  # 這是註釋
一個OBJ檔案包含幾類定義:
  # 頂點列表,用(x,y,z[,w])座標表示,w為可選
  v 0.123 0.234 0.345 1.0
  v ...
  ...

  # 紋理座標,用(u,v[,w])座標表示,w為可選
  vt 0.500 -1.352 [0.234]
  vt ...
  ...

  # 法向量,用(x,y,z)的形式,法向量非單位向量
  vn 0.707 0.000 0.707
  vn ...
  ...

  # 面的定義詳見下
  f 1 2 3
  f 3/1 4/2 5/3
  f 6/4/1 3/5/3 7/6/5
  f ...
  ...

2. 面的定義
面通過頂點列表、紋理及法向的索引來定義。定義多邊形(諸如四邊形)時可超過三張頂點/紋理/法向索引。OBJ檔案也支援自由曲面,如NURB(非均勻有理B樣條)。
有多種方式定義一個面,然而每行面定義語句都以f起首。
2.1 頂點
合法的頂點索引從1開始,對應於預先定義的頂點列表中相應的頂點元素。每個面可以包含三個以上元素。
  f v1 v2 v3 v4 ...
2.2 頂點/紋理座標
可選地,紋理座標索引可以用來指定面的紋理座標。在定義一個面時,如需為頂點索引新增紋理座標索引,須在頂點索引之後附上紋理座標索引,並用/號分隔。注意/號之前或之後都不允許有空格。合法的紋理座標索引從1開始,對應於預先定義的紋理座標列表中相應的元素。每個面可以包含三個以上元素。
  f v1/vt1 v2/vt2 v3/vt3 ...
2.3 頂點/紋理座標/法向
可選地,法向索引可以用來指定頂點的法向量。在定義一個面時,如需為頂點索引新增法向索引,須在紋理座標索引之後附上法向索引,並用/號分隔。合法的法向索引從1開始,對應於預先定義的法向列表中相應的元素。每個面可以包含三個以上的元素。
  f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ...
2.4 頂點/法向
由於紋理座標是可選的,在定義幾何體時可以忽略,但在索引中不能少,所以頂點索引之後須畫兩道/,即//,再寫上法向索引。
  f v1//vn1 v2//vn2 v3//vn3 ...

3. 引用材質
用來描述多邊形可視面貌的材質儲存於外部.mtl檔案中。.mtl檔案可包含一至多個命名的材質。
  mtllib [外部 .mtl 檔名]
  ...
命名的物件、多邊形群組和材質群組通過以下標籤指定:
  o [物件名]
  ...
  g [群組名]
  ...
  usemtl [材質名]
  ...
材質名對應於外部.mtl檔案中的已命名材質。每個標籤應用於所有後續面,直到下一個同類型標籤出現。如果當前材質定義中不包括紋理,則紋理座標可以被忽略。
  f v1//vn1 v2//vn2 v3//vn3
  ...
多邊形之間的平滑描影由平滑群組控制。
  s 1
  ...
  # 平滑描影也可以取消。
  s off
  ...
一個OBJ檔案中可引用一個以上的外部MTL材質檔案。

4. 相對和絕對索引
由於其列表結構,OBJ檔案可以以絕對或相對列表位置引用頂點、法向等。絕對索引值以1為基準,相對索引值可以是負數。不過,不是所有的軟體都支援後者,也有些軟體在寫格式時內建使用相對索引形式(由於這樣便於在新增元素時不用重新計算頂點偏移等因素)。這些偶爾會造成不相容。

5. 材質模板庫(MTL)
在3D計算機圖形學中,最為普遍的幾何體交換檔案格式之一就是OBJ,MTL檔案則是其附屬檔案,用以描述幾何體的表面描影屬性。
儘管MTL格式被廣泛使用,它已經過時,無法完全支援最新技術,諸如鏡面貼圖和視差貼圖。然而,由於格式的開放和直觀,不足之處可用定製MTL檔案生成器輕易補完。
5.1 基礎材質
單獨一個.mtl檔案包含多個材質。材質在檔案中逐個定義,每一條語句以newmtl起首。
  # 定義一個名為 'Colored'的材質
  newmtl Colored
材質的陰影色(ambient color)用Ka宣告。顏色用RGB定義,每條通道的值從0到1之間取。
   Ka 1.000 1.000 1.000 # 白色
類似地,固有色(diffuse color)用Kd。
   Kd 1.000 1.000 1.000 # 白色
高光色(specular color)用Ks。帶權高光色則用高光係數Ns表示。
   Ks 0.000 0.000 0.000 # 黑色(即關閉高光)
   Ns 10.000 # 範圍從0到1000
材質可以是透明的,即是說“溶解的”。與真透明度不同,其結果並不依賴於物體厚度。
   d 0.9 # 有些用'd'實現
   Tr 0.9 # 其他的用'Tr'
每個材質允許使用多照明模型。列舉如下:
0. 色彩開,陰影色關
1. 色彩開,陰影色開
2. 高光開
3. 反射開,光線追蹤開
4. 透明: 玻璃開 反射:光線追蹤開
5. 反射:菲涅爾衍射開,光線追蹤開
6. 透明:折射開 反射:菲涅爾衍射關,光線追蹤開
7. 透明:折射開 反射:菲涅爾衍射開,光線追蹤開
8. 反射開,光線追蹤關
9. 透明: 玻璃開 反射:光線追蹤關
10. 投射陰影於不可見表面
   illum 2

 

我的補充:

=============================================

mtl中的Ke 0.1453 0.1453 0.1453 :

含義:可以理解為材質的發射出的光線強度?顏色?。與ka ,kd ,ks之間由一定的聯絡。

mtl中的Tf : Tf 0.4286 0.4286 0.4286     Tr : 0.5714

與Tr + Tf = 1.00 ,表示的是材質的透明程度,Tf :1.0000表示完全不透明。

=============================================


5.2 紋理貼圖
帶紋理材質使用如上相同的屬性,並額外定義紋理貼圖。
   newmtl Textured
   Ka 1.000 1.000 1.000
   Kd 1.000 1.000 1.000
   Ks 0.000 0.000 0.000
   d 1.0
   illum 2
   map_Ka lenna.tga # 陰影色紋理貼圖
   map_Kd lenna.tga # 固有色紋理貼圖 (多數情況下與其陰影色紋理貼圖相同)
   map_Ks lenna.tga # 高光色紋理貼圖
   map_d lenna_alpha.tga # alpha通道紋理貼圖
   map_bump lenna_bump.tga # 凹凸貼圖
   bump lenna_bump.tga # 也有用'bump'而非'map_Bump'標籤

 

另一篇文章:

MTL檔案的引數含義

材質庫檔案的基本結構:

newmtl mymtl_1
紋理貼圖定義
反射貼圖定義

newmtl Material__2233374
Ns 10.000000
//反射指數 Ns exponent 指定材質的反射指數,定義了反射高光度。 exponent是反射指數值,該值越高則高光越密集,一般取值範圍在0~1000
Ni 1.500000
//Ni ptical density 指定材質表面的光密度,即折射值。 ptical density是光密度值,可在0.001到10之間進行取值。若取值為1.0,光在通過物體的時候不發生彎曲。玻璃的折射率為1.5。取值小於1.0的時候可能會產生奇怪的結果,不推薦。
d 1.000000
//d factor表示物體融入背景的數量,取值範圍為0.0~1.0,取值為1.0表示完全不透明,取值為0.0時表示完全透明
Tr 0.000000
Tf 1.000000 1.000000 1.000000
// Tf r g b 濾光透射率
illum 2
//illum illum_# 指定材質的光照模型
Ka 0.588000 0.588000 0.588000
//ka 環境反射:Ka r g b ——用RGB顏色值來表示,g和b兩引數是可選的,如果只指定了r的值,則g和b的值都等於r的值。三個引數一般取值範圍為0.0~1.0,在此範圍外的值則相應的增加或減少反射率;
Kd 0.588000 0.588000 0.588000
//漫反射 Kd r g b
Ks 0.000000 0.000000 0.000000
//鏡面反射:Ks r g b
Ke 0.000000 0.000000 0.000000
map_Ka map\F1.jpg
//map_Ka -options args filename 為環境反射指定顏色紋理檔案(.mpc)或程式紋理檔案(.cxc),或是一個位圖檔案。在渲染的時候,Ka的值將再乘上map_Ka的值。

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