Wavefront .obj-fil

OBJ-geometriformat
Filnamnstillägg
.obj
Internet mediatyp
modell/objekt
Utvecklad av Wavefront Technologies
Typ av format 3D-modellformat

OBJ (eller .OBJ) är ett filformat för geometridefinition som först utvecklades av Wavefront Technologies för dess Advanced Visualizer- animationspaket. Filformatet är öppet och har antagits av andra leverantörer av 3D-grafikapplikationer.

OBJ-filformatet är ett enkelt dataformat som enbart representerar 3D-geometri - nämligen positionen för varje vertex , UV-positionen för varje texturkoordinatpunkt, vertexnormaler och ytorna som gör att varje polygon definieras som en lista över hörn, och texturhörn. Vertices lagras som standard i en moturs ordning, vilket gör att explicit deklaration av ansiktsnormaler är onödiga. OBJ-koordinater har inga enheter, men OBJ-filer kan innehålla skalinformation i en läsbar kommentarsrad.

Filformat

Allt efter ett hash-tecken (#) är en kommentar.

# det här är en kommentar

En OBJ-fil kan innehålla vertexdata, friformskurva/ytattribut, element, friformskurva/ytakroppssatser, anslutning mellan friformsytor, gruppering och visa/rendera attributinformation. De vanligaste elementen är geometriska hörn, texturkoordinater, vertexnormaler och polygonala ytor:

 # Lista över geometriska hörn, med (x, y, z, [w]) koordinater, w är valfritt och är standard till 1.0. v 0,123 0,234 0,345 1,0 v ... ... # Lista över texturkoordinater, i (u, [v, w]) koordinater, dessa kommer att variera mellan 0 och 1. v, w är valfria och standard till 0. vt 0,500 1 [0] vt ... ... # Lista över vertexnormaler i (x,y,z) form;  normaler kanske inte är   enhetsvektorer  . vn 0,707 0,000 0,707 vn ... ... # Parameterrumspunkt i (u, [v, w]) form;  fri form geometri uttalande (se nedan) vp 0,310000 3,210000 2,100000 vp ... ... # Polygonalt ytelement (se nedan) f 1 2 3 f 3/1 4/2 5/3 f 6/4/1 3/5 /3 7/6/5 f 7//1 8//2 9//3 f ... ... # Linjeelement (se nedan) l 5 8 1 2 4 9  

Geometrisk vertex

En vertex anges via en linje som börjar med bokstaven v . Det följs av (x,y,z[,w]) koordinater. W är valfritt och har som standard 1.0. Ett höger koordinatsystem används för att specificera koordinatplatserna. Vissa applikationer stöder vertexfärger genom att sätta röda, gröna och blå värden efter xy och z (detta utesluter att ange w). Färgvärdena sträcker sig från 0 till 1.

Parameter space vertex

En geometrisats i fritt format kan anges på en rad som börjar med strängen vp . Definiera punkter i parameterutrymmet för en kurva eller yta. u krävs endast för kurvpunkter, u och v för ytpunkter och kontrollpunkter för icke-rationella trimningskurvor, och u , v och w (vikt) för kontrollpunkter för rationella trimningskurvor.

Ansiktselement

Ansikten definieras med hjälp av listor med vertex-, textur- och normalindex i formatet vertex_index/texture_index/normal_index för vilka varje index börjar på 1 och ökar motsvarande den ordning i vilken det refererade elementet definierades. Polygoner som fyrhörningar kan definieras genom att använda fler än tre index.

OBJ-filer stöder också friformsgeometri som använder kurvor och ytor för att definiera objekt, såsom NURBS -ytor.

Vertex index

Ett giltigt vertexindex matchar motsvarande vertexelement i en tidigare definierad vertexlista. Om ett index är positivt hänvisar det till förskjutningen i den hörnlistan, med början på 1. Om ett index är negativt hänvisar det relativt till slutet av listan med hörnpunkter, -1 hänvisar till det sista elementet.

Varje ansikte kan innehålla tre eller fler hörn.

f v1 v2 v3 ....

Vertex textur koordinatindex

Alternativt kan texturkoordinatindex användas för att specificera texturkoordinater när ett ansikte definieras. För att lägga till ett texturkoordinatindex till ett vertexindex när man definierar ett ansikte, måste man sätta ett snedstreck omedelbart efter vertexindexet och sedan sätta texturkoordinatindexet. Inga mellanslag är tillåtna före eller efter snedstrecket. Ett giltigt texturkoordinatindex börjar från 1 och matchar motsvarande element i den tidigare definierade listan med texturkoordinater. Varje ansikte kan innehålla tre eller flera element.

f v1/vt1 v2/vt2 v3/vt3 ...

Vertex normalindex

Alternativt kan normala index användas för att specificera normala vektorer för hörn när man definierar ett ansikte. För att lägga till ett normalt index till ett vertexindex när man definierar ett ansikte, måste man sätta ett andra snedstreck efter texturkoordinatindexet och sedan sätta det normala indexet. Ett giltigt normalindex börjar från 1 och matchar motsvarande element i den tidigare definierade listan med normaler. Varje ansikte kan innehålla tre eller flera element.

f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ...

Vertex normalindex utan texturkoordinatindex

Eftersom texturkoordinater är valfria kan man definiera geometri utan dem, men man måste sätta två snedstreck efter vertexindex innan man sätter normalindex.

f v1//vn1 v2//vn2 v3//vn3 ...

Linjeelement

Poster som börjar med bokstaven "l" (gemener L) anger ordningen på de hörn som bygger en polylinje.

l v1 v2 v3 v4 v5 v6 ...

Andra geometriformat

Obj-filer stöder ytor av högre ordning genom att använda flera olika typer av interpolation, såsom Taylor och B-splines, även om stöd för dessa funktioner i tredje parts filläsare är långt ifrån universellt. Obj-filer stöder inte heller mesh-hierarkier eller någon form av animering eller deformation, såsom vertex skinning eller mesh-morphing.

Referensmaterial

Material som beskriver de visuella aspekterna av polygonerna lagras i externa .mtl-filer. Mer än en extern MTL-materialfil kan refereras från OBJ-filen. .mtl-filen kan innehålla en eller flera namngivna materialdefinitioner.

mtllib [externt .mtl-filnamn] ...

Den här taggen anger materialnamnet för det element som följer efter den. Materialnamnet matchar en namngiven materialdefinition i en extern .mtl-fil.

usemtl [materialnamn] ...

Namngivna objekt och polygongrupper specificeras via följande taggar.

o [objektnamn] ... g [gruppnamn] ...

Jämn skuggning över polygoner möjliggörs genom att utjämna grupper.

s 1 ... # Jämn skuggning kan också inaktiveras. är avstängd...

Relativa och absoluta index

OBJ-filer kan, på grund av sin liststruktur, referera till hörn, normaler etc. antingen genom sin absoluta position (1 representerar den första definierade vertexen, N representerar den N:te definierade vertexen), eller genom deras relativa position (-1 representerar senast definierade vertex). Emellertid stöder inte all programvara det senare tillvägagångssättet, och omvänt skriver en del programvara i sig bara den senare formen (på grund av bekvämligheten med att lägga till element utan att behöva räkna om vertexförskjutningar, etc.), vilket leder till enstaka inkompatibiliteter.

Material mallbibliotek

MTL materialformat
Filnamnstillägg
.mtl
Internet mediatyp
modell/mtl
Magiskt nummer
  • ASCII: newmtl
  • Hex: 6E65776D746C
Utvecklad av Wavefront Technologies
Typ av format 3D texturformat

Material Template Library (MTL) eller .MTL File Format är ett kompletterande filformat till .OBJ, också definierat av Wavefront Technologies , som beskriver ytskuggningsegenskaper (material) för objekt i en eller flera .OBJ-filer. En .OBJ-fil refererar till en eller flera .MTL-filer (kallade "materialbibliotek") och refererar därifrån till en eller flera materialbeskrivningar med namn. .MTL-filer är ASCII- text som definierar en ytas ljusreflekterande egenskaper för datorrendering och enligt Phong-reflektionsmodellen . Standarden har brett stöd bland olika programvarupaket, vilket gör den till ett användbart format för utbyte av material.

MTL-formatet, även om det fortfarande används i stor utsträckning, är föråldrat och stöder inte fullt ut senare teknologier som spegelkartor och parallaxkartor . Men på grund av formatets öppna och intuitiva karaktär kan dessa enkelt läggas till med en anpassad MTL-filgenerator.

MTL-formatet definierar ett antal format.

Grundmaterial

En enda .mtl- fil kan definiera flera material. Material definieras efter varandra i filen, vart och ett börjar med kommandot newmtl :

# definiera ett material som heter 'Colored' newmtl Colored

Materialets omgivande färg deklareras med Ka . Färgdefinitioner är i RGB där varje kanals värde är mellan 0 och 1.

# vit Ka 1.000 1.000 1.000

deklareras den diffusa färgen med Kd .

# vit Kd 1.000 1.000 1.000

Spegelfärgen deklareras med Ks och viktas med den speglande exponenten Ns .

# svart (av) Ks 0,000 0,000 0,000 # varierar mellan 0 och 1000 Ns 10,000

Material kan vara transparenta . Detta kallas att vara upplöst . Till skillnad från verklig transparens beror resultatet inte på objektets tjocklek. Ett värde på 1,0 för "d" är standard och betyder helt ogenomskinlig, liksom ett värde på 0,0 för "Tr". Dissolve fungerar på alla belysningsmodeller.

# vissa implementeringar använder 'd' d 0.9 # andra använder 'Tr' (inverterat: Tr = 1 - d) Tr 0.1

Transparenta material kan dessutom ha en transmissionsfilterfärg, specificerad med "Tf".

# Överföringsfilterfärg (med RGB) Tf 1,0 0,5 0,5 # Överföringsfilterfärg (med CIEXYZ) - y- och z-värden är valfria och antas vara lika med x om de utelämnas Tf xyz 1,0 0,5 0,5 # Överföringsfilterfärg från spektralkurvfil ( inte vanligt förekommande) Tf spektral .rfl

Ett material kan också ha en optisk densitet för sin yta. Detta är också känt som brytningsindex .

# optisk densitet Ni 1,45000

Värdena kan variera från 0,001 till 10. Ett värde på 1,0 betyder att ljuset inte böjs när det passerar genom ett föremål. Att öka den optiska densiteten ökar mängden böjning. Glas har ett brytningsindex på cirka 1,5. Värden på mindre än 1,0 ger bisarra resultat och rekommenderas inte.

Flera belysningsmodeller finns tillgängliga, per material. Observera att det inte är nödvändigt att ställa in en transparent belysningsmodell för att uppnå transparens med "d" eller "Tr", och i modern användning specificeras ofta inte illum-modeller, även med transparenta material. Illum-modellerna räknas upp enligt följande:

 0. Färg på och Ambient av 1. Färg på och Ambient på 2. Markering på 3. Reflektion på och Ray trace på 4. Transparens: Glas på, Reflektion: Ray trace på 5. Reflektion: Fresnel på och Ray trace på 6. Transparens: Refraktion på, Reflektion: Fresnel av och Ray trace på 7. Transparens: Refraktion på, Reflektion: Fresnel på och Ray trace på 8. Reflektion på och Ray trace av 9. Transparens: Glas på, Reflektion: Ray trace av 10. Kastar skuggor på osynliga ytor 
 illum 2 

Textur kartor

Texturerade material använder samma egenskaper som ovan och definierar dessutom texturkartor . Nedan finns ett exempel på en vanlig materialfil. Se hela Wavefront filformatreferens för mer information.

newmtl Textured Ka 1.000 1.000 1.000 Kd 1.000 1.000 1.000 Ks 0.000 0.000 0.000 d 1.0 illum 2 # den omgivande texturkartan map_Ka lemur.tga the texture ) map_Kd lemur.tga # spegelfärgad texturkarta map_Ks lemur.tga # spegelbildande högdagerkomponent map_Ns lemur_spec.tga # alfatexturkartan map_d lemur_alpha.tga # vissa implementeringar använder 'map_bump' istället för 'bump' under map_bump lemur_bumptga # bump lemur_bump. (som som standard använder bildens luminanskanal) bump lemur_bump.tga # förskjutningskarta disp lemur_disp.tga # stencil dekal textur (standard till "matt" kanal i bilden) decal lemur_stencil.tga

Texturkartsatser kan också ha alternativparametrar (se hela specifikationen ).

# texturursprung (1,1,1) map_Ka -o 1 1 1 ambient.tga # sfärisk reflektionskarta refl -typ sfär clouds.tga

Textur alternativ

-blendu på | av # ställ in horisontell texturblandning (standard på) -blendv på | av # ställ in vertikal texturblandning (standard på) -boost float_value # boost mip-kartans skärpa -mm base_value gain_value # ändra texturkartans värden (standardvärde 0 1) # base_value = ljusstyrka, gain_value = kontrast -ou [v [w]] # Ursprungsoffset (standard 0 0 0) -su [v [w]] # Skala (standard 1 1 1) -tu [v [w]] # Turbulens (standard 0 0 0) -texres upplösning # texturupplösning för att skapa -clamp på | av # återger bara texels i det fastklämda 0-1-intervallet (standard av) # När det inte är klämt upprepas texturer över en yta, # när de är fastklämda återges endast texel som faller inom intervallet 0-1 #. -bm mult_value # bump multiplikator (endast för bump maps) -imfchan r | g | b | m | l | z # anger vilken kanal i filen som används för att # skapa en skalär eller bump-textur. r:röd, g:grön, # b:blå, m:matt, l:luminans, z:z-djup.. # (standard för bump är 'l' och för dekal är 'm')

Till exempel,

# säger att man ska använda den röda kanalen för bumpmap.tga som bumpmap bump -imfchan r bumpmap.tga

För reflektionskartor ...

-type sfär # anger en sfär för en "refl" reflektionskarta -type cube_top | cube_bottom | # när du använder en kubkarta, texturfilen för varje kub_front | kub_tillbaka | # sida av kuben anges separat cube_left | kub_höger

Leverantörsspecifika ändringar

På grund av det enkla att analysera filerna och den inofficiella spridningen av filformatet kan filer innehålla leverantörsspecifika ändringar.

Enligt specifikationen ska alternativen föregå texturfilnamnet. Minst en leverantör genererar dock filer med alternativ i slutet.

# bump multiplikator på 0,2 bump texbump.tga -bm 0,2

Fysiskt baserad rendering

Skaparna av onlineverktyget för 3D-redigering och modellering, Clara.io , föreslog att MTL-formatet skulle utökas till att innehålla följande parametrar för att representera de fysiskt baserade renderingsparametrarna :

Pr/map_Pr # grovhet Pm/map_Pm # metallisk Ps/map_Ps # glans Pc # klarlacktjocklek Pcr # klarlackråhet Ke/map_Ke # emissiv aniso # anisotropi anisor # anisotropi rotationsnorm # normal karta (RGB-komponenter representerar XYZ-komponenter av ytnormalen)

Ytterligare föreslagna tillägg kommer från DirectXMesh-verktygssatsen för Microsofts DirectX- motor, som tillåter möjligheten att definiera en modells förkompilerade RMA-material.

map_RMA # RMA-material (råhet, metallhet, omgivande ocklusion) map_ORM # alternativ definition av map_RMA

Se även

externa länkar