unity动态加载.obj文件相关

.obj文件加载相关

  • QA:
  • 要点
  • .obj文件结构
  • .mtl文件结构
    • 材质匹配问题
  • 动态加载obj文件
    • unity资源商城插件:Runtime Obj Importer

QA:

q: 如何动态加载obj模型到unity?
a: 解析.obj模型文件字节流,文件里包含顶点信息网格信息材质信息等。

q: 加载后为裸模,如何匹配材质?
a: .obj文件里有mtllib 行数据,记录对应材质库文件(.mtl)所在 对材质库文件进行解析,材质库文件包含材质基本信息以及纹理所在路径

q: 模型只能应用一个材质,如何在一个模型上使用多个材质?
a: 在解析.obj模型文件时,存在usemtl 行数据,对应模型哪部分信息使用此材质

要点

unity 2019.4.30拖入obj文件时,如果模型含有多个submesh,unity会合并成一个,所以如果一个模型有多个submesh且使用不同材质,则会有材质问题。(其他版本不知道)
所以在动态加载obj文件时,要自己对submesh进行划分记录且记录对应的材质 自己绑定材质渲染submesh

.obj文件结构

  • 没有文件头
  • 由一行一行文本组成
  • 以#开头注释
  • 空格和空行可以随意添加
  • 数据行由 [关键字 数据]组成

基础数据:(其他数据自己查)

关键字 解释 例子 作用
v 顶点 v -57.2008 260.8698 -10.5155
vt 顶点贴图坐标 vt -293.5261 -193.5156 -22.2743
vn 顶点法线 vn 0.3007 -0.5771 0.7593
f 面构成点 f 55612/21698/32579 55613/21699/32580 55617/21703/32584 55616/21702/32583
o 对象
g g 对象001
mtllib 材质库 mtllib qianbi_3g.mtl 模型相关联的材质数据文件(.mtl文件)
usemtl 其后数据使用的材质 usemtl model 对此标签后的模型数据划分,可以在动态生成纹理时,让不同子网格匹配不同纹理,不至于一个纹理对应所有网格的错误

.mtl文件结构

newmtl shengzi//材质  名称
	Ns 30.0000
	Ni 1.5000
	d 1.0000
	Tr 0.0000
	Tf 1.0000 1.0000 1.0000 
	illum 2
	Ka 0.5880 0.5880 0.5880//环境反射rgb值
	Kd 0.5880 0.5880 0.5880//漫反射rgb值
	Ks 0.3960 0.3960 0.3960//高光(镜面)反射rgb值
	Ke 0.0000 0.0000 0.0000
	map_Ka UV.png//环境反射纹理
	map_Kd UV.png//漫反射纹理
	map_bump -bm 0.3000 UVaotu.png//法线贴图
	bump -bm 0.3000 UVaotu.png

材质匹配问题

在解析.mtl文件的数据到unity中时,一些材质数据并不完全适用于unity的材质;
最简单的unity材质匹配就是:.mtl文件里的漫反射颜色+漫反射纹理 对应unity的标准材质的颜色和纹理贴图 .mtl中的rgb颜色值可能是在模型软件中加上光等其他颜色后所调的值,所以在unity中可能看起来效果不同
解决材质效果不同的思路:
1.自己写材质来对应 计算.mtl文件里的相关数据,看看哪些数据对表现效果有影响,然后再进行匹配
2.照着数据匹配,然后自己手动在unity中调试。

动态加载obj文件

unity资源商城插件:Runtime Obj Importer

思路:
Reader工具类辅助读取文件流
读取obj文件流中每行首个字符串 进行类别判断

读到mtllib 在同级文件下找mtl文件 解析文件里的材质信息

你可能感兴趣的:(业务处理,unity,批量替换)