I en verden hvor digital kunst og fotografering smelter mere og mere sammen, åbner der sig spændende muligheder for at bruge dine billeder på nye måder. En af disse måder er at integrere dem i 3D-modeller. Mange tænker måske, at dette kræver kompleks og dyr software, men for simple opgaver, som at skabe en grundlæggende form og beklæde den med dine fotos, kan du faktisk komme langt med blot en simpel teksteditor og lidt viden om filformaterne OBJ og MTL.
Denne guide vil tage dig igennem processen med at skabe en helt basal 3D-kube fra bunden og derefter 'male' dens sider med dine udvalgte billeder. Det er en fantastisk måde at forstå de grundlæggende principper bag 3D-modellering og teksturering på, og det bedste er, at du kun behøver en teksteditor og dine yndlingsbilleder for at komme i gang.

Hvad er OBJ og MTL filer?
Før vi dykker ned i den praktiske del, er det vigtigt at forstå de filformater, vi skal arbejde med. OBJ (eller .obj) er et filformat til definition af 3D-geometri, der oprindeligt blev udviklet af Wavefront Technologies. Det er et åbent format, der er blevet bredt adopteret af mange 3D-grafikprogrammer. En af de store fordele ved OBJ-formatet er, at det er tekstbaseret. Det betyder, at du kan åbne en OBJ-fil i en hvilken som helst teksteditor og læse samt modificere dens indhold.
En OBJ-fil indeholder information om modellens geometri, såsom:
- Vertices (v): Punkter i 3D-rummet, der definerer hjørnerne af modellen.
- Vertex Normals (vn): Vektorer, der definerer retningen af overfladen ved hvert punkt, vigtigt for belysning.
- Texture Coordinates (vt): 2D-koordinater, der fortæller, hvordan et billede (en tekstur) skal placeres på modellens overflade.
- Faces (f): Definitioner af polygoner (typisk trekanter eller firkanter), der udgør modellens overflade, ved at referere til de ovennævnte vertices, normals og texture coordinates.
Mens OBJ-filen beskriver formen, beskriver MTL (eller .mtl) filen materialerne. MTL står for Material Template Library. En MTL-fil indeholder definitioner af materialer, der kan anvendes på de forskellige dele af en OBJ-model. Disse materialer kan definere farve, reflektion, gennemsigtighed, og vigtigst for denne guide, hvilke billeder der skal bruges som teksturer på overfladerne. OBJ-filen refererer til MTL-filen for at vide, hvilke materialer (og dermed teksturer) der skal bruges på hvilke 'faces'.
Sammen udgør OBJ og MTL et kraftfuldt og tilgængeligt par til simpel 3D-modellering og teksturering.
Forberedelse: Billeder og Værktøjer
Det første skridt er at samle de billeder, du ønsker at bruge som teksturer på din kube. Vælg 5 eller 6 billeder, afhængigt af hvor mange sider af kuben du vil teksturere. Det er afgørende, at du gemmer disse billeder i samme mappe, hvor du vil oprette din OBJ- og MTL-fil. Navngiv billederne simpelt, f.eks. pic1.jpg, pic2.jpg osv. JPG- og PNG-formater understøttes typisk.
Ud over dine billeder skal du bruge:
- En teksteditor: Notepad, VS Code, Sublime Text, eller enhver anden simpel teksteditor vil fungere.
- En 3D-fremviser: For at se resultatet af dit arbejde skal du bruge et program, der kan åbne OBJ-filer. Programmer som Windows 3D Builder (indbygget i Windows 10/11), MeshLab (gratis) eller Blender (gratis, mere avanceret) kan bruges. 3D Builder er et godt og simpelt valg til hurtig visning.
Trin for Trin: Oprettelse af OBJ-filen
Nu er vi klar til at oprette selve 3D-modellen – kuben.
1. Opret et nyt tekstdokument
Åbn din teksteditor og opret et nyt, tomt dokument i den mappe, hvor dine billeder er gemt.
Skriv følgende linje øverst i dokumentet:
o Mesh
Dette giver din model et navn, 'Mesh'. Det er ikke strengt nødvendigt for en simpel fil, men god praksis.
3. Definér kubens hjørner (Vertices)
En kube har 8 hjørner. Vi skal definere koordinaterne for hvert hjørne i 3D-rummet (X, Y, Z). Vi laver en kube centreret omkring punktet (0, 0, 0). Hvis vi ønsker en kube på f.eks. 3x3x3 tommer, og vores fremviser bruger millimeter (1 tomme = 25.4 mm), bliver dimensionen 76.2 mm. OBJ-formatet er enhedsløst, så du kan bruge de tal, der passer bedst til din fremviser eller dit formål. Brug f.eks. 76.2 som reference. Tilføj disse linjer efter 'o Mesh':
v -76.2 -76.2 -76.2v 76.2 -76.2 -76.2v 76.2 76.2 -76.2v -76.2 76.2 -76.2v -76.2 -76.2 76.2v 76.2 -76.2 76.2v 76.2 76.2 76.2v -76.2 76.2 76.2
Hver linje, der starter med 'v', definerer en vertex med X, Y, Z koordinater. Disse er de 8 hjørner af din kube.
4. Tilføj Normaler og Teksturkoordinater
Under vertex-definitionerne skal vi tilføje information om normaler og teksturkoordinater. For en simpel kube kan du bruge standardværdier. Normalerne (vn) hjælper med korrekt belysning af overfladen, og teksturkoordinaterne (vt) bestemmer, hvordan billedet 'passes' på overfladen.
vn 0 -1 0.5vn 0 1 0.5vn -1 0 0.5vn 1 0 0vn 0 0 1vn 0 0 -1vt 0 0vt 1 0vt 0 1vt 1 1
'vn' linjerne definerer vertex normaler, og 'vt' linjerne definerer teksturkoordinater. For denne specifikke kubegeometri og teksturmapping, brug disse værdier præcist.
5. Definér Overflader (Faces)
Nu skal vi definere selve kubens overflader ved at pege på de vertices, normaler og teksturkoordinater, vi lige har defineret. En kube har 6 sider, og hver side kan defineres af to trekanter (da de fleste 3D-systemer arbejder bedst med trekanter). Hver linje, der starter med 'f', definerer en trekant. Formatet er `f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3`, hvor tallene refererer til linjenumrene i 'v', 'vt' og 'vn' listerne (startende fra 1).
f 1/1/1 2/2/1 6/4/1f 1/1/1 6/4/1 5/3/1f 3/1/2 4/2/2 8/4/2f 3/1/2 8/4/2 7/3/2f 4/1/3 1/2/3 5/4/3f 4/1/3 5/4/3 8/3/3f 2/1/4 3/2/4 7/4/4f 2/1/4 7/4/4 6/3/4f 5/1/5 6/2/5 7/4/5f 5/1/5 7/4/5 8/3/5f 4/1/6 3/2/6 2/4/6f 4/1/6 2/4/6 1/3/6
Hver af de 12 'f' linjer definerer en trekant. De to første 'f' linjer definerer én side af kuben, de næste to den næste side, osv. Rækkefølgen af tallene er kritisk; den bestemmer, hvordan overfladen vender, og hvordan teksturen mappes. For denne guide er det bedst at kopiere dem præcist.
6. Gem filen som .obj
Gem nu dit tekstdokument. Vælg 'Gem som' og sørg for, at 'Filtype' er sat til 'Alle filer' eller 'Text Documents (*.txt)'. Navngiv filen med en .obj endelse, f.eks. `MinKube.obj`, og gem den i mappen med dine billeder.
Oprettelse af MTL-filen
Nu hvor geometrien er på plads, skal vi definere materialerne og koble dem til dine billeder.
1. Opret et nyt tekstdokument
Opret et nyt, tomt tekstdokument i samme mappe som din .obj fil og billeder.

