如何修复FBX产生的不良Collada?


10

我试图使用FBX SDK(2011.3.1)加载FBX文件并将其另存为Collada文件,以便能够在Panda3D中导入FBX文件。不幸的是,由于以下几个原因,所得的Collada文件无法使用:

  • 有一个Maya特定的额外技术

扩散

<diffuse>
    <texture texture="Map__2-image" texcoord="CHANNEL0">
        <extra>
            <technique profile="MAYA">
                <wrapU sid="wrapU0">TRUE</wrapU>
                <wrapV sid="wrapV0">TRUE</wrapV>
                <blend_mode>ADD</blend_mode>
            </technique>
        </extra>
    </texture>
</diffuse>
  • 它分配一个在文件中其他任何地方都未引用的texcoord通道名称(在先前的代码示例中,没有几何体使用“ CHANNEL0” ...)

  • 每个多边形输出两次,第一次使用基本材料(仅漫反射颜色,镜面颜色等),第二次使用带纹理的材料->这会使每个模型的多边形数量加倍,而没有任何有价值的理由

无论如何,使用OpenCOLLADA或Panda3D的“ dae2egg”都无法正确打开生成的Collada文件。

任何人都对如何“修复”它并使其被OpenCOLLADA等普通和声誉良好的Collada进口商理解是有经验的吗?


3
这是我在Collada中发现的一个大问题:在声称支持它的任意工具之间传输数据实际上并没有那么有用,因为它是一种过分概括的格式。它可以包含几乎任何模式的数据,并且仍然是您使用的特定导入器无法真正处理的有效,符合标准的Collada文件。如果您对进口商/出口商有更多的控制权,或者恰巧工具可以产生您喜欢的Collada,则它作为数据交换格式会稍微有用。

1
@Josh:至少它是人类可读的,不同于封闭的二进制格式。至少使用Collada,您可以制作可以将一组数据转换为另一组数据的工具和脚本。即使需要额外的工作,Interop也是可能的
Nicol Bolas

Answers:


2

AC#工具是您的朋友-您可以使用.NET System.Xml框架快速编写一些内容,该框架遍历输入文件,发现您不喜欢的部分,并在回写之前从文档中消除(或调整)它们。再次出来。实际上,这就是XSLT所做的事情,但是实际上,我总是发现编写C#代码来描述转换要比找到隐秘的XSLT语法执行相同的操作要容易得多。

您需要做的是查看“不良”案例并找出它们的共同点。例如,如果所有漫反射技术的纹理都使用texcoord =“ CHANNEL0”,则很容易找到它。您只需迭代所有对象,然后针对每个对象检查其所有技术,以找出有问题的属性。如果找不到它,则将该节点添加到输出文档中并继续。如果您不认识该节点,请将其添加到输出中并继续。如果确实找到它,则不必费心将其添加到输出文档中,它将被有效地删除。

但是,发现重复的多边形会有些棘手,因为您必须分析每对多边形的等效性。如果您可以决定一个规则,例如“我不在乎单色的多边形,而仅在纹理的多边形”,那么它将简单得多,那么您就可以丢弃适当的多边形。

但是,对我来说,实际上是重复出来的东西似乎很奇怪。出于明显的原因,几何的重复是一个很大的禁忌,所以令我惊讶的是FBX会这样做。我只将Collada与Maya / Max一起使用,因此无法保证FBX产生了什么。但是我想问一下,您是否超级确定在FBX文件中确实没有重复的几何图形?


感谢您的回答。当然,我能够在自己的导入器中对其进行修复,我只是在寻找已经遇到并解决了完全相同的问题的人,以便我可以进行标准修复,甚至可以对尚未发现的问题应用修复。
大卫,

0

查找或编写其他导出器,或者(由于Collada文件只是XML)使用[XSLT] [1]来转换不需要的数据或将其转换为更通用的形式?


那可以肯定我在做什么,但是我正在寻找已经做到这一点的人(不要重新发明轮子,对吗?)
David
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.