Comment puis-je inclure des informations sur la couleur des sommets dans les fichiers .OBJ?

25

Les fichiers .obj que j'exporte manquent de données pour les couleurs des sommets. Existe-t-il un moyen d'inclure des informations de couleur dans le fichier .obj? Sinon, quelles sont les alternatives?

Mina Samy
la source

Réponses:

9

Blender peut exporter des fichiers PLY (.ply), qui sont basés sur du texte, très faciles à analyser et incluent des couleurs de sommets. La manière la plus difficile est de changer le code de l'exportateur OBJ pour qu'il inclue les couleurs des sommets (brisant ainsi la compatibilité obj).

Ravachol
la source
8
La mauvaise façon est de changer l'exportateur OBJ. Utilisez le bon outil pour le travail; si vous voulez des couleurs de sommet, Wavefront OBJ n'est évidemment pas l'outil que vous souhaitez utiliser (ou abuser).
Martin Sojka
6
Pourquoi est-ce une mauvaise façon? S'il prend juste l'exportateur OBJ pour faire le sien, je ne vois vraiment pas comment c'est "mal". La mauvaise façon de faire ne fait aucun travail parce que c'est toujours la mauvaise façon de voir quelqu'un.
Ravachol
Le format .obj utilise des fichiers .mtl pour stocker des informations sur les matériaux, mais à ma connaissance, ne prend en charge qu'un seul matériau par face. En outre, .obj est l'un des sujets moins nombreux pour lesquels l'entrée wikipedia est réellement utile: en.wikipedia.org/wiki/Wavefront_.obj_file
Exilyth
3
C'est faux car OBJ est une spécification fixe. Une fois que vous commencez à changer l'exportateur pour faire des choses supplémentaires , ce n'est plus un exportateur OBJ, c'est autre chose. De là, il pourrait devenir à peu près n'importe quelle bête à plusieurs têtes. Pourtant, bonne réponse, je n'avais jamais entendu parler de PLY.
Ingénieur
@NickWiggill PLY n'est pas nécessairement un bon choix - peut-être que vous n'en avez pas entendu parler pour une bonne raison. Il est beaucoup plus complexe que OBJ et permet une plus grande flexibilité que celle dont on aurait raisonnablement besoin pour un modèle statique. Si vous avez besoin d'une flexibilité supplémentaire, vous devriez peut-être utiliser un format de fichier plus populaire avec des analyseurs bien établis, tels que COLLADA
bobobobo
18

Il existe une saveur de Wavefront * .obj qui facilite la coloration des sommets .. Je connais deux applications qui peuvent les exporter, à savoir "MeshLab" (gratuit) et "MeshMixer" (également gratuit depuis Autodesk) .. Les couleurs des sommets sont réellement trouvées juste après chaque définition de sommet comme indiqué ci-dessous.

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

Essayez d'utiliser meshlab pour générer "Occlusion ambiante basée sur les sommets", puis ouvrez-le avec "MeshMixer".

Cela devrait clarifier votre problème .. Je pense que la coloration des sommets revient avec l'avènement des shaders .. C'est amusant de voir comment la coloration des sommets semble être négligée lorsque des images cliquables ont été découvertes .. Maintenant, nous devrions voir le retour de "Vertex Coloring"! Faites-moi savoir si cela vous a été utile!

Jacques Pretorius
la source
Oh je vois. Ils ont cloué sur la couleur par sommet comme 3 flotteurs après la vspécification de la position du sommet. Un moyen intelligent pour (espérons-le) ne pas casser la compatibilité avec les analyseurs OBJ existants.
bobobobo
+1 J'ai rencontré exactement ces sommets colorés dans un fichier obj que j'ai récemment acquis. Selon OBJ Versex Coloring Parsing Problem · Issue # 2083 · mrdoob / three.js , les couleurs sont dans l'ordre rouge vert bleu, comme c'est typique, et de 0 à 1. Connaissez-vous une véritable documentation pour cela à partir de l'un des les gens qui le soutiennent? Que diriez-vous d'un code open source qui l'implémente? Existe-t-il réellement une norme écrite pour obj qui est largement acceptée?
nealmcb
Aha - pour répondre à l'une de mes questions, MeshLab est non seulement gratuit, mais aussi open source (GPL) et multiplateforme :)
nealmcb
7

Wavefront OBJ prend en charge les matériaux , qui colorent les groupes de mailles de la même couleur.

Les déclarations matérielles ressemblent à ceci:

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

Ainsi, Kd est la composante diffuse, Ks spéculaire.

Ceux-ci seraient spécifiés dans un fichier .mtl qui accompagne le fichier .obj. À l'intérieur du fichier .obj se trouvent des instructions comme

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

Cela signifie que les faces spécifiées doivent utiliser le matériau redMtl. Lorsque vous analysez le fichier obj, cela se traduit par une couleur par sommet.

S'il y a beaucoup de couleurs différentes, vous aurez beaucoup de matériaux différents, mais vous pouvez le faire.

Voici une vidéo expliquant comment attribuer à un groupe particulier de visages un matériau différent . Vous pouvez affecter un matériau différent à chaque face d'un maillage si vous le souhaitez.

bobobobo
la source
5
Malheureusement, cela ne permet que la coloration par face, pas la coloration par sommet.
moelleux