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.0000Ni 1.5000d 1.0000Tr 0.0000Tf 1.0000 1.0000 1.0000 illum 2Ka 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.0000map_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动态加载.obj文件相关相关推荐
- unity动态加载obj文件
unity2018.4.2f1 vs2017 最近项目需求,需要实现动态读物外部obj模型,并加载到场景中,研究了好几天,终于实现了,在此做个记录. 1.首先随便找个.obj模型,带贴图,我的资源截图 ...
- php动态页面加载慢,通过动态加载JS文件提升网站访问速度
相对与HTML,CSS,javascript是最影响浏览器性能的,因为浏览器在遇到<script>标签时,必须等待js代码下载和执行完毕后再执行后面的内容,因此当页面中js文件过多时,网站 ...
- Unity动态加载3D模型
Unity动态加载3D模型 在Unity中创建游戏对象的方法有 3 种: 第一种是将物体模型资源由 Project 视图直接拖曳到 Hierarchy 面板中: 第二种是在 Unity 3D 菜单 G ...
- ExtJS4.x动态加载js文件
动态加载js文件是ext4.x的一个新特性,可以有效的减少浏览器的压力,提高渲染速度.如动态加载自定义组件 1.在js/extjs/ux目录下,建立自定义组件的js文件. 2.编写MyWindow.j ...
- JavaScript动态加载js文件
/********************************************************************** JavaScript动态加载js文件* 说明:* 之前没 ...
- linux 下创建并动态加载.so 文件
最简单的生成, 动态加载.so 文件的例子 //test.cpp #ifndef _TEST_H #define _TEST_H #include <iostream> ...
- php 动态加载JavaScript文件或者css文件
1. 动态加载JS文件 第一种方法: test.php <script language="JavaScript" src="test6.php?str=i lov ...
- 动态加载JavaScript文件
目录 配置 无脑方法! 逆袭之道! 一块蛋糕! 结论 源代码 JavaScript文件的动态加载是您必须拥有的非常有用的工具之一.它允许您通过将阻止脚本从加载过程中移出(通常称为"延迟加载& ...
- 动态加载js文件是异步的
动态加载js文件是异步的. 今天调试一个错误,一个js方法各种调不到. 原因是因为所调方法的js文件是动态加载进来的. <script type="text/javascript&qu ...
最新文章
- JavaScript权威指南--window对象
- TLSNotary中心化预言机(1) TLS1.1协议
- 基于FPGA NIOS处理器的数码音乐相册
- 什么是Java多态?如何实现Java多态?
- J2EE从头开始__EJB3
- 做一个有胆识的有为青年
- java 多态判断非空_Java多态性理解
- OpenCV-Canny边缘检测
- 51Nod-1019 逆序数【逆序偶+归并排序】
- Acwing第 34 场周赛
- Android笔记:触摸事件的分析与总结----TouchEvent处理机制
- linux上禅道源码安装步骤
- MiniUtilityFramework(九):CText和TEXT
- KinectV2 qt opencv 实现平面测量
- 高精度ua级恒流源_高精度恒流源电路图大全(十款高精度恒流源电路设计原理图详解)...
- jetbrains DataGrip 1.0注册破解方法
- win10系统通过WSL/WSL2安装各种linux版本,开启图形桌面
- element -ui如何去掉原来的蓝色下划线
- java osm_osm 数据格式(openstreet map)与Route | 学步园
- 按“window+E”键出现【找不到应用程序】或【explore.exe找不到】的解决方法
热门文章
- 用c语言编写简单的餐厅点餐系统(带后台)
- Android环信即时通信集成全过程(含demo)
- 我们在400多年前成书的《封神演义》中看到了5G应用的影子
- 产业园以商招商实施方案
- 计算机专业毕设都需要哪些准备,计算机专业本科毕设指南.ppt
- 九宫格数独c语言编程,求用C语言编一个解九宫格数独的程序
- oracle查询所有表的中文名,Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、...
- 三年成为年薪70w架构师,只因做到了这些。果然不是一般人
- 大学计算机教材李琦2019,计算机科学与软件学院_关于征订2019-2020学年第一学期教材的通知...
- 逆向脱壳破解分析基础学习笔记七 堆栈图(重点)