Como corrigir Collada ruim produzido pelo FBX?

10

Tentei usar o FBX SDK (2011.3.1) para carregar arquivos FBX e salvá-los como arquivos Collada para poder importar arquivos FBX no Panda3D. Infelizmente, os arquivos Collada resultantes não são utilizáveis ​​por vários motivos, entre eles:

  • Existe uma técnica extra específica para o Maya

difuso

<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>
  • Ele atribui um nome de canal texcoord que não é referenciado em nenhum outro lugar do arquivo (no exemplo de código anterior, nenhuma geometria usa "CHANNEL0" ...)

  • Cada polígono é exportado duas vezes, uma primeira vez com um material básico (apenas cor difusa, cor especular etc.) e uma segunda vez com um material texturizado -> isso duplica o número de polígonos de cada modelo sem qualquer motivo valioso

De qualquer forma, o arquivo Collada resultante não pode ser aberto corretamente com o OpenCOLLADA ou o "dae2egg" do Panda3D.

Alguém tem alguma experiência em como "consertar" e torná-lo compreensível por importadores comuns e de boa reputação da Collada, como o OpenCOLLADA?

David
fonte
3
Esse é um grande problema que encontrei no Collada: não é realmente tão útil para transportar dados entre ferramentas arbitrárias que reivindicam suporte, porque é um formato tão generalizado. Ele pode conter dados de praticamente qualquer esquema e ainda assim ser um arquivo Collada válido e compatível com os padrões que o importador específico que você está usando não consegue lidar. É marginalmente mais útil como um formato de intercâmbio de dados quando você tem mais controle sobre o importador / exportador, ou as ferramentas produzem o Collada que você gosta.
1
@ Josh: Pelo menos é legível por humanos, ao contrário dos formatos binários fechados. Pelo menos com o Collada, você pode criar ferramentas e scripts que podem converter de um conjunto de dados para outro. A interoperabilidade é pelo menos possível , mesmo que exija trabalho extra.
Nicol Bolas

Respostas:

2

A ferramenta AC # é sua amiga aqui - você pode escrever rapidamente algo usando a estrutura .NET System.Xml que itera sobre o arquivo de entrada, localiza partes que você não gosta e as elimina (ou ajusta) do documento antes de escrevê-lo novamente novamente. Efetivamente, é isso que o XSLT faz, mas na prática sempre achei mais fácil escrever código C # para descrever a transformação do que encontrar a sintaxe XSLT enigmática para fazer a mesma coisa.

O que você precisa fazer é analisar os casos "ruins" e identificar o que eles têm em comum. Por exemplo, se é fácil encontrar todas as técnicas difusas que possuem uma textura que usa texcoord = "CHANNEL0". Você apenas itera todos os objetos e, para cada objeto, verifica todas as suas técnicas para o atributo incorreto. Se você não o encontrar, adicione o nó a um documento de saída e siga em frente. Se você não reconhecer o nó, adicione-o à saída e siga em frente. Se você o encontrar, não se preocupe em adicioná-lo ao documento de saída e ele será efetivamente excluído.

Encontrar polígonos duplicados é um pouco mais complicado, pois você precisará analisar cada par de polígonos para obter equivalência. Seria muito mais simples se você pudesse decidir sobre uma regra, como "Não me importo com polígonos de cores planas, apenas polígonos texturizados", então você pode descartar os polígonos apropriados.

No entanto, parece-me muito estranho que você esteja obtendo duplicatas; A duplicação da geometria é um grande não-não por razões óbvias, então estou surpreso que o FBX faria isso. Eu só usei o Collada com o Maya / Max, então não pude garantir o que o FBX produz. Mas eu perguntaria: você tem muita certeza de que realmente não existe geometria duplicada no arquivo FBX?

MrCranky
fonte
Obrigado pela sua resposta. É claro que consegui consertá-lo em meu próprio importador, estava apenas procurando alguém que já encontrou e corrigiu exatamente o mesmo problema para que eu pudesse ter uma correção padrão e talvez aplicar correções para problemas que ainda não descobri.
David
0

Encontre ou escreva um exportador diferente, ou talvez (já que os arquivos Collada são apenas XML) use [XSLT] [1] para transformar os dados indesejados em um formato mais generalizado?


fonte
Isso é o que estou fazendo, mas eu estava procurando por alguém que já fez isso (não reinventar a roda, né?)
David