mtl 文件解析

mtl:Material template library

obj 文件相同,都是 ASCII 编码的文件,可以直接打开,所以直接看内容就好

moon.mtl

文件来源

# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
# File Created: 06.10.2013 19:40:35

newmtl 01___Default
	Ns 10.0000
	Ni 1.5000
	d 1.0000
	Tr 0.0000
	Tf 1.0000 1.0000 1.0000 
	illum 2
	Ka 0.5882 0.5882 0.5882
	Kd 0.5882 0.5882 0.5882
	Ks 0.0000 0.0000 0.0000
	Ke 0.0000 0.0000 0.0000
	map_Ka C:\Users\Utente\Pictures\MoonMap2_2500x1250.jpg
	map_Kd C:\Users\Utente\Pictures\MoonMap2_2500x1250.jpg
	map_bump C:\Users\Utente\Pictures\moon-normal.jpg
	bump C:\Users\Utente\Pictures\moon-normal.jpg

注释

以 # 开头的都是注释,不多说

newmtl

格式 newmtl name,表示材质的名字,后边跟随的内容都用于描述该材质

Ns

没找到具体的名词定义,但是个人理解就是反射指数,number of Shininess
格式 Ns number,定义材质的光泽度(反射指数),该值的范围通常是 [0, 1000]

Ni

折射率,至于是什么的缩写我是真没找到,这里的 i 只能认为是index of refraction,不过我个人也感觉有点牵强了
取值范围 [0.001, 10],如果是 1 的话,就代表光线不需要弯曲,玻璃的折射率通常是 1.5。

d

渐隐指数,dissolve。取值范围 [0, 1],0 表示完全透明,1 表示完全不透明。渐隐指数对所有的光照模型都有效。

Tr

transparent,透明度,与 d 正好相反, Tr = 1 - d

Tf

格式Tf r g b,针对不同光单独定义的透明指数,比如 Tf 0 1 0,代表可以透过所有绿光,但是红、蓝则完全不能透过。

illum

光照模型,illumination,表示该材质适用哪种光照模型,取值范围[0, 10],11 种光照模型分别是:

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

Ka

ambient,环境反射, default is (0.2,0.2,0.2)

Kd

diffuse,漫反射,default is (0.8,0.8,0.8)

Ks

specular,镜面反射, default is (1.0,1.0,1.0)

Ke

emissive,放射光(自发光),例如图形中的光源,Ke 0.0000 0.0000 0.0000则为不发光材质

map_Ka

环境光纹理文件

map_Kd

漫反射纹理文件

map_bump

法线纹理文件

bump

同 map_bump

其他

这个文件中的 map_Ka、map_Kd、map_bump、bump 中的路径明显是错的,使用的都是绝对路径,这种在下载后渲染一定是会出问题的,需要改为相对路径。

参考

Material template library - wikipedia
MTL material format - paulbourke
模型加载、简单着色与纹理映射