2. Definér et materiale
Hver side af kuben, du vil teksturere, skal have sit eget materiale. Start med det første materiale:
newmtl MaterialeTopKd 1 1 1Ns 96.0784d 1illum 1Ka 0 0 0Ks 1 1 1map_Kd pic1.jpg
Denne blok definerer et nyt materiale kaldet 'MaterialeTop'.
- `newmtl`: Starter definitionen af et nyt materiale.
- `Kd`: Diffus farve. `1 1 1` betyder hvid, hvilket er godt, når man bruger et billede, da billedet så bestemmer farven.
- `map_Kd`: Dette er linjen, der kobler materialet til et billede. `pic1.jpg` skal matche navnet på et af dine billeder i mappen.
- De andre linjer (`Ns`, `d`, `illum`, `Ka`, `Ks`) definerer forskellige egenskaber som glans, gennemsigtighed og spekulær farve. For denne guide kan de kopieres præcist.
3. Definér materialer for de andre sider
Kopier materialeblokken fire gange mere (hvis du bruger 5 billeder). Ændr navnet efter `newmtl` til noget unikt for hver side, f.eks. `MaterialeFront`, `MaterialeBag`, `MaterialeVenstre`, `MaterialeHøjre`. Vigtigst er, at du ændrer billedfilnavnet efter `map_Kd` til at matche dine andre billeder (pic2.jpg, pic3.jpg osv.). Din .mtl fil skulle nu se nogenlunde sådan ud (med dine egne materialenavne og billedfilnavne):
newmtl MaterialeTopKd 1 1 1Ns 96.0784d 1illum 1Ka 0 0 0Ks 1 1 1map_Kd pic1.jpgnewmtl MaterialeFrontKd 1 1 1Ns 96.0784d 1illum 1Ka 0 0 0Ks 1 1 1map_Kd pic2.jpgnewmtl MaterialeBagKd 1 1 1Ns 96.0784d 1illum 1Ka 0 0 0Ks 1 1 1map_Kd pic3.jpgnewmtl MaterialeVenstreKd 1 1 1Ns 96.0784d 1illum 1Ka 0 0 0Ks 1 1 1map_Kd pic4.jpgnewmtl MaterialeHøjreKd 1 1 1Ns 96.0784d 1illum 1Ka 0 0 0Ks 1 1 1map_Kd pic5.jpg
Hvis du ikke ønsker et billede på en side (f.eks. bunden), skal du ikke oprette et materiale for den side i MTL-filen.
4. Gem filen som .mtl
Gem dette tekstdokument med en .mtl endelse i samme mappe, f.eks. `MinKubeMaterialer.mtl`. Sørg igen for, at filtypen er 'Alle filer'.
Sammenkobling af OBJ og MTL
Den sidste del er at fortælle OBJ-filen, hvilken MTL-fil den skal bruge, og hvilke materialer der skal anvendes på de forskellige flader.
1. Referer til MTL-filen i OBJ-filen
Åbn din .obj fil (`MinKube.obj`) i teksteditoren. Tilføj følgende linje allerøverst i filen, før 'o Mesh':
mtllib MinKubeMaterialer.mtl
Erstat `MinKubeMaterialer.mtl` med navnet på din egen .mtl fil, hvis du navngav den anderledes. Denne linje fortæller 3D-fremviseren, hvor den kan finde materialedefinitionerne.
2. Anvend materialer på fladerne (Faces)
Nu skal vi fortælle OBJ-filen, hvilke af de definerede materialer fra MTL-filen der skal bruges på hvilke flader. Dette gøres ved at indsætte linjen `usemtl [materialenavn]` lige før den eller de 'f' linjer, der udgør en bestemt side af kuben.
Husk, at de første to 'f' linjer i vores OBJ-fil definerer én side, de næste to definerer en anden side, osv. Du skal finde ud af, hvilke 'f' linjer der svarer til hvilken side af kuben (top, bund, foran, bagved, venstre, højre). Dette kan kræve lidt trial-and-error eller en forståelse af, hvordan vertices er nummereret i din fil. For den specifikke kube, vi har lavet, hører fladerne sammen parvis i den rækkefølge, de er defineret:
- f 1/1/1 2/2/1 6/4/1 og f 1/1/1 6/4/1 5/3/1
- f 3/1/2 4/2/2 8/4/2 og f 3/1/2 8/4/2 7/3/2
- f 4/1/3 1/2/3 5/4/3 og f 4/1/3 5/4/3 8/3/3
- f 2/1/4 3/2/4 7/4/4 og f 2/1/4 7/4/4 6/3/4
- f 5/1/5 6/2/5 7/4/5 og f 5/1/5 7/4/5 8/3/5
- f 4/1/6 3/2/6 2/4/6 og f 4/1/6 2/4/6 1/3/6
Indsæt `usemtl` linjer før hvert par af 'f' linjer, der definerer en side, du vil teksturere. Brug navnene præcist som defineret i din .mtl fil (f.eks. `MaterialeFront`, `MaterialeTop`, etc.).
mtllib MinKubeMaterialer.mtl o Meshv -76.2 -76.2 -76.2... (alle v, vn, vt linjer)...usemtl MaterialeFrontf 1/1/1 2/2/1 6/4/1f 1/1/1 6/4/1 5/3/1usemtl MaterialeTopf 3/1/2 4/2/2 8/4/2f 3/1/2 8/4/2 7/3/2...(fortsæt for de resterende sider med billeder)...f 4/1/6 3/2/6 2/4/6f 4/1/6 2/4/6 1/3/6
Hvis du ikke ønsker et billede på den sidste side (bunden i dette eksempel), skal du ikke indsætte en `usemtl` linje før de sidste to 'f' linjer.
3. Gem den opdaterede OBJ-fil
Gem din .obj fil igen. Nu er den klar til at blive vist med teksturer.
Visning af din Teksturerede Kube
Åbn din 3D-fremviser (f.eks. 3D Builder) og indlæs din .obj fil (`MinKube.obj`). Programmet skulle automatisk finde .mtl filen (da den er refereret i .obj filen og ligger i samme mappe) og dine billeder (da de er refereret i .mtl filen og ligger i samme mappe). Du skulle nu se din kube med dine egne fotos på siderne!
Hvis der er fejl, eller teksturerne ikke vises korrekt, skal du dobbelttjekke følgende:
- Er alle filer (.obj, .mtl, billeder) i samme mappe?
- Er filnavnene i `mtllib` og `map_Kd` linjerne i OBJ/MTL filerne skrevet præcist (inklusive store/små bogstaver og filendelser)?
- Er materialenavnene i `usemtl` linjerne i OBJ-filen skrevet præcist som defineret efter `newmtl` i MTL-filen?
- Er `f` linjerne og `usemtl` linjerne i den korrekte rækkefølge i OBJ-filen, så materialerne anvendes på de tilsigtede flader?
Ofte Stillede Spørgsmål
Kan jeg bruge andre billedformater end JPG og PNG?
MTL-formatet understøtter primært JPG og PNG. Andre formater som BMP eller TGA kan understøttes af visse 3D-programmer, men JPG og PNG er de mest sikre valg for bred kompatibilitet.
Hvordan laver jeg en kube i en anden størrelse?
Du skal blot ændre alle tallene '76.2' i 'v' (vertex) linjerne i din .obj fil til den halve længde af den ønskede side. Hvis du f.eks. ønsker en kube på 100x100x100 enheder, skal du ændre alle '76.2' til '50'. Husk, at OBJ-formatet er enhedsløst, så '50' kan repræsentere 50 mm, 50 cm, 50 tommer osv., afhængigt af hvordan din 3D-fremviser fortolker tallene.
Kan jeg teksturere mere komplekse modeller på denne måde?
Ja, princippet er det samme for mere komplekse modeller. Dog bliver den manuelle redigering af 'v', 'vt', 'vn' og især 'f' linjerne ekstremt kompliceret og tidskrævende for modeller med mange polygoner. Dette er grunden til, at 3D-modelleringssoftware bruges til komplekse objekter. Men for simple former som en kube eller pyramide er teksteditor metoden absolut mulig.
Hvad hvis mine billeder ikke passer korrekt på fladerne?
Dette skyldes typisk, at teksturkoordinaterne ('vt' linjerne) eller rækkefølgen i 'f' linjerne ikke passer til den ønskede mapping. De teksturkoordinater, vi brugte (0,0), (1,0), (0,1), (1,1), mapper et billede, så dets nedre venstre hjørne er ved (0,0) og øvre højre hjørne er ved (1,1) på den 'udfoldede' overflade. Hvis dit billede vises vendt eller spejlvendt, skal du muligvis justere rækkefølgen af 'vt'-indeksene i 'f' linjerne for den pågældende flade.
Understøtter Photoshop OBJ-filer?
Ja, nyere versioner af Adobe Photoshop har 3D-funktioner, der inkluderer understøttelse af OBJ-filer. Du kan importere OBJ-modeller i Photoshop og bruge dets værktøjer til at male eller anvende teksturer direkte på modellen i et 3D-miljø.
Konklusion
At skabe en tekstureret 3D-kube ved hjælp af en simpel teksteditor giver et fascinerende indblik i de grundlæggende byggeklodser bag 3D-modeller og materialer. Selvom det er en manuel proces, demonstrerer den tydeligt forholdet mellem geometri (OBJ) og udseende/tekstur (MTL). Dette projekt er en fremragende start for enhver, der er nysgerrig på 3D og ønsker at eksperimentere med at bruge deres egne fotos i et digitalt rum, uden at skulle investere i dyr software. Med dine egne billeder og en smule tålmodighed kan du bringe dine fotografier ind i en ny dimension.
Hvis du vil læse andre artikler, der ligner Lav din egen 3D-kube med dine fotos, kan du besøge kategorien Fotografi.
