OBJ 模型文件与MTL材质文件 介绍

您所在的位置:网站首页 blender材质包怎么使用 OBJ 模型文件与MTL材质文件 介绍

OBJ 模型文件与MTL材质文件 介绍

#OBJ 模型文件与MTL材质文件 介绍| 来源: 网络整理| 查看: 265

制作3D模型的软件有很多,例如3D max, Blender, Maya等。于是就有很多模型文件格式。 例如.obj、.max、.fbx .3ds。 其中obj最简单,关键是,还可以文本方式打开,对窥探3D模型的数据格式比较有用。所以,我们这里用obj格式来说明3D模型文件。

obj由Wavefront公司为3D建模和动画软件"Advanced Visualizer"开发的一种标准,各大3D建模软件都支持,也很适合用于3D软件互相做格式转换。

obj文件需要搭配一个附属文件,叫mtl。全称就是material,也就是材质的意思。 怎么分工呢? 几何信息由.obj文件提供,材质信息由.mtl文件提供。 啥是几何信息?就是顶点/纹理坐标,索引值等。 啥是材质信息?就是纹理用哪一张,光照参数用多少等等。

一个模型可以由多个子模型组成,每个子模型,称为网格(Mesh)。例如,一个人物模型,可以包括头和手,脚,衣服,道具等子模型。 所以obj文件,可以包含1个或者多个object对象。

同理,mtl文件也可以声明多种材质,比如衣服的材质,道具的材质等等。

好了,话不多说,开始来深入了解OBJ文件的结构。

OBJ 文件的结构

我们下载一个3D模型文件来具体打开看看。 有很多下载3D模型的网站,当然了,有兴趣,你也可以自己下载个软件画个模型。

网站例子:

https://free3d.com/3d-models/

我下载了一只可爱的小鸭子。 在这里插入图片描述 解压后,有3个文件: 在这里插入图片描述 mtl和obj都可以用文本编辑器打开。 我们打开第一个,并直接加一些注解如下:

# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware # File Created: 09.12.2011 14:44:16 ##chenxf: obj对应的mtl材质文件,一般放在同一级目录 mtllib 12248_Bird_v1_L2.mtl ##chenxf: o开头,表示对象名称 o 12248_Bird_v1 ##chenxf: v开头,表示顶点 v 12.0437 -1.8030 28.0499 v 12.5763 -0.5349 27.5635 v 11.8189 0.5112 28.9634 ....省略.... v -2.0651 -8.0560 53.2951 v -2.1582 -7.8612 53.3584 # 8758 vertices ##chenxf: vn开头, 顶点法向量 vn 0.8496 -0.1740 0.4978 vn 0.8701 -0.1437 0.4715 vn 0.7973 -0.0563 0.6009 ....省略.... vn 0.9099 0.4028 0.0992 vn 0.9549 0.2840 0.0870 vn 0.8520 0.5001 0.1548 # 8685 vertex normals ##chenxf: vt 开头,表示存放的是纹理坐标,三个数分别表示一个纹理坐标的(s,t,p)分量值,其中 p 分量一般用于 3D 纹理; vt 0.3554 0.7424 0.0000 vt 0.3366 0.7172 0.0000 vt 0.3719 0.6891 0.0000 vt 0.3883 0.7135 0.0000 ....省略.... vt 0.5612 0.6731 0.0000 vt 0.5779 0.6691 0.0000 vt 0.5904 0.6572 0.0000 # 9582 texture coords ##chenxf: 组名称 g 12248_Bird_v1 ##chenxf: 使用哪个mtl usemtl 12248_Bird_v1 ##chenxf: s开头,Smooth shading across polygons, 大于0表示开启平滑渲染 s 2 ##chenxf: f开头,face,表示存放的是一个三角面的信息,后面有三组数据分别表示组成三角面的三个顶点的信息,每个顶点信息的格式为:顶点位置索引/纹理坐标索引/法向量索引。 f 1/1/1 2/4801/2 3/2613/3 4/4804/4 f 2/4801/2 5/2/5 6/4802/6 3/2613/3 f 7/3/7 8/4803/8 3/2613/3 6/4802/6 f 8/4803/8 9/4/9 4/4804/4 3/2613/3 ....省略.... f 8749/9171/8676 8700/2601/8627 8745/9170/8672 8758/4800/8685 f 8742/2611/8669 8741/9169/8668 8758/4800/8685 8745/9170/8672 f 8741/9169/8668 8738/2610/8665 8756/9176/8683 8758/4800/8685 # 8752 polygons MTL材质文件

接下来,再打开mtl文件看看:

# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware # File Created: 09.12.2011 14:44:16 ##chenxf: 声明一个名字叫12248_Bird_v1的材质,obj文件usemtl需要用到 newmtl 12248_Bird_v1 Ns 28.0000 # Ns 表示材质的反射指数,反射指数越高则高光越密集,取值范围在一般为 [0,1000] Ni 1.5000 # Ni 表示材质的折射值(折射率),一般取值范围是 [0.001,10] ,取值为 1.0,表示光在通过物体的时候不发生弯曲,玻璃的折射率为 1.5 d 1.0000 # d 表示材质的渐隐指数(通透指数),取值为 1.0 表示完全不透明,取值为 0.0 时表示完全透明 Tr 0.0000 # Tr 表示材质的透明度(与 d 的取值相反),默认值为0.0(完全不透明) Tf 1.0000 1.0000 1.0000 # Tf 表示材质的滤光折射率,三维向量表示 illum 2 # illum 表示材质的光照模型,范围0-10,这里2表示开启高光 Ka 1.0000 1.0000 1.0000 # Ka 表示材质的环境光(Ambient Color)(r,g,b); Kd 1.0000 1.0000 1.0000 # Kd 表示材质的散射光(Diffuse Color)(r,g,b); Ks 0.2880 0.2880 0.2880 # Ks 表示材质的镜面光(Apecular Color)(r,g,b); Ke 0.0000 0.0000 0.0000 # Ke 表示材质的发射光,它与环境光,散射光和镜面光并存,代表材质发出的光量; map_Ka 12248_Bird_v1_diff.jpg # map_Ka 表示为材质的环境反射指定纹理文件(纹理采样值与环境光相乘作为输出颜色的一部分加权); map_Kd 12248_Bird_v1_diff.jpg # map_Kd 表示为材质的漫反射指定纹理文件 # 还有map_Ke表示为材质的发射光指定纹理文件, map_d 表示为材质的透明度指定纹理文件, 这个例子不需要

注释已经写的很明白了。

另外,再次啰嗦一下,上面的例子虽然只有一个模型对象和一个材质。但再复杂一些的模型,是可以一个obj文件,声明多个子模型(即,网格)。 每个网格,也可以使用多个材质,材质也不要求一定有纹理图片。

不信请看我下载的另一个模型文件的obj和mtl的截图: 在这里插入图片描述 在这里插入图片描述

参考

NDK OpenGL ES 3.0 开发(二十):3D 模型 NDK OpenGL ES 3.0 开发(二十一):3D 模型加载和渲染 mtl dataformat



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3