Como posso incluir informações de cores de vértice nos arquivos .OBJ?

25

Os arquivos .obj que eu exporto faltam dados para cores de vértice. Existe uma maneira de incluir informações de cores no arquivo .obj? Caso contrário, quais são as alternativas?

Mina Samy
fonte

Respostas:

9

O Blender pode exportar arquivos PLY (.ply), baseados em texto, muito fáceis de analisar e incluir cores de vértices. A maneira mais difícil é alterar o código do exportador OBJ para incluir as cores dos vértices (quebrando assim a compatibilidade do obj).

Ravachol
fonte
8
O caminho errado é mudar o exportador de OBJ. Use a ferramenta certa para o trabalho; se você deseja cores de vértice, o Wavefront OBJ obviamente não é a ferramenta que você deseja usar (ou abusar).
precisa
6
Por que isso é errado? Se ele apenas pega o exportador de OBJ para criar o seu, eu realmente não consigo ver como isso está "errado". O caminho errado não está funcionando, porque é sempre o caminho errado para alguém.
Ravachol
O formato .obj usa arquivos .mtl para armazenar informações de material, mas, tanto quanto eu sei, suporta apenas um material por face. Além disso, .obj é um dos poucos tópicos para os quais a entrada da Wikipedia é realmente útil: en.wikipedia.org/wiki/Wavefront_.obj_file
Exilyth 21/11/11
3
Está errado porque OBJ é uma especificação fixa. Depois que você começa a mudar o exportador para fazer coisas extras , ele não é mais um exportador de OBJ, é outra coisa. A partir daí, poderia se transformar em praticamente qualquer animal de várias cabeças. Ainda assim, boa resposta, eu nunca tinha ouvido falar de PLY.
Engenheiro
@NickWiggill PLY não é necessariamente uma boa escolha - talvez você não tenha ouvido falar por um bom motivo. É muito mais complexo que o OBJ e permite mais flexibilidade do que seria razoavelmente necessário para um modelo estático. Se você precisar de flexibilidade adicional, talvez você deve usar um formato de arquivo mais popular com analisadores bem estabelecidos, tais como COLLADA
bobobobo
18

Existe um sabor do * .obj do Wavefront que facilita o Vertex Coloring. Conheço dois aplicativos que podem exportar, como "MeshLab" (gratuito) e "MeshMixer" (também gratuito da Autodesk). As cores dos vértices são realmente encontradas logo após cada definição de vértice, como mostrado abaixo ..

(Pedaço de * .obj)

####
#
# OBJ File Generated by Meshlab
#
####
# Object VERTEXPAINT_004_OBJ.obj
#
# Vertices: 284
# Faces: 281
#
####
mtllib ./VERTEXPAINT_004_OBJ.obj.mtl

vn 0.029683 0.730087 -0.682709
v 1220.094482 -572.500000 177.713943 0.984314 0.764706 1.000000  

# "3 vals for Vert and 3 vals for Col"

vn 0.000000 0.858139 -0.513418
v 1291.571533 -609.439636 -28.628490 0.921569 0.219608 1.000000
vn 0.303129 0.896367 -0.323480

Tente usar o meshlab para gerar "Oclusão ambiental baseada em vértices" e abra-o com o "MeshMixer".

Isso deve esclarecer o seu problema. Acho que a coloração de vértice está voltando com o advento dos shaders. É engraçado como a coloração de vértice parece ser negligenciada quando os mapas de imagens foram descobertos. Agora, devemos ver o retorno de "Vertex Coloring"! Deixe-me saber se isso foi útil!

Jacques Pretorius
fonte
Ah eu vejo. Eles aderiram na cor por vértice como 3 flutuadores após a vespecificação da posição do vértice. Maneira inteligente de (espero) não quebrar a compatibilidade com os analisadores de OBJ existentes.
bobobobo
+1 Encontrei exatamente esses vértices coloridos em um arquivo obj que adquiri recentemente. De acordo com o OBJ Problema de análise de coloração de vértice · Edição nº 2083 · mrdoob / three.js , as cores estão na ordem azul verde vermelho, como é típico, e de 0 a 1. Você conhece alguma documentação real para isso de qualquer um dos pessoas apoiando isso? Que tal qualquer código-fonte aberto que o implemente? Existe realmente um padrão escrito para obj que é amplamente aceito?
Nealmcb
Aha - para responder a uma das minhas perguntas, MeshLab não é apenas livre, mas também open source (GPL) e cross-platform :)
nealmcb
7

O OBJ do Wavefront suporta materiais que colorem grupos de malhas da mesma cor.

As declarações materiais são assim:

newmtl redMtl
Kd 1.00 0.00 0.00
Ks 0.50 0.50 0.50
Ns 18.00

Então, Kd é o componente difuso, Ks especular.

Eles seriam especificados dentro de um arquivo .mtl que acompanha o arquivo .obj. Dentro do arquivo .obj há instruções como

usemtl redMtl
f 1/5/1 30/39/2 20/29/3
f 20/29/4 30/39/5 31/41/6
f 35/48/7 26/35/8 2/6/9

Isso significa que as faces especificadas existem para usar o material redMtl. Quando você está analisando o arquivo obj, isso se traduz em cores por vértice.

Se houver muitas cores diferentes, você terá muitos materiais diferentes, mas poderá fazê-lo.

Aqui está um vídeo de como atribuir um grupo específico de rostos a um material diferente . Você pode atribuir um material diferente para cada face em uma malha, se desejar.

bobobobo
fonte
5
Infelizmente, isso permite apenas a coloração por face, não por vértice.
fofo