Wavefront OBJ

OBJ
Dateiendung:.obj
MIME-Type:text/plain
Entwickelt von:Wavefront Technologies
Erstveröffentlichung:1989
Art:ASCII-Format
Container für:3D-Modelle


3D-Modelle

OBJ (oder .obj) ist ein offenes Dateiformat zum Speichern von dreidimensionalen geometrischen Formen.[1] Das von Wavefront Technologies entwickelte Format wird von vielen 3D-Grafikprogrammen unterstützt und ist daher geeignet für die programm- und plattformübergreifende Weitergabe von 3D-Modellen.

Das OBJ-Format speichert geometrische Eigenschaften eines Objekts oder gruppierter Objekte, d. h. Ecken, Textur-Koordinaten, Normalen, Flächen und Glättungen. Optische Materialeigenschaften (z. B. Spiegelung, Transparenz, Glanzlicht usw.) werden in einer separaten Materialdatei definiert, die auch Angaben zu Texturierungen enthalten kann. Die Materialdatei besitzt in der Regel die Dateiendung .mtl (von engl. material template library) und kann in der eigentlichen OBJ-Datei referenziert werden.

Aufbau

  • optionaler Kommentar
  • ggf. Einbindung des material template library.
  • ggf. Objektbenennung
  • Liste der Eckpunkte (Vertices)
  • Liste der Textur-Koordinaten
  • Liste der Normalen
  • Beschreibung der Flächen (Mit Gruppierung)
    • ggf. Gruppenname für folgende Flächen
    • ggf. Name des zu verwendenden Materials
    • ggf. Nummer der Glättungsgruppe
    • Beschreibung der Flächen

Details

Obj-Dateien werden zeilenweise ausgelesen, jeder Befehl benötigt eine neue Zeile.

Ein gültiger Eckpunkt-Index stimmt mit dem entsprechenden Eckpunktelementen der zuvor definierten Vertexliste überein. Ist der Index positiv, dann bezieht er sich auf die Stelle in der Eckpunktliste, welche mit 1 beginnt. Ist ein Index negativ, dann bezieht er sich auf das Ende der Eckpunktliste. Wobei -1 sich auf den an der aktuellen Dateiposition zuletzt definiert Punkt bezieht.[1]

Oben genannte Befehle:

"# <string Kommentar>" Kennzeichnung eines Kommentars – Alles in derselben Zeile nach der Raute wird ignoriert.

 # Dies ist ein Kommentar

"mtllib <string Path>" Einbindung einer Materialbibliothek – In der Datei beschriebene Materialien sind nun verwendbar.

 mtllib Cube.mtl

"o <string Name>" Benennung des Objekts.

 o CubeIstMeinName

"v <float X> <float Y> <float Z> [ <float W> ]" Beschreibung eines Eckpunktes (engl. vertex).

 v 1.000000 1.000000 -0.999999

"vt <float X> <float Y>" Beschreibung eines Texturkoordinatenpunktes.

 vt 0.500000 0.500000

"vn <float X> <float Y> <float Z>" Beschreibung einer Normale.

 vn 0.000000 -1.000000 0.000000

"g <string Name>" Benennung einer Gruppierung (Alle folgenden Flächen werden dieser Gruppierung zugeordnet).

g HierKommtEinGruppennameHin

"usemtl <string Material_Name>" Alle folgenden Flächen erhalten das in der Materialbibliothek mit diesen definierte Material.

 usemtl DiesesInDerMTLDateiDefinierteMaterialWirdGenutzt

"s <integer Glättungsgruppe>" Alle folgenden Flächen erhalten eine definierte zwischen 1 und 32 liegende Glättungsgruppennummer. Die Kanten nebeneinander liegende Flächen mit derselben Glättungsgruppennummer werden glatt dargestellt (Die Kante zwischen beiden Flächen wird unsichtbar), nebeneinanderliegende Flächen mit unterschiedlicher Glättungsgruppennummer werden normal dargestellt (Die Kante zwischen beiden Flächen wird sichtbar).

 s 32

"s off" Abschaltung der Glättung.

 s off

"f <integer A_V> <integer B_V> <integer C_V>..." Beschreibung einer Fläche. (Möglichkeit 1 – anhand von Eckpunkten)

 f 1 2 3

"f <integer A_V> / <integer A_VT> <integer B_V> / ..." Beschreibung einer Fläche. (Möglichkeit 2 – anhand von Eckpunkten und Texturkoordinaten)

 f 2/1 3/1 4/1

"f <integer A_V> // <integer A_VN> <integer B_V> // ..." Beschreibung einer Fläche. (Möglichkeit 3 – anhand von Eckpunkten und Normalen)

 f 2//1 3//1 4//1

"f <integer A_V> / <integer A_VT> / <integer A_VN> <integer B_V> / ..." Beschreibung einer Fläche. (Möglichkeit 4 – anhand von Eckpunkten, Texturkoordinaten und Normalen)

 f 2/3/1 3/4/1 4/6/1

Zudem können auch noch Grad, Basis Matrix, "Schritt Größe" und anstatt Flächen Linien, Punkte und Kurven beschrieben werden.

Beispiel

# Blender v2.71 (sub 0) OBJ File: 
# www.blender.org
mtllib Cube.mtl
o Cube
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -0.999999
v 0.999999 1.000000 1.000001
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 1.000000 -0.000000 0.000000
vn -0.000000 -0.000000 1.000000
vn -1.000000 -0.000000 -0.000000
vn 0.000000 0.000000 -1.000000
g Cube_Cube_Material
usemtl Material
s off
f 2//1 3//1 4//1
f 8//2 7//2 6//2
f 1//3 5//3 6//3
f 2//4 6//4 7//4
f 7//5 8//5 4//5
f 1//6 4//6 8//6
f 1//1 2//1 4//1
f 5//2 8//2 6//2
f 2//3 1//3 6//3
f 3//4 2//4 7//4
f 3//5 7//5 4//5
f 5//6 1//6 8//6

Verwandte Dateiformate

Einzelnachweise

  1. a b Obj Spec. 2. August 2019, archiviert vom Original am 2. August 2019; abgerufen am 21. September 2021.