Formato de arquivo para modelos 3D estáticos e animados

22

Atualmente, estou escrevendo um jogo 3D em C ++ com OpenGL e estou chegando à parte em que carregar modelos 3D. Portanto, estou procurando formatos e técnicas de arquivo populares para

  • exibir malhas estáticas e
  • renderizar malhas animadas.

Eu já encontrei um grande número de formatos e técnicas possíveis, como animações de quadro-chave, animação esquelética, MD2 até MD5, 3DS, X, Collada etc. pp.

Para simplificar, eu gostaria de usar um formato (e técnica) que permita ambos, nomeadamente malhas estáticas e animadas. Portanto, minha pergunta é se um formato é adequado para essa tarefa e qual você sugeriria. E para esclarecer um pouco: não preciso de animações super suaves ou recursos novos.

Sidenote: Por eu ser fã de liquidificador (mas não um especialista ;-)) seria útil se ele pudesse ser usado com isso - mas é claro que não deve ser o item que impede o show aqui.

stschindler
fonte

Respostas:

16

Deixe-me propor que você use Collada .

É amplamente suportado por ferramentas DCC e bem padronizado. Ele suporta animações esqueléticas e ... bem, faz quase tudo, incluindo shaders e física - elas não serão relevantes para você.

As animações baseadas em vértices, como nos formatos MDL ou MD2, são mais ou menos uma relíquia do passado. Hoje em dia, a maioria das animações são animações esqueléticas (por exemplo, pense se os personagens estão perfeitamente equipados) e as ferramentas de criação de conteúdo são otimizadas para eles.

O Blender tem um exportador de Collada em funcionamento, mas como sempre, exportar coisas do Blender pode ser irritante. Pode ser necessário tentar exportadores ou formatos de arquivo alternativos ou hackear os scripts manualmente, se houver problemas.

Para carregar o Collada, use bibliotecas como FCollada ou ColladaDOM (não tente analisá-lo por conta própria, o Collada é um monstro XML realmente gordo ...). Há também a Open Asset Import Library , que carrega ~ 25 formatos de arquivo, incluindo Collada (e todos os outros formatos mencionados). Seria uma excelente escolha, pois visa especialmente aos desenvolvedores de jogos e fornece sua saída em um formato adequado para renderização em tempo real. Mas, para ser sincero: sou um dos co-autores, então provavelmente sou um pouco tendencioso.

Por último, mas não menos importante : o formato do arquivo usado para importar seus ativos não deve definir as habilidades do seu mecanismo e as técnicas que ele usa - deve ser o contrário. Se suas animações são super suaves não é uma questão de formato de importação, é sobre qual técnica você usa para animar malhas e quão boas elas são modeladas em primeiro lugar. O formato de importação deve apenas ajudá-lo a trazer seus dados do Blender para o seu jogo.

Alexander Gessler
fonte
Muito obrigado pela sua resposta detalhada. Ouvi falar de Collada pela primeira vez hoje (recomendado por um amigo) e não tinha certeza se ele estava realmente pronto para ser usado em um ambiente de produção. Vou tentar agora, obrigado. :-)
stschindler 30/03
2
Bons conselhos, especialmente a referência ao AssImp. Eu não sugeri o COLLADA, no entanto, como ninguém parece dar suporte consistente e correto a tudo isso, e é bastante grande para fins de conteúdo real. Eu sugiro usar algo como MD5, o que lhe dá o esqueleto e é amplamente amplamente implementado corretamente (eu acho). Eu também não descartaria tão facilmente o MD2; existem muitos modelos de amostra para isso, e você pode animar trivialmente mais barato (embora seja inútil para bonecas de pano ou o que você tem).
ChrisE
Vou apenas brincar com diferentes formatos de arquivo. Graças ao AssImp, isso será fácil. MD2 foi realmente minha primeira idéia, mas acho que é muito caro criar, em vez de apenas exportar os ossos adequados. Ragdolls não são necessários no meu caso, eu só preciso de modelos animados, sem física envolvida.
Stschindler 30/03
De fato, existem exportadores de Collada muito ruins por aí, mas pelo menos o formato está bem documentado, para que você sempre saiba a quem culpar :-). O MD5 também é um bom candidato, mas não sei como os exportadores do Blender são bons. O MD2 tem uma representação de vértice muito limitada e sofre com o tamanho e o limite de precisão. Eu realmente não usaria, não há razão para fazê-lo.
Alexander Gessler 30/03
wazim.com/Collada_Tutorial_1.htm é um tutorial detalhado muito bom para carregar collada, mas eu ainda recomendo usar uma biblioteca.
Exilyth