FBX 解析 材质与贴图

   本文采用 AUTODESK的FBX SDK来解析fbx文件,使用语言为python。

   下面结合代码解析出fbx文件中的材质与贴图,以及简单介绍涉及到的类的关系。

1.sdk中的一些基本概念

   FbxScene
   该类包含了整个3D场景的描述。对文件进行解析时,要先获得场景对象,然后在解析该对象里的内容。
   FbxObject
   大多数FBX对象的基类。对象之间通过connections进行连接。通过连接,对象间相互关联以形成层次结构或结构。即fbx的场景中对象的关系都表示为对象的连接。
   FbxObject提供了Property(属性)这种机制来描述场景中对象的特征。
   FbxProperty
   用来保存属性的类
   ClassID
   用于在运行时区分对象的内部类。每个类都有唯一的ClassId

2.解析fbx文件

   下面是本次解析内容(mesh的名字,材质名称,贴图名称,材质贴图引用关系)的的关系结构图:
在这里插入图片描述

1)加载scene

lSdkManager,lScene = InitializeSdkObjects()
LoadScene(lSdkManager,lScene,"xxx.FBX")

2)获取节点node以及名字
   scene中包含了所有node中的root节点。

rootNode = pScene.GetRootNode()

   node之间通过树状结构连接,通过 GetChild() 与递归即可获得所有node

if rootNode:
for i inrange(rootNode.GetChildCount()):
	ChildNode = rootNode.GetChild(i)
	if ChildNode:
		AllNodes.append(ChildNode)
		FindChildNodes(AllNodes,ChildNode)

   获取node名字

lNode.GetName()

3)获取材质Material以及名字
   获取材质

NodeMaterial = lNode.GetMaterial(0)

   获取材质名字

NodeMaterial.GetName()

4)获取贴图Texture以及文件路径

   贴图可以直接从scene中获得

tex_num = lScene.GetTextureCount()
#print(tex_num)
for i inrange(tex_num):
	tex = lScene.GetTexture(i)

   贴图文件路径

path = tex.GetFileName()

5)获取材质,贴图关系
   根据材质拥有的属性去获取相应的关系

#DiffuseTextures
lProperty = pMaterial.FindProperty(FbxSurfaceMaterial.sDiffuse)

#BumpTextures
lProperty = pMaterial.FindProperty(FbxSurfaceMaterial.sBump)

   可以通过关系去获取相应材质

num_textures = pProperty.GetSrcObjectCount(FbxCriteria.ObjectType(FbxTexture.ClassId))
texture = pProperty.GetSrcObject(FbxCriteria.ObjectType(FbxTexture.ClassId),i)
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

thomasyyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值