日期:2021年7月8日标签:ComputerGraphics

Wavefront MTL文件格式 #

古驰原典恐龙展示 上海古驰原典展览

在前一篇文章OBJ图形格式文件解析中提到一般三维图形软件(例如blender)生成OBJ文件时,会一起生成一个MTL格式的文件,MTL文件是用来描述几何体的材质的。,这节内容一起看下MTL文件的组成部分。

一.概述 #

MTL文件一般包括一个或多个材质的定义,每个材质定义都包含颜色(color)、纹理(texture)和反射贴图(reflection map)。它们被用于描述几何体的表面和顶点的纹理。Material文件内容以ASCII格式存储,同时有.mtl文件扩展名。

.mtl文件中的每个材质描述都由newmtl语句构成。newmtl语句给当前材质定义赋予一个名称,并代表了材质定义的起始点。起始语句后紧跟描述材质的材质颜色和纹理贴图语句。一个.mtl文件包含多个不同的材质的定义。

每当使用newmtl关键字开始定义一个新的材质时,该语句后面描述(定义)该材质的所有语句的顺序是任意的。

二.格式 #

下面是一个相对简单的.mtl文件的内容。

材质名称语句:

newmtl my_mt1

材质颜色和光线语句:

Ka 0.0435 0.0435 0.0435
Kd 0.1086 0.1086 0.1086
Ks 0.0000 0.0000 0.0000
Ns 10.0000
illum 2

纹理贴图语句:

map_Ka mapfile.png
map_Kd mapfile.png

纹理名称 #

.mtl文件中newmtl语句是必须包含的,并且在每个材质定义的最顶端,标志一个材质定义的开始。newmtl语句给一个材质命名。

newmtl name

和一般程序命名一样,材质的名称可以是任意长度的字符串,但是不能包含空格字符。下划线也是可以用于名称当中的。

材质颜色 #

冯氏光照模型指定了物体的材质属性由环境光照(Ambient Lighting)、漫反射光照(Diffuse Lighting)、镜面光照(Specular Lighting)组成(其实还有一个反光度,下面会介绍)。为了定义这一系列 值,.mtl文件中KaKdKs语句分别描述了这几个值,每个值范围都是0—1对应颜色0-255:

Ka r g b
Kd r g b
Ks r g b

通常,为了模拟更真实的效果,还会有一个镜面高光的反光度参数(Shininess),描述了镜面高光的强度,反光度越大表示镜面高光越亮。所以我们可以认为材质由环境光照、漫反射光照、镜面光照和反光度共同定义和描述。 .mtl文件中由Ns语句定义了反光度,反光度取值范围为0-1000。

Ns exponent

关于冯氏模型,暂时我还没有写过相关文章,但是我会尽快更新3D图形中光照这一块的。想了解的朋友可以关注一下。

光照模型 #

.mtl还可以指定计算阴影的光照模型。使用illum开头的语句定义,illum关键字后接一个代表光照模型的数字,值为0、1、2。

illum illumno
  • 0:恒色照明模型,最终颜色取值为Kd值,color = Kd
  • 1:漫反射照明模型,最终颜色由环境颜光照和漫反射光照决定,并且受多个光源影响。
  • 2:漫反射和镜面光照结合模型,最终颜色由环境光照、漫反射光照和镜面光照共同决定。

材质纹理贴图 #

纹理贴图语句通过将图像或纹理文件与可映射的材料参数关联来修改表面的材料参数,也就是材料显示的颜色。通过修改现有参数而不是替换它们,纹理贴图在改变对象表面外观方面提供了很大的灵活性。

map_Ka mapfile.png
map_Kd mapfile.png

纹理图片应该是一个方形的,并且尺寸必须是2的幂次方。例如256x256, 512x512, 1024x1024。

三.示例 #

  1. Neon green

恒色照明模型:

newmtl neon_green
Kd 0.0000 1.0000 0.0000
illum 0
  1. Flat green

漫反射照明模型:

newmtl flat_green
Ka 0.0000 0.2000 0.0000
Kd 0.0000 0.8000 0.0000
illum 1
  1. Shiny green

漫反射和镜面光照结合模型:

newmtl shiny_green
Ka 0.0000 0.1000 0.0000
Kd 0.0000 0.4000 0.0000
Ks 0.5000 0.5000 0.5000
Ns 200.0000
illum 2
  1. texture map

使用纹理贴图的恒色照明模型:

newmtl green_flag
Ka 0.0000 0.2000 0.0000
Kd 0.0000 0.8000 0.0000
illum 1
map_Ka brazil_logo.gif
map_Kd brazil_logo.gif

这篇文章仅讲解了MTL文件的格式和内容,里面涉及了太多光照的知识,不是很容易理解,我会尽快补充这部分内容。

附: 参考资料 #

MTL文档字段描述

(完)

目录