¿Cómo puedo incluir información de color de vértice en archivos .OBJ?

25

Los archivos .obj que exporto son datos faltantes para los colores de vértice. ¿Hay alguna manera de incluir información de color en el archivo .obj? si no, cuales son las alternativas?

Mina Samy
fuente

Respuestas:

9

Blender puede exportar archivos PLY (.ply), que están basados ​​en texto, son muy fáciles de analizar e incluyen colores de vértices. La forma difícil es cambiar el código del exportador OBJ para que incluya los colores de los vértices (rompiendo así la compatibilidad obj).

Ravachol
fuente
8
La forma incorrecta es cambiar el exportador OBJ. Use la herramienta adecuada para el trabajo; si quiere colores de vértice, Wavefront OBJ obviamente no es la herramienta que desea usar (o abusar).
Martin Sojka
66
¿Por qué es eso un camino equivocado? Si solo toma el exportador OBJ para hacer el suyo, realmente no veo cómo eso está "mal". La manera incorrecta no es hacer ningún trabajo porque siempre es la manera incorrecta para alguien.
Ravachol
El formato .obj utiliza archivos .mtl para almacenar información de material, pero que yo sepa, solo admite un material por cara. Además, .obj es uno de los pocos temas para los que la entrada de wikipedia es realmente útil: en.wikipedia.org/wiki/Wavefront_.obj_file
Exilyth
3
Está mal porque OBJ es una especificación fija. Una vez que comienza a cambiar el exportador para hacer cosas adicionales , ya no es un exportador de OBJ, es otra cosa. A partir de ahí, podría convertirse en casi cualquier bestia de varias cabezas. Aún así, buena respuesta, nunca había oído hablar de PLY.
Ingeniero
@NickWiggill PLY no es necesariamente una buena opción, tal vez no hayas oído hablar de él por una buena razón. Es mucho más complejo que OBJ y permite más flexibilidad de la que razonablemente necesitaría usar para un modelo estático. Si necesita flexibilidad adicional, tal vez debería usar un formato de archivo más popular con analizadores bien establecidos, como COLLADA
bobobobo
18

Existe un sabor de * .obj de Wavefront que facilita la coloración de vértices. Conozco dos aplicaciones que pueden exportarlas, a saber, "MeshLab" (gratis) y "MeshMixer" (también libre de Autodesk). Los colores de los vértices se encuentran realmente justo después de cada definición de vértice como se muestra a continuación.

(Pieza 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

Intente usar meshlab para generar "oclusión ambiental basada en vértices", luego ábralo con "MeshMixer".

Esto debería aclarar su problema ... Creo que la coloración de vértices está volviendo con el advenimiento de los sombreadores ... Es curioso cómo la coloración de vértices parece descuidarse cuando se descubrieron los mapas de imágenes ... ¡Ahora deberíamos ver el regreso de "Vertex Coloring"! ¡Avísame si esto fue útil!

Jacques Pretorius
fuente
Oh ya veo. Agregaron el color por vértice como 3 flotadores después de la vespecificación de posición del vértice. Una forma inteligente de (con suerte) no romper la compatibilidad con los analizadores OBJ existentes.
bobobobo el
+1 Encontré exactamente estos vértices coloreados en un archivo obj que adquirí recientemente. De acuerdo con OBJ Vertex Coloring Parsing Problem · Issue # 2083 · mrdoob / three.js , los colores están en orden rojo verde azul, como es típico, y de 0 a 1. ¿Conoce alguna documentación real para esto de cualquiera de los gente que lo apoya? ¿Qué tal cualquier código fuente abierto que lo implemente? ¿Existe realmente un estándar escrito para obj que sea ampliamente aceptado?
nealmcb
Ajá - para responder una de mis preguntas, MeshLab no solo es gratuito, sino también de código abierto (GPL) y multiplataforma :)
nealmcb
7

Wavefront OBJ admite materiales , que agrupan grupos de mallas del mismo color.

Las declaraciones materiales se ven así:

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

Entonces, Kd es el componente difuso, Ks especular.

Estos se especificarían dentro de un archivo .mtl que acompaña al archivo .obj. Dentro del archivo .obj hay declaraciones 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

Esto significa que las caras especificadas allí deben usar el material redMtl. Cuando analiza el archivo obj, esto se traduce en color por vértice.

Si hay muchos colores diferentes, tendrá muchos materiales diferentes, pero puede hacerlo.

Aquí hay un video de cómo asignar a un grupo particular de caras un material diferente . Puede asignar un material diferente a cada cara en una malla si lo desea.

bobobobo
fuente
55
Desafortunadamente, eso solo permite la coloración por cara, no la coloración por vértice.
esponjoso