目的
之前写过一篇:unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)
这篇文中使用了 GPA, RenderDoc
GPA 可以抓帧 模拟器上 APK 安卓运行中的信息
RenderDoc 的,我死活抓不了(以前低版本的 安卓 手机、RenderDoc 抓帧是很方便的,不知道为何,现在抓不了了)
然后 GPA 能抓,但是模型导出来,没有 UV:GPA: No UV map support? - (帖子说是 DX12 可以导出,但是模拟器设置不了 DX12 的图形 API,-_-!!!)
所以就使用了 RenderDoc 来抓模型,并带上有效的 UV
(后续有从 GPA 上导出 CSV 来重构模型:可以参考这篇:教你如何使用GPA导出模型,另送一个 GPA CSV2MESH Tool in unity)
环境
Unity : 2020.3.18f1
RenderPipeline : URP
Unity Package : FBX Exporter 4.1.2
工具入口
演示工具导出
先从 RenderDoc 中导出 CSV
因为 RenderDoc 可以导出有效的 vertex buffer 信息,导出的是 csv 格式的数据
RenderDoc 打开后, MeshView/VS Input/右键任意行/Export to CSV
,如下图:
比如这些数据,如下图:
可以看到,每个顶点的 vertex id, index, position, normal, tangent, uv 都清清楚楚的
所以工具还是很好写的
开始撸工具
RDC_CSV
就是我们首选需要设置的 CSV 文本对象
如果不设置,那么会显示一个提示:Have no setting the RDC_CSV yet!
FBX Name
FBX 的名字,可以指定 Prefab, Model, Material, Folder, GameObject.name 的名字
Output Path(Dir)
输出的路径(目录)
可以点击 Browser… 按钮点调整输出的路径所在
也可以直接编辑 Output Path(Dir) 右边的输入框,如下:
Export FBX
Export FBX 没啥好说,就是导出了
Model Options
模型导出选项
Is From DirectX CSV
CSV 导出的配置,是否来源于 Graphics API 为: DirectX 系列的图形 API
如果是的话,会对 UV 坐标中的 V 反转,比如:UV.y = 1 - UV.y;
Is Recalculate AABB
是否调用 Mesh.RecalculateBounds();
Vertex Offset/Rotation/Scale
就是 TRS 矩阵信息,会在所有顶点数据导出前,进行 TRS 矩阵变换
Has UV0/1/2/3/4/5/6/7
是否带有 UV0~7 中指定的数据,UV0默认是勾上的,因为比较常用,一般模型都会有
Normal/Tangent Import Type
法线 和 切线 的导入类型,控制的是 法线,切线的导入方式,分别使用类型定义为: Unity 中的 ModelImporterNormals
和 ModelImporterTangents
Material Options
材质选项
Material Set Type
材质的设置类型
分别为:创建新的材质 和 使用现存材质资源
Shader - Create New
下面是 Create New 时的选项
使用 创建新的材质 方式时显示,指定新建材质使用的 shader
Main Texture - Create New
使用 创建新的材质 方式时显示,指定新建材质使用的 主纹理
Material Asset - Using Exsit Material Asset
下面是 Using Exsit Material Asset 时的选项
显示设置选择需要使用的 现存材质对象
总结列表
PropertyL1 | PropertyL2 | Descriptions |
---|---|---|
RDC_CSV | 就是我们首选需要设置的 CSV 文本对象,如果不设置,那么会显示一个提示:Have no setting the RDC_CSV yet! | |
FBX Name | FBX 的名字,可以指定 Prefab, Model, Material, Folder, GameObject.name 的名字 | |
Output Path(Dir) | 输出的路径(目录),可以点击 Browser… 按钮点调整输出的路径所在, 也可以直接编辑 Output Path(Dir) 右边的输入框 | |
Model Options | 模型导出选项 | |
Is From DirectX CSV | CSV 导出的配置,是否来源于 Graphics API 为: DirectX 系列的图形 API,如果是的话,会对 UV 坐标中的 V 反转,比如:UV.y = 1 - UV.y; | |
Is Recalculate AABB | 是否调用 Mesh.RecalculateBounds(); | |
Vertex Offset/Rotation/Scale | 就是 TRS 矩阵信息,会在所有顶点数据导出前,进行 TRS 矩阵变换 | |
Has UV0/1/2/3/4/5/6/7 | 是否带有 UV0~7 中指定的数据,UV0默认是勾上的,因为比较常用,一般模型都会有 | |
Normal/Tangent Import Type | 法线 和 切线 的导入类型,控制的是 法线,切线的导入方式,分别使用类型定义为: Unity 中的 ModelImporterNormals 和 ModelImporterTangents | |
Material Options | 材质选项 | |
Material Set Type | 材质的设置类型, 分别为:创建新的材质 和 使用现存材质资源 | |
Shader - Create New | 使用 创建新的材质 方式时显示,指定新建材质使用的 shader | |
Main Texture - Create New | 使用 创建新的材质 方式时显示,指定新建材质使用的 主纹理 | |
Material Asset - Using Exsit Material Asset | 显示设置选择需要使用的 现存材质对象 |
后续优化
- VS Input 数据 可以不从 IDX 开始
- 可以重新映射 VS Input Semantic 的作用
- CSV2FBX 工具可以优化: - vertex shader attribute(A2V) 的数据可以用内置分析,也可以用指定名字的分析配置
- 可以导出,导入 manually semantic mapping 配置的支持
Project
- javelinlin/Testing_CSV2Mesh_Tool - github
- Testing_CSV2Mesh_Tool_RenderDoc导出CSV_再导出FBX - 百度网盘
- Testing_CSV2Mesh_Tool_RenderDoc导出CSV_再导出FBX_2022_07_14 - 百度网盘
References
- Alunice/TaTa/tree/master/CSV2Mesh
- Renderdoc扒模型教程
- 一些卡渲游戏的材质逆向和记录 - 我将工具写完了,才发现这片 blog 是基于 render doc 的 extension 写了 py 插件,非常不错
- FXTD-ODYSSEY/renderdoc2fbx - 这是 github 该插件的 export fbx 的开源代码,太赞了!后续有空研究一下