.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文件相关相关推荐

  1. unity动态加载obj文件

    unity2018.4.2f1 vs2017 最近项目需求,需要实现动态读物外部obj模型,并加载到场景中,研究了好几天,终于实现了,在此做个记录. 1.首先随便找个.obj模型,带贴图,我的资源截图 ...

  2. php动态页面加载慢,通过动态加载JS文件提升网站访问速度

    相对与HTML,CSS,javascript是最影响浏览器性能的,因为浏览器在遇到<script>标签时,必须等待js代码下载和执行完毕后再执行后面的内容,因此当页面中js文件过多时,网站 ...

  3. Unity动态加载3D模型

    Unity动态加载3D模型 在Unity中创建游戏对象的方法有 3 种: 第一种是将物体模型资源由 Project 视图直接拖曳到 Hierarchy 面板中: 第二种是在 Unity 3D 菜单 G ...

  4. ExtJS4.x动态加载js文件

    动态加载js文件是ext4.x的一个新特性,可以有效的减少浏览器的压力,提高渲染速度.如动态加载自定义组件 1.在js/extjs/ux目录下,建立自定义组件的js文件. 2.编写MyWindow.j ...

  5. JavaScript动态加载js文件

    /********************************************************************** JavaScript动态加载js文件* 说明:* 之前没 ...

  6. linux 下创建并动态加载.so 文件

    最简单的生成, 动态加载.so 文件的例子 //test.cpp #ifndef _TEST_H    #define _TEST_H       #include <iostream> ...

  7. php 动态加载JavaScript文件或者css文件

    1. 动态加载JS文件 第一种方法: test.php <script language="JavaScript" src="test6.php?str=i lov ...

  8. 动态加载JavaScript文件

    目录 配置 无脑方法! 逆袭之道! 一块蛋糕! 结论 源代码 JavaScript文件的动态加载是您必须拥有的非常有用的工具之一.它允许您通过将阻止脚本从加载过程中移出(通常称为"延迟加载& ...

  9. 动态加载js文件是异步的

    动态加载js文件是异步的. 今天调试一个错误,一个js方法各种调不到. 原因是因为所调方法的js文件是动态加载进来的. <script type="text/javascript&qu ...

最新文章

  1. JavaScript权威指南--window对象
  2. TLSNotary中心化预言机(1) TLS1.1协议
  3. 基于FPGA NIOS处理器的数码音乐相册
  4. 什么是Java多态?如何实现Java多态?
  5. J2EE从头开始__EJB3
  6. 做一个有胆识的有为青年
  7. java 多态判断非空_Java多态性理解
  8. OpenCV-Canny边缘检测
  9. 51Nod-1019 逆序数【逆序偶+归并排序】
  10. Acwing第 34 场周赛
  11. Android笔记:触摸事件的分析与总结----TouchEvent处理机制
  12. linux上禅道源码安装步骤
  13. MiniUtilityFramework(九):CText和TEXT
  14. KinectV2 qt opencv 实现平面测量
  15. 高精度ua级恒流源_高精度恒流源电路图大全(十款高精度恒流源电路设计原理图详解)...
  16. jetbrains DataGrip 1.0注册破解方法
  17. win10系统通过WSL/WSL2安装各种linux版本,开启图形桌面
  18. element -ui如何去掉原来的蓝色下划线
  19. java osm_osm 数据格式(openstreet map)与Route | 学步园
  20. 按“window+E”键出现【找不到应用程序】或【explore.exe找不到】的解决方法

热门文章

  1. 用c语言编写简单的餐厅点餐系统(带后台)
  2. Android环信即时通信集成全过程(含demo)
  3. 我们在400多年前成书的《封神演义》中看到了5G应用的影子
  4. 产业园以商招商实施方案
  5. 计算机专业毕设都需要哪些准备,计算机专业本科毕设指南.ppt
  6. 九宫格数独c语言编程,求用C语言编一个解九宫格数独的程序
  7. oracle查询所有表的中文名,Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、...
  8. 三年成为年薪70w架构师,只因做到了这些。果然不是一般人
  9. 大学计算机教材李琦2019,计算机科学与软件学院_关于征订2019-2020学年第一学期教材的通知...
  10. 逆向脱壳破解分析基础学习笔记七 堆栈图(重点)