编译FBX SDK for Python3.9
发表于更新于
字数总计:607阅读时长:2分钟阅读量: 长沙
前言
公司有个需求是要在UE5中处理fbx数据,要用到fbx sdk。
可是UE5的python版本是3.9,网上没有找到对应的,就自己编译了一个。
这里记录一下过程。
(文章尾巴有编译好的自取)
编译过程
准备
下载安装FBX SDK和Python Bindings
下载FBX C++ SDK
下载FBX SDK Python Bindings
这两样下载完成后直接安装即可,安装后记录安装路径位置。
新建一个文件夹D:\fbx_sdk\2020.2
,将分别将它们复制到bindings
和sdk
。
下载sip
下载完成后解压,放到D:\fbx_sdk\sip
下载Visual Studio 2019
下载并安装
下载并配置flex和bison
解压后加入到环境变量PATH:
C:\Users\zhanglingyun\Downloads\Compressed\win_flex_bison-2.5.25
去掉flex.exe
和bison.exe
前面的”win_”前缀。
查看是否配置成功
配置环境变量
1 2 3
| set FBXSDK_ROOT=D:\fbx_sdk\2020.2\sdk set FBXSDK_LIBS_64_FOLDER=D:\fbx_sdk\2020.2\sdk\lib\vs2019\x64\release set SIP_ROOT=D:\fbx_sdk\sip
|
编译sip
1 2
| python build.py prepare
|
编译fbx sdk for python3.9
使用它
1 2
| C:\Users\zhanglingyun\Miniconda3\envs\fbxsdk_ue5\python.exe PythonBindings.py Python3_x64 buildsip
|
这样就完成了。
一些fbx sdk代码段
遍历节点
1 2 3 4 5 6 7 8 9 10 11
| import fbx import FbxCommon output_file = r'D:\test\test1.fbx' manager, scene = FbxCommon.InitializeSdkObjects() result = FbxCommon.LoadScene(manager, scene, output_file) nodes = scene.GetRootNode()
for i in range(scene.GetNodeCount()): node = scene.GetNode(i) mesh = node.GetNodeAttribute()
|
获取模型点,线,面信息
1 2 3 4 5 6 7 8 9 10
| for i in range(scene.GetNodeCount()): node = scene.GetNode(i) mesh = node.GetNodeAttribute() if mesh and isinstance(mesh, fbx.FbxMesh): print(node.GetName(), len(set(mesh.GetPolygonVertices())), mesh.GetMeshEdgeCount(), mesh.GetPolygonCount())
|
修改名称
1 2 3 4 5
| name = node.GetName()
node.SetName(name+'_modify')
|
创建Locator
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| group_node = fbx.FbxNode.Create(manager, "Locator01")
locator = fbx.FbxNull.Create(scene, 'Locator01')
group_node.AddNodeAttribute(locator)
root_node = scene.GetRootNode()
root_node.AddChild(group_node)
group_node = fbx.FbxNode.Create(manager, "Locator01") null_prop = fbx.FbxNull.Create(manager, "") group_node.SetNodeAttribute(null_prop) root_node = scene.GetRootNode()
|
创建Group,setParent
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| file_path = r'D:\test001.fbx'
manager, scene = FbxCommon.InitializeSdkObjects() result = FbxCommon.LoadScene(manager, scene, file_path) if not result: return group_node = fbx.FbxNode.Create(manager, "Locator01") root_node = scene.GetRootNode() for i in range(scene.GetNodeCount()): node = scene.GetNode(i) mesh = node.GetNodeAttribute() if not mesh: continue root_node.AddChild(group_node) output_file = r'D:\test2.fbx' FbxCommon.SaveScene(manager, scene, output_file, 0)
|
结尾分享
编译好的 fbx sdk for python3.9
(完)