renderdoc捕获的mesh,通过插件一键导出成fbx

为解决从RenderDoc导出mesh数据至FBX格式的需求,开发者创建了一个Python扩展工具,该工具通过简单的UI实现mesh数据的CSV导出,并利用Autodesk的FBX SDK将CSV转换为FBX文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假期正好有时间,闲来无事就搞了一下这个工具。

起心动念于同事的一句话,后来也看到了很多种解决方案,但几乎都是要先从 renderdoc 里把 mesh 的 csv 导出去,然后在别的软件里,如 unity 中把数据重建成 fbx,感觉不是很丝滑,然后我就有了一个念头,为什么不能直接从 renderdoc 里导出 fbx 呢???

具体实现思路很简单,用 renderdoc 可以支持 python 扩展,且可以调用到 c++ 那边的 qt 框架的特点,撸一个简单的 ui 出来,并实现 csv 文件的导出,然后再通过 autodesk 提供的 fbx sdk 写的 c++ 控制台程序,完成读取 csv 并生成 fbx 的步骤。

这么东拼西凑一下,就完成了这个工具。

别问我为什么不直接改 renderdoc 的源码,先不提 c++ 代码难写的要命,哪天 renderdoc 作者大改版的话,代码还能不能用也不好说,以插件的形式存在,那是最安全的了~

项目仓库:

GitHub - rrtt2323/RenderdocResourceExporter: The main feature is to export mesh.Because I don't want to switch between other software to do this.So I wrote this thing.

安装方法:

直接双击 install.bat ,卸载我就不管了,你自己去删目录就好了。

使用方法:

切换到 Mesh Viewer 下,看到那个小黄点了麻,通过它来启动 python 扩展。

class ExportFbxOperator(bpy.types.Operator): bl_idname = "character.export_fbx" bl_label = "Export Fbx" def execute(self,context): props = context.scene.example_props project_path = props.project_path choosename = props.armature_list # 创建导出目录 if props.case_anim_option: export_dir = os.path.join(project_path, f"{choosename}Fbx\Animation") else: export_dir = os.path.join(project_path, f"{choosename}Fbx") # 确保目录存在 os.makedirs(export_dir, exist_ok=True) # 设置文件名和完整路径 filename = f"{choosename}.fbx" fbx_path = os.path.join(export_dir, filename) # 备份原始选择状态 original_selection = context.selected_objects original_active = context.active_object try: # 模式1:导出网格和骨架(无动画) if not props.case_anim_option: # 收集所有选中的网格和骨架 export_objects = [obj for obj in original_selection if obj.type in {'MESH', 'ARMATURE'}] if not export_objects: self.report({'ERROR'}, "未选中网格或骨架对象") return {'CANCELLED'} # 设置选中状态 bpy.ops.object.select_all(action='DESELECT') for obj in export_objects: obj.select_set(True) # 设置导出参数 export_kwargs = { 'filepath': fbx_path, 'use_selection': True, 'bake_anim': False, 'path_mode': 'COPY', # 复制贴图文件 'embed_textures': False, 'mesh_smooth_type': 'FACE', 'add_leaf_bones': False, 'use_armature_deform_only': True, 'object_types': {'MESH', 'ARMATURE'}, 'apply_scale_options': 'FBX_SCALE_ALL' } # 模式2:仅导出骨架和动画 else: # 查找选中的骨架 armatures = [obj for obj in original_selection if obj.type == 'ARMATURE'] if not armatures: self.report({'ERROR'}, "未选中骨架对象") return {'CANCELLED'} # 设置选中状态(仅骨架) bpy.ops.object.select_all(action='DESELECT') for arm in armatures: arm.select_set(True) context.view_layer.objects.active = arm # 设置导出参数 export_kwargs = { 'filepath': fbx_path, 'use_selection': True, 'bake_anim': True, 'path_mode': 'COPY', # 复制贴图文件 'embed_textures': False, 'add_leaf_bones': False, 'use_armature_deform_only': True, 'object_types': {'ARMATURE'}, 'bake_anim_use_all_actions': False, 'bake_anim_use_nla_strips': False, 'bake_anim_use_all_bones': True, 'bake_anim_force_startend_keying': True } # 执行FBX导出 bpy.ops.export_scene.fbx(**export_kwargs) self.report({'INFO'}, f"导出到: {fbx_path}") return {'FINISHED'} except Exception as e: self.report({'ERROR'}, f"导出失败: {str(e)}") return {'CANCELLED'} finally: # 恢复原始选择状态 bpy.ops.object.select_all(action='DESELECT') for obj in original_selection: obj.select_set(True) context.view_layer.objects.active = original_active 导出出错,提示找不到网络路径
最新发布
07-26
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值