unity动态加载.obj文件相关

本文详细介绍了在Unity中动态加载.obj模型的方法,包括解析.obj文件结构,理解材质库.mtl文件内容,解决多材质匹配问题。在Unity2019.4.30版本中,若模型含有多个子网格,可能会导致材质合并问题,因此需要手动处理子网格和材质绑定。此外,还提到了RuntimeObjImporter插件作为动态加载的一种解决方案。
摘要由CSDN通过智能技术生成

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对象
gg 对象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文件 解析文件里的材质信息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值