教你如何使用GPA导出模型,另送一个 GPA CSV2MESH Tool in unity

news/2024/5/5 3:02:27/文章来源:https://blog.csdn.net/linjf520/article/details/127066726

以前写过一篇:Unity - RenderDoc 抓帧导出 FBX(带UV)


吐槽

我估计GPA是怕收律师函,因为如果 GPA 将所有资源一键提取,一键导出,那么可能很多开发商会告他

可以看到也好几个帖子问 GPA 官方,都是被官方忽悠回答了:

  • UV MAPS capture
  • GPA: No UV map support?

(除了这个,我自己还搜索过还几个类似有人问这个问题,结果同样被官方忽悠)


  • 我之前尝试过用 GPA,RenderDoc 来抓取模型,结果 GPA 导不出 UV,而且 VBV 数据长度还对不上,RenderDoc 还不能对抓取模拟器 - unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧) - 在现在这篇文章我尝试着将不同 VBV 元素长度的组装,我都以 indices 的长度来读取顶点数据的长度来构建模型,结果发现还真的可行,就是有不少无用的 primitive
  • RenderDoc 是可以直接导出带 UV 的,可以查看我之前的一篇:Unity - RenderDoc 抓帧导出 FBX(带UV)

既然GPA不整模型导出带UV,那么今天我们实现一个 GPA 中的模型导出 UV 的工具


问题实例

如果直接将 input gemoetry 导出
会得到一个除了 position 之外,没有其他数据的网格,如下:
在这里插入图片描述

然后,对应的 shader vs input 有6个 register
在这里插入图片描述

如果我们要向将这些顶点数据都导出来,直接使用 GPA 功能默认的Geometry output是导不出来的


开始实现


提取 VBV, IBV

上面的 VS_INPUT 可以看到 input attribute 的定义

但是这些数据是从哪些 VBV(vertex buffer viewer) 输入的呢?

我们可以点击 Resource 中的 Shader,选择:Vertex shader 后

然后查看使用到的数据有哪些,如下图:
在这里插入图片描述

OK,留意:
在这里插入图片描述

然后我们可以将每个 VBV 个、单个 IBV 设置导出 CSV Titles 格式,下面以导出 position.csv 为例

  • 根据shader input attribute 定义,定位使用的 vbv序号
  • 在 resource 中,找到对应的 vbv
  • 给 vbv 的 titles 设置好格式
  • 最后 导出 csv

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

其他的 tangent, normal, uv0, uv1, color0 都可以使用类似的方式导出,如上图,这个模型的数据我是使用下面的格式导出的
因为我们使用的是 unity mesh,那么TEXCOORD0 的 position 我们需要将其 semantic 修改为 POSITION,同理,normal 和 uv0 都使用对应的:NORMAL, TEXCOORD0 来替代

参考如下:

(注意每个 shader 的 VBV 是干嘛用的,需要自行去查看 shader 怎么使用,以此分析他们的 semantic)

GPA csv VBV format:

  • position : VBV1 - float POSITION.x;float POSITION.y;float POSITION.z;
  • tangent : VBV2 - float TANGENT.x;float TANGENT.y;float TANGENT.z;float TANGENT.w;
  • normal : VBV3 - float NORMAL.x;float NORMAL.y;float NORMAL.z;
  • uv0 : VBV0 - half TEXCOORD0.x;half TEXCOORD0.y;byte4p
  • uv1 : VBV0 - byte4p; half TEXCOORD4.x;half TEXCOORD4.y;
  • color0 : VBV1
    • float TEXCOORD5.x;float TEXCOORD5.y;float TEXCOORD5.z;float TEXCOORD5.w; byte4p
    • ubyte TEXCOORD5.x;ubyte TEXCOORD5.y;ubyte TEXCOORD5.z;ubyte TEXCOORD5.w; byte4p - 这个会使用比较多,但是这个有些问题:没有 normalized
    • nubyte TEXCOORD5.x;nubyte TEXCOORD5.y;nubyte TEXCOORD5.z;nubyte TEXCOORD5.w; byte4p - 然后添加了前缀 n 后,还是不能 normalized,所以这个我在工具中特殊弄了一些开关,可是设置 VBV 是否需要 normalized

工具演示导出

请添加图片描述


GPA 的 VBV,IBV的 BUG

我之前就怀疑还原模型的话,如果这些 IBV, VBV 长度都不对的话,除了浪费数据,还可能出问题

因为很多 VBV 和 IBV 的元素数量是对不上的

今天在抓帧某个角色的 卧蚕(眼部底下部分) 模型时候就出现这个问题

从下面的 IBV 可以看到1091,1092 之间的索引跨度很大,是有问题的

23901 的索引直接就超出了 VBV 顶点总数的数量
在这里插入图片描述

从下面的数据分析, Primitive 总数才 364 个三角形
在这里插入图片描述

VBV position 数量才 10313,但是 IBV 的索引已经远超这个范围了,这个很明显是 GPA 的数据显示上的 BUG
在这里插入图片描述

所以部分模型的导出可能遇到:

  • Fail setting triangles. Some indices are referencing out of bounds vertices. IndexCount: 2046, VertexCount: 10314
  • Fail setting triangles. The number of supplied triangle indices must be a multiple of 3.

在这里插入图片描述
在这里插入图片描述


Project

  • github 工程后续上传
  • 百度盘工程后续上传

References

  • GPA-Mesh - hub友 C++写的一个,没用过,也不知道怎么用
  • INTEL GPA mesh ripper tutorial + tool (x32,x64,DX9,10,11) - 2014 年的时候国外友人写了 GPA Hook 来抓自己想要的资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_15247.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PDN仿真笔记3-电容布局Q3D模型搭建】

PDN仿真笔记3-电容布局Q3D模型搭建 1. 叠层参数及设计要求 2. 变量设置 根据设计要求,将各个参数设置为变量,通过Add添加变量名称及数值(下图value应该为1.2mil) 部分设置完成的变量 3.搭建平面 引用2节中设置的变量&#xf…

检测网络框架越来越多

搬运工又来了 之前也发过相关 在汇总说一下啊~~ yolo也不在孤单了~~ 出了一大堆了~~ 之前都一一发过 今天在来个大汇总 目标检测是现在最热门的研究课题,也一直是工业界重点研究的对象,最近几年内,也出现了各种各样的检测框架&#xff0c…

PHP第三方易宝支付对接

简言: 最近手头有个数字藏品的项目,需要对接第三方易宝支付,在此整理自己的对接经验,希望对大家有所帮助。 步骤 1,下载sdk PHP第三方支付易宝支付最新sdk包,其中包含回调。-PHP文档类资源-CSDN下载 2&…

树形DP

285. 没有上司的舞会 - AcWing题库 题意是给你每个人的开心值&#xff0c;和每个人的顶头上司&#xff0c;如果每个人与自己的顶头上司不会同时去的前提下&#xff0c;问你最大的开心值是多少 树形dp 注释写在代码下面啦~ #include<iostream> #include<cstring>…

ThinkPHP6.0开启多应用模式的方法

ThinkPHP发展至今已经到了6..0.X版本,整个结构较thinkphp5有了很大的变化,ThinkPHP6.0基于精简核心和统一用法两大原则在5.1的基础上对底层架构做了进一步的优化改进,并更加规范化。由于引入了一些新特性,ThinkPHP6.0运行环境要求PHP7.1+,不支持5.1的无缝升级(官方给出了升…

3_1 操作系统

3.01 操作系统概述 接口的区分&#xff1a; 人机之间的接口&#xff1a;命令&#xff0c;窗口应用软件与硬件之间的接口&#xff1a;api的接口 进程管理 3.02 进程管理——进程状态转换图 进程的状态&#xff1a;操作系统当中对进程进行管理的时候&#xff0c;为进程指定了几种…

一个项目的整个流程

1.基本配置 基础配置包括 1.Vuex------------作用:存储公共的数据 2.Vue-router---------作用:配置页面的映射关系 3.node_modules--------作用:包的管理工具 npm i 包的名字 4.vue.config.js-----------配置一些信息 例如配置跨域的问题 5.assets 放一些静态的资源…

JAVA毕设项目酒店员工管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)

JAVA毕设项目酒店员工管理系统&#xff08;VueMybatisMavenMysqlsprnigSpringMVC&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&am…

DoIP协议:通用DoIP首部否定确认码02和03的区别

通用DoIP首部否定确认消息 当外部测试设备(诊断仪)发送DoIP消息给DoIP实体时,DoIP实体的传输层把DoIP消息(传输层payload,即DoIP header + DoIP payload)上发给DoIP协议层。DoIP协议层取到数据后,不管它是什么类型的DoIP消息,首先都需要被DoIP通用首部处理程序按照规定…

【统计学习|书籍阅读】第六章 logistics回国和最大熵模型 p77-p88

文章目录思路logistic回归模型最大熵模型最大熵模型定义最大熵模型的学习极大似然估计模型学习的最优化算法思路 logistic 回归是统计学习的经典分类方法。最大熵是概率模型学习的一个准则&#xff0c;将其推广到分类问题得到最大熵模型。 logistic回归模型 logistic分布&am…

# 二叉树和线索二叉树相关问题v1

文章目录二叉树和线索二叉树相关问题v1遍历算法遍历顺序分类遍历要点核心递归方式非递归方式线索二叉树二叉树vs线索二叉树(逻辑结构OR存储结构)线索二叉树的空指针剩余问题线索二叉树的遍历二叉树和线索二叉树相关问题v1 遍历算法 pre (NLR)A{B(DHI)(EJK)}{C(FLM)(GNO)}:∠\a…

【云原生 • Kubernetes】配置管理 - Secret ConfigMap

本文导读一、机密配置抽象 Secret1. 认识 Secret2. Secret 的使用(1) 创建 Secret 加密数据(2) 将 Secret 以变量形式挂载到 pod 容器二、配置抽象 ConfigMap1. 认识 ConfigMap2. ConfigMap 的使用(1) 创建配置文件(2) 创建 ConfigMap(3) 将 ConfigMap 以变量形式挂载到 pod 容…

如何保存el-pagination组件的分页状态。

一文细解如何保存组件的分页状态。 文章目录一文细解如何保存组件的分页状态。背景一、实现原理二、代码展示1.分页组件模板背景 使用element-plus的分页组件搭建页面的时候&#xff0c;经常会出现这样一种情况&#xff1a;分页为列表页&#xff0c;当从列表页点击某一项进入详…

HTTP协议4)----对于数据链路层的详细讲解

꧁ 大家好&#xff0c;我是 兔7 &#xff0c;一位努力学习C的博主~ ꧂ ☙ 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步❧ &#x1f680; 如有不懂&#xff0c;可以随时向我提问&#xff0c;我会全力讲解~&#x1f4ac; &…

Springboot2.x仿B站项目第五章查询Es和内容推荐功能实现笔记及源码

文章目录系统全局模块的开发1.系统全文搜索1.1docker 下安装ES以及kibana1.2 配置Es的相关的yaml和configuration1.3 ES全文检索需求视频投稿搜索查询2.观看记录的统计2.1观看视频的添加信息2.2查询观看记录3.用户视频推荐4.视频弹幕遮罩其他章节系统全局模块的开发 本章主要实…

嵌入式分享合集67

一、CAN的接口保护电路 在一个模块上&#xff0c;由于是中转的CAN&#xff0c;需要从两个不同的连接器上连接出去&#xff08;这种情况是根据客户的需求而定的&#xff09;。 一般的设计如图&#xff1a; 一般的&#xff0c;我们最多使用两个电压斜坡控制电容&#xff08;C2和…

Windows如何生成公钥和私钥

Windows如何生成公钥和私钥 方法一)使用git命令 一. 首先安装git二. 桌面上右键 Git Bash Here三. 命令ssh-keygen -t rsa然后 一直enter 四. 将公钥放到服务器上就可以使用SSH链接了. 方法二)使用openssl生成公钥和私钥 参考链接:https://blog.csdn.net/cduoa/article/deta…

组播路由协议——PIM DM工作机制

目录 扩散、剪枝机制 嫁接机制 状态刷新机制 断言机制 采用“推&#xff08;Push&#xff09;”的方式转发组播报文并生成组播表&#xff0c;建立SPT&#xff08;最短路径树&#xff09;转发组播报文。它假定每条链路都有接收者&#xff0c;在每条链路上都直接推送组播流量…

大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 HTML5期末大作业

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

Oracle 常用的经典SQL查询

/*1、查看表空间的名称及大小*/ select t.tablespace_name, round(sum(bytes / (1024 * 1024)), 0) ts_sizefrom dba_tablespaces t, dba_data_files dwhere t.tablespace_name d.tablespace_namegroup by t.tablespace_name; /*2、查看表空间物理文件的名称及大小*/ select…