IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> unity code之FBX模型导入与渲染 -> 正文阅读

[游戏开发]unity code之FBX模型导入与渲染

入口:

unity的资源导入入口在AssetDataBase.cpp中ImportAsset。

他会先找给到的metaDataPath来确定这个Asset是属于什么类型。

资源导入继承关系

继承关系中AssetImporter是最基本的资源导入类,然后如果是模型相关的会用ModelImporter继承他,然后如果是fbx相关的资源则会用FBXImporter继承他来实现。资源导入相关的继承关系在AssetPipeline目录下。

生成资源数据

这里比较关键的是AssetDataBase下的importer->GenerateAssetData ();然后他会执行导入DoMeshImport,运行到FBXImporter的DoMeshImport中

在fbximporter.cpp中有ConvertToFBXFile是指把相关的源文件转到fbx下。ConvertToFBXFile下会根据之前的资源的后缀来区分解决,比如区分是maya、max、blend、c4d等转换文件的源文件格式。

FBX读取

然后回到DoMeshImport中CImportSettings记录导入的设置。

LoadAndLookupSymbols这里是解析获取数据的方式,然后DoImportScene是自己写的在UnityFBX这个类里的分析fbx数据的方法。他是用fbx的sdk来导入fbx数据的。

基于FBX SDK的FBX模型解析与加载 -(一)_wozhengtao的博客-CSDN博客_fbx sdk

最终用ImportSceneToCImportScene来整合数据到CImportScene中。

组织导入数据类型

回到FBXImporter中的DoMeshImport,CImportSceneToImportScene中会组织nodes数据中的位置缩放旋转等,网格数据,材质数据,摄像机数据,灯光数据,动画数据,采样帧率放到ImportScene结构里面。DoMeshImport最终返回这个数据。

然后ModelImporter的GenerateAssetData后面会GenerateAll生成具体的数据。

生成skinnedmesh相关数据

再GenerateAll下如果发现是要导入skinnedmesh的话就会执行到ImportSkinnedMesh。

再ImportSkinnedMesh中会初始化SkinnedMeshRenderer,然后Setup传入mesh数据。然后就到了SkinnedMeshFilter的Setup中,他会UpdateCachedMesh更新mesh的cache。

组织vbo正式绘制mesh

unity绘制mesh都是通过组织vbo来绘制的,在SkinnedMeshFilter的Render中通过DrawUtil::DrawVBOMeshRaw来执行绘制,给到vbo和mesh来绘制。这里的mesh就是上一步给到的cachemesh。

然后vbo就是看各个平台下的vbo了,比如d3d11的话就是D3D11VBO,d3d的话是D3D9VBO,opengl是ARBVBO,opengles20是VBOGLES20,opengles30是GLES3VBO。

然后会在DrawUtil::DrawVBOMeshRaw下执行vbo.DrawVBO,然后在VBOGLES20中DrawInternal执行opengles20的绘制,到了DrawInternal下就是具体的gl语言绘制了。绑定ebo的buffer,vbo的buffer,然后SetupVertexInput中设置图片数据,颜色数据到opengl,然后通过glDrawElements也就是索引列表来绘制网格,结束整个绘制。

导出以及保存

最终通过AssetImportPrefabQueue的QueuePrefab假如到prefab中。

通过AssetDataBase的GenerateLibraryRepresentation生成数据到library中。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:43:41  更:2021-11-20 18:44:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 23:39:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码