Visualiseringsprosjekt – 12

Det er en stund siden jeg blogget om visualiseringsprosjektet, og i mellomtiden har det blitt gjort en del endringer. Jeg har foreløpig gått bort i fra bruken av VRML-formatet, og skal istedet bruke Blender Game Engine (BGE) som presentasjonsmetode.  En interaktiv presentasjon laget ved hjelp av BGE kan eksporteres som en kjørbar fil (.exe), der alle ressursene (teksturer, scripts, lyder etc.) er pakket inn i fila. Denne kan lastes ned via internett og kjøres fra hardisk, så selv om denne presentasjonsmåten ikke er så direkte som en VRML-visning i en nettleser, er det en problemfri måte å distribuere presentasjonen på.

Når modellen av tettstedet nå skal brukes i BGE måtte jeg omstrukturere hus-modellene. Det er viktig at normalene (normals) vender riktig vei utover, og at meshen til modellene er godt modellert, slik at teksturen kan legges på riktig.

Noen av bygningene var fra før av modellert nøyaktig, men på grunn av det store antall bygninger var de fleste husene bare røfflig modellert. Jeg hadde i utgangspunktet bestemt meg for å heller vektlegge tekstureringen av bygningene istedet for å detalj-modellere dem, for ikke å gjøre arbeidsmengden uoverkommelig (se Del 1). Jeg har fortsatt på denne strategien, siden mange av bolighusene kan standardiseres.

Mesh garasje modell.

Jeg har tatt  for meg «standardhusene», og teksturert dem ved hjelp av UV-mapping. Teksturen er i første omgang kun vanlig standard «hus-tekstur», fordi jeg på dette tidspunktet mangler gode detalj-fotografi av husene.

Tekstur til garasje-modell.

Hus-modellen i illustrasjonene her (garasjen ved siden av kjøpesenteret) måtte re-modelleres en del, så når den var ferdig, kopierte jeg modellen og plasserte den på steder i tettstedet hvor det skal være en garasje.

Teksturert garasjemodell

Teksturert garasjemodell

På denne måten har jeg gjenbrukt modellen. Denne arbeidsmetoden blir også brukt på de andre «standardhus»-modellene (bolighus, bolighus med tilbygg, etc.).

Husmodell med tilbygg

Husmodell med tilbygg

Modellen av vegnettet måtte byttes ut fullstendig. Det viste seg å være vanskelig å teksturere et objekt laget av en bezier-kurve, ved hjelp av UV-mapping. Jeg har istedet laget vegnettet av et Plane-Objekt, der facene er tilpasset slik at teksturen blir best mulig fordelt.

De yttre og indre kurvene forenet til én kurve med samme form som veg-nettet

Over: gammel vegkurve laget ved hjelp av bezier-kurver.

Ny vegkurve laget vha. Plate-objekt.

Et annet problem som oppstod var at Blender begynte å krasje når presentasjonen ble kjørt i spillmotoren (tastatursnarvei P). Problemet ble bare værre etterhvert som flere modeller fikk teksturer. Jeg trodde først at dette kom av at modellen av tettstedet var for stor, og at det var for mange polygoner. Jeg forsøkte da å dele opp presentasjonen, slik at hvert kvartal i tettstedet ble lagt i sin egen blender-fil. Tanken var da å la Blender automatisk laste inn et nytt kvartal i blenderplayer (den kjørbare fila) når brukeren krysset (den usynlige) grensen til dette kvartalet. Men selv med en liten modell av tettstedet, med få polygoner, fortsatte Blender å krasje.
Etter litt søking på nettet fant jeg ut at PCen´s grafikk-kort (Intel integrert grafikkkort) ikke støtter shaders, og at det derfor ikke kunne være lys-objekter (Lamp) i modellen av tettstedet. Jeg hadde lenket et Lamp-objekt til kameraet for å lyse opp modellen ved bruk i VRML, og det var særlig dette som skapte problemet.
Nå når jeg har fjernet alle lys-objekt i presentasjonen fungerer alt som det skal.

Jeg har også gjort endringer i presentasjonen av vegetasjonen (trærne). Grafikk-kortet støtter kun den enkleste formen for materialer som Blender kan bruke i interaktive presentasjoner («Blender Multitexture Materials»), så jeg kan ikke teksturere et plateobjekt med en tekstur laget ved hjelp av et transparent bilde, og bruke det i modellen av tettstedet, slik jeg har gjort i VRML-fila (Del 8). Jeg har i første omgang valgt å modellere trærne som 3d-modeller, som jeg legger tekstur på. Jeg modellerte først et standard-tre (stamme + greiner) ved hjelp av Blenders python-script «Tree From Curves» (Scripts -> Wizards -> Tree From Curves), og lagde tre-kroner av tre sphere-objekter som ble deformert. Dette standard-treet har jeg deretter kopiert, og gjort små endringer på (tre-kronenen ble rotert ulikt i hver kopi). Tre-modellene krever mye prossesor-kraft pga. mange polygoner, så de er foreløpig brukt sparsomt i tettstedet, men jeg planlegger å ta i bruk en annen måte å modellere skogholt på:  når en plate er modellert og utformet som et skjermbrett (som skal være skogholtets synlige side) kan jeg markere facene (i meshen) som skal være gjennomsiktige og velge normals -> flip. Dette vil gjøre disse facene  gjennomsiktig når de sees fra forsiden.

tremodell

tremodell

Mesh trestamme med UV-layout.

Mesh trekrone med UV-layout.

Fordi jeg ikke kan ha lys i modellene må jeg bake inn skygger i teksturene for å unngå at de blir for flate og kjedelige. I noen av modellene hender det at ambient teksturen blir bare svart under bakingen. Løsningen er å velge ‘normals -> recalkulate inside’, og deretter bake teksturen. Deretter må man velge ‘normals -> recalculate outside’ for å vrenge modellen igjen og vise teksturen. Dette må gjøres mens man er i vis vertex modus.
Det hender også at jeg får beskjed om «No image» når jeg forsøkte å bake. Jeg rekalkulerer normalene, men må først lukke og åpne blender-fila før jeg får det til. Hva som er årsaken til dette, har jeg ikke kommet til bunns i ennå.

Å lage presentasjonen ved hjelp av Blender Game Engine gir flere muligheter, og gjør prosjektet fleksibelt. Jeg har bl.a. lagd en animasjon, der kameraet flyr gjennom tettstedet, og lagret animasjonen som en AVI-fil.

Delvis teksturert modell av tettsted

Delvis teksturert modell av tettsted

Jeg har brukt Blender versjon 2.49b, fordi den nye versjonen av Blender (2.5 beta) ennå ikke har mulighet for å eksportere et Game Engine prosjekt som kjørbar fil (.exe).
Ennå gjenstår det å legge tekstur på flere modeller, men det går fremover! 🙂

Del 1Del 2Del 3Del 4Del 5Del 6Del 7 |  Del 8Del 9Del 10Del 11 |

I eksemplet her skal vi lage et materiale som er av en av de enkleste typene materiale for
spill-grafikk: «Blender Multitexture Materials». Med denne typen materiale vil du kunne
lage 3d-spill som også kan spilles på pc´er med helt enkle grafikk-kort. Pass bare på å
ikke bruke noen form for lys-objekter i spillet (f.eks. Lamp, Spot e.l.l.), så vil et slikt spill
kunne brukes selv med et integrert Intel grafikkkort. Du kan også lage mer avanserte
materialer for 3d-spill, med Blender, og som kalles «Blender GLSL Materials». Ulempen er
selvsagt at kun kraftige grafikk-kort med støtte for GLSL-grafikk kan benytte seg av
mulighetene som GLSL gir, og at spillet høyst sannsynlig vil kræsje ved bruk av andre
grafikk-kort. Du velger hvilken type materialer spillet ditt skal bruke ved å klikke på
menyvalget «Game» i header-linja til ‘User Preferences’ vinduet (46).