【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同
 

猜你喜欢

转载自blog.csdn.net/weitaming1/article/details/84953845
今日推荐