Wie kann ich Vertex-Farbinformationen in OBJ-Dateien einfügen?

25

In den exportierten OBJ-Dateien fehlen Daten für Scheitelpunktfarben. Gibt es eine Möglichkeit, Farbinformationen in die OBJ-Datei aufzunehmen? Wenn nicht, welche Alternativen gibt es?

Mina Samy
quelle

Antworten:

9

Blender kann PLY-Dateien (.ply) exportieren, die auf Text basieren, sehr einfach zu analysieren sind und Scheitelfarben enthalten. Die Schwierigkeit besteht darin, den OBJ-Exportcode so zu ändern, dass er die Scheitelpunktfarben enthält (wodurch die Kompatibilität mit dem Objekt beeinträchtigt wird).

Ravachol
quelle
8
Der falsche Weg ist, den OBJ-Exporter zu ändern. Verwenden Sie das richtige Werkzeug für den Job. Wenn Sie Scheitelpunktfarben möchten, ist Wavefront OBJ offensichtlich nicht das Werkzeug, das Sie verwenden (oder missbrauchen) möchten.
Martin Sojka
6
Warum ist das ein falscher Weg? Wenn er nur den OBJ-Exporteur nimmt, um seinen eigenen zu machen, verstehe ich wirklich nicht, wie "falsch" das ist. Der falsche Weg macht keine Arbeit, weil es immer der falsche Weg für jemanden ist.
Ravachol
Das .obj-Format verwendet .mtl-Dateien zum Speichern von Materialinformationen, unterstützt meines Wissens jedoch nur ein Material pro Fläche. Außerdem ist .obj eines der wenigen Themen, für die der Wikipedia-Eintrag tatsächlich nützlich ist: en.wikipedia.org/wiki/Wavefront_.obj_file
Exilyth
3
Es ist falsch, weil OBJ eine feste Spezifikation ist. Sobald Sie anfangen, den Exporter zu ändern, um zusätzliche Dinge zu erledigen , ist er kein OBJ-Exporter mehr, sondern etwas anderes. Von dort aus könnte es sich in fast jedes mehrköpfige Tier verwandeln. Trotzdem, gute Antwort, ich hatte noch nie von PLY gehört.
Ingenieur
@NickWiggill PLY ist nicht unbedingt eine gute Wahl - vielleicht haben Sie nicht aus gutem Grund davon gehört. Es ist weitaus komplexer als OBJ und bietet mehr Flexibilität, als man normalerweise für ein statisches Modell benötigen würde. Wenn Sie zusätzliche Flexibilität benötigen, sollten Sie möglicherweise ein beliebteres Dateiformat mit gängigen Parsern wie COLLADA
bobobobo 23.11.13
18

Es gibt eine Variante von Wavefronts * .obj, die Vertex Coloring erleichtert. Ich kenne zwei Anwendungen, die diese exportieren können, nämlich "MeshLab" (kostenlos) und "MeshMixer" (ebenfalls kostenlos von Autodesk). Die Vertex-Farben werden tatsächlich gefunden Direkt nach jeder Scheitelpunktdefinition (siehe unten).

(Stück * .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

Versuchen Sie, mit meshlab "Vertex Based Ambient Occlusion" zu erzeugen, und öffnen Sie es dann mit "MeshMixer".

Dies sollte Ihr Problem klären. Ich denke, die Vertex-Färbung kehrt mit dem Aufkommen von Shadern zurück. Es ist lustig, wie die Vertex-Färbung vernachlässigt zu werden scheint, als Imagemaps entdeckt wurden. Jetzt sollten wir die Rückkehr von "Vertex-Färbung" sehen! Lassen Sie mich wissen, ob dies nützlich war!

Jacques Pretorius
quelle
Oh, ich verstehe. Sie haben die Farbe pro Scheitelpunkt angeheftet, wenn 3 Floats nach der vScheitelpunktpositionsspezifikation liegen. Clevere Möglichkeit, die Kompatibilität mit vorhandenen OBJ-Parsern (hoffentlich) nicht zu beeinträchtigen.
Bobobobo
+1 Genau diese farbigen Eckpunkte habe ich in einer kürzlich von mir erworbenen obj-Datei gefunden. Laut OBJ Vertex Coloring Parsing-Problem · Ausgabe Nr. 2083 · mrdoob / three.js sind die Farben wie üblich in der Reihenfolge Rot, Grün, Blau und von 0 bis 1. Kennen Sie eine echte Dokumentation für diese von einem der Leute, die es unterstützen? Wie wäre es mit Open-Source-Code, der es implementiert? Gibt es tatsächlich einen schriftlichen Standard für obj, der weithin akzeptiert wird?
Nealmcb
Aha - um eine meiner Fragen zu beantworten, ist MeshLab nicht nur kostenlos, sondern auch Open Source (GPL) und plattformübergreifend :)
nealmcb
7

Wavefront OBJ unterstützt Materialien , die Farbgruppen von Maschen in der gleichen Farbe.

Wesentliche Aussagen sehen so aus:

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

Kd ist also die diffuse Komponente, Ks specular.

Diese werden in einer MTL-Datei angegeben, die der OBJ-Datei beiliegt. In der .obj-Datei befinden sich Anweisungen wie

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

Dies bedeutet, dass die dort angegebenen Flächen das redMtl-Material verwenden sollen. Wenn Sie die obj-Datei analysieren, wird dies in eine Farbe pro Scheitelpunkt übersetzt.

Wenn es viele verschiedene Farben gibt, werden Sie viele verschiedene Materialien haben, aber Sie können es tun.

Hier sehen Sie ein Video, wie Sie einer bestimmten Gruppe von Gesichtern ein anderes Material zuweisen . Wenn Sie möchten, können Sie jeder Fläche in einem Netz ein anderes Material zuweisen.

Bobobobo
quelle
5
Leider erlaubt dies nur die Färbung pro Fläche, nicht die Färbung pro Scheitelpunkt.
flauschig