Semesteroppgave Dokumentasjon

Legger her ut dokumentasjonen av semesteren. Dette er kun tekst, og det er i bunn og grunn bare en oppsummering av prosessen. Hvis du har lest bloggen min etterhvert er det ingenting i denne teksten som er helt nytt for deg.

——————————–

Semesteroppgaven 2012 av Daniel Odland

Introduksjon

Til semesteroppgaven min på 3D-design har jeg laget en zombie-karakter. Karakteren er teksturert, shadet og har en enkel rigg for posering. Meningen med oppgaven var å lære mer om shading, lyssetting og rendering samt å få gjort en del ting jeg ikke har mye erfaring med. Eksempler på dette er å bruke de forskjellige sub surface scattering-shaderne i Mental Ray og å jobbe med flere UV-spaces. Sistnevnte har jeg lært mye av, blant annet å ikke bruke dette med mindre man virkelig trenger det. Det har komplisert nesten alle oppgaver som ellers ville ha vært enklere i tillegg til at det har økt rendertiden betraktelig.
En del av grunnen til at ting blir mer komplisert med flere UV-spaces er at mange programmer, særlig litt mindre, nyere og uavhengige programmer ikke nødvendigvis støtter denne teknikken eller bare delvis.

En ting jeg gjorde etter hver prosess var at jeg brukte tid på å evaluere og notere meg ting jeg skulle gjort annerledes. Dette var verdifullt og en viktig del av prosessen.

Oppgaven ble desverre ikke helt ferdig, og det jeg har levert inn er laget av rendere jeg hadde klar. Den endelige komposisjonen ble desverre ikke rendret ut fordi jeg hadde brukt opp all tiden min og måtte velge mellom å håpe at jeg klarte å få denne ut i tide eller lage en ferdig presentasjon av det jeg faktisk hadde klart. Jeg valgte det sistnevnte. Jeg kommer imidlertid til å nevne ting jeg har jobbet med på environmenten.

Jeg velger å lage dette dokumentet som en oppsummering av prosjektet og kun som tekst, da bloggen min dokumenterer det meste av prosessen i detalj og med mange bilder. Bloggen kan finnes på http://wwww.ideblogg.no/danielodland

Beskrivelse av framgangsmåte

Modellering

Jeg tror tradisjonell polymodellering er på vei til å forsvinne, hvorpå voxelsculpting vil overta som den vanligste måten å forme modellen på som man da retopologiserer. Dette er i så fall positivt for modellører i den forstand at man vil ha et klart skille mellom den tekniske og den artistiske delen av modellering og fordi sculptingprogrammene har helt klart bedre verktøy for å forme modellen. Det negative ved dette er jo selvsagt at man mister den gøye prosessen det er å polymodellere. Jeg er veldig glad i å polymodellere, og ville gjøre det på denne oppgaven.
Jeg kjøpte boken “Atlas of human anatomy for the artist” av Stephen Rogers Peck i forkant av oppgaven. Denne boken har lært meg mye om hvordan vi egentlig ser ut. Det er rart hvordan man ikke ser enkelte ting selv om man ser folk hver eneste dag. Eksempler er sternocleidomastoid muskelen i halsen som er så viktig men som jeg ikke hadde tenkt på før. Jeg har blitt flinkere til å se former nå enn før jeg startet oppgaven og det har gjort meg mer selvsikker på modelleringen.
Jeg la inn en del detaljer i modellen. Dette er litt mer komplisert å UV-mappe men jeg syns det var verd det fordi syns bare det var såpass gøy å modellere inn detaljene i neglene for eksempel. Jeg sculptet også en del detaljer inn i modellen, som så ble bakt inn i displacementmaps. Kommer tilbake til dette.

UV-mapping ble gjort i Headus UV-layout. Jeg er kjent med Maya sine verktøy for UV’er men det er veldig tungt å jobbe med fordi UV-editoren er buggy og krasjer for ofte. Headus UV-layout har også langt bedre støtte for store mesher og har betydelig bedre unfoldingalgoritmer. Dette fører til lite strekk og veldig rask UV-layout.
En av de spesielle tingene med karakteren min er at den har tre UV-spaces: en for hodet og innsiden av munnen (tok også med hånden i denne), en for torsoen og en for lemmene (armer, bein og føtter). Dette gjorde jeg ved å først legge ut UV’ene i Headus, eksportere til Maya og arrangere de forskjellige shellene der. Det jeg gjorde for å få rett tekstur på rett del av meshen var at jeg i placementnodene på teksturene ga en offset på teksturene slik at de dekket rett UV-space. Jeg brukte så layered textures for å kombinere dette til en tekstur, og brukte denne til å plugge i shaderen. Grunnen til at jeg ikke bare lagde en tekstur med alle delene i var at Maya støtter ikke teksturer over 4k. Dermed må man ha 3 4k teksturer som går inn i en layered texture og la denne utgjøre de 12k man egentlig ville ha.

Jeg tok så med meg modellen inn i Zbrush. Der sculptet jeg de øvrige detaljene jeg ønsket meg.
Jeg har blitt god venn med slash-brushene, move-brushene (særlig move topological), inflate-brushen og clay-brushene.
For å få Zbrush til å fungere med 3 UV-spaces lagde jeg polygroups som tilsvarte de forskjellige spaces og da jeg skulle eksportere teksturer fra Zbrush hidet jeg de polygroups som ikke skulle være med.
Jeg eksporterte mange versjoner av displacement maps fra Zbrush. Jeg testet forskjellige settings både rangemessig (hvilket level jeg bakte fra og til, f eks 1-6, 1-4), med og uten adaptive, bitdybder, med og uten UV smoothing og så videre. Jeg lagde så plansjer hvor jeg studerte forskjellene på de forskjellige metodene. Slik fikk jeg testet mange metoder. Jeg endte opp med å eksportere 32-bits displacement. Dette viste seg i tillegg til å være penere også å være betydelig enklere å sette opp i Maya (med tanke på alpha gain). Ulempen var selvsagt størrelse på filene og mangel på funksjon i Photoshop, men det gikk greit å gjøre de fleste forandringene jeg ville gjøre, da både clone stamp tool, flipping vertikalt og konvertering til RGB fungerer med 32 bit.

Teksturering

Jeg startet tekstureringsprosessen ved å lage en render av modellen og ta den inn i photoshop for å painte over den. Jeg testet en del fargekombinasjoner på denne måten og endte opp med å ha litt peiling på hvor jeg ville hen fargemessig.
Selve tekstureringen foregikk i Mudbox og Photoshop. Jeg lagde layers der det var naturlig. Mudbox viser seg å fungere greit med flere UV-spaces. Når man jobber masker den ut de delene man ikke bruker i øyeblikket, og så aktiverer man de UV’ene man vil painte på. Når man eksporterer kommer det automatisk 3 maps ut. Det eneste jeg ikke fikk til her var at jeg ville ta inn teksturene senere for å painte videre på de, og det gikk ikke. Det hadde gått om jeg hadde kun en space, men ikke med tre.
Paintingen foregikk ved at jeg picket farger fra referansebilder og paintet med stencils. Lagde tre forskjellige versjoner ved å bruke blending modes i Mudbox. Kunne gjort dette senere i Photoshop, men valgte altså å gjøre det i Mudbox.Gjorde senere en del små endringer på teksturene i Photoshop, mest fordi Mudbox ikke er helt perfekt og lager litt artifacts.
En ting jeg lærte meg til denne oppgaven var actions i Photoshop. Tanken på å gjøre noen av tingene som hadde med texture management å gjøre uten actions gjør meg svimmel. Fant også ut at man kan lage en droplet som er en liten exe man kan droppe bildefiler på. Den åpner da photoshop og utfører de actions man i forkant har definert for dropleten. Slik kunne jeg raskt gjøre endringer på teksturer som å flippe de vertikalt, endre filformat, og så videre. Veldig hendig.
Øynene lagde jeg ved å få en fotostudent til å fotografere irisen min med macrooptikk. Brukte dette til å lage en iristekstur. Lagde sclera ved å bruke Paint Effects til å lage blodårene, rendret dette og brukte det i Photoshop til å lage øyne. Ellers var det mia_material for å lage tårene under øyeeplet og hornhinnen.

Shading/look-development

Lærte meg Mental Ray sin subdivision approximation node å kjenne i løpet av oppgaven. Denne er veldig nyttig om man trenger mange subdivisions for å få displacement til å se bra ut. Da trenger man bare lowpolymeshen i scenen. Mye lettere enn å jobbe med en hipolymesh. Jeg slet lenge med å få til displacement og hadde en stund planer om å bruke en hipolymesh istedet for displacement. Jeg er glad jeg sto på dag og natt med å finne ut av dette, da det har ført til en bedre forståelse for displacement enn jeg hadde fra før. Jeg er nå mer trygg på å bruke displacement enn tidligere, og kommer til å bruke det på framtidige prosjekter hvor det trengs.
Skrev noen expressions i løpet av oppgaven. Dette har strengt tatt ikke mye med shading å gjøre, men jeg tar det med her fordi det var her jeg trengte det mest. Det er veldig godt at vi har lært litt MEL i løpet av året, da jeg nå skjønner det såpass greit at jeg kan skrive en expression for å forenkle oppgaver som er tidkrevende å gjøre manuelt. Et eksempel er at jeg skrev en liten linje som hele tiden passet på at alpha offset var korrekt i forhold til alpha gain.

mia_material_x er veldig nyttig har jeg erfart. Den har gode refleksjonsfunksjoner i forhold til Maya sine egne materialer. Jeg mener oppriktig at Maya sin rendering er hårreisende dårlig. Jeg mener at Maya burde ha native rendering som er konkurransedyktig. Det hadde ikke vært et stort problem hvis Mental Ray var godt integrert men det er det jo ikke. Bare se på Modo og Houdini hvor nyttig det er med en god og velintegrert renderer når man driver med shading, lys og look-dev. Jeg brukte mia_material på det meste, inkludert skin shaderen. Går mer inn på det etterhvert.
En ting jeg er veldig fornøyd med i Maya er hvordan man kan koble all slags noder sammen på kreative og smarte måter. Da jeg lagde skin shaderen på karakteren begynte jeg med å sette opp en scatteringnode hvor jeg satte opp en scatteringtype av gangen. Startet med kun back scatter, og da den så bra ut gikk jeg videre til front scatter (epidermal og subdermal). Da all scattering var på plass lagde jeg et nytt mia_material og tok outputen på SSS-noden inn i mia_material sin additional color. Slik får jeg det beste fra flere verdener. Man kan også få flere lag med refleksjoner eller spec på denne måten.

Lys og rendering

Jeg satte opp lys med spotlights og directional lights. Brukte quadratic falloff på disse. Det skal nevnes at jeg også brukte gamma correction på teksturene og en exposurenode på kameraet for å få korrekt gamma i renderen. Brukte også Final Gather for å få indirekte lys. Jeg lagde et par rendere i Vue for å få 32 bits spherical environment maps til refleksjoner og indirekte lys. Dette gjorde jeg istedet for å bruke foto fordi jeg da kunne selv avgjøre hvordan himmelen skulle se ut istedet for å være avhengig av vær og lys.
Rendret ikke mange pass, kun et masterpass og ambient occlusion. Trengte occlusion fordi Final Gatheren flater ut modellene litt. Lagde egentlig forskjellige pass til det endelige shotet, men det fikk jeg aldri rendret ut.

Effekter og diverse

Gresset på environmenten lagde jeg ved hjelp av maya fur. Gresset endte opp med å se troverdig ut på en stilisert måte, og definitivt bedre enn Paint Effects sin preset for gress. Jeg brukte imidlertid Paint Effects til planter og trær. De fleste av trærne ser rare ut (for store blader f. Eks), men noen få ser grei ut og mange av plantene går an å bruke. Jeg måtte imidlertid skifte ut shader på samtlige og justere fargene på de. Konverterte da først til polygoner. Paint Effects er et kult konsept og har hjulpet med mye men presetene er ikke gode. Neste gang jeg trenger gress eller planter og trær kommer jeg til å investere i Onyx Tree (speedtree blir for dyrt) eller noe lignende. Det ser bare ikke godt nok ut med de fleste av Paint Effects sine trær og busker. Noen av blomstene ser grei ut og noen få av trærne er brukbare, men totalt sett kan man ikke gjøre seg avhengig av Paint Effects til denne typen objekter.

Brukte også Paint Effects til å lage min egen preset for øyevipper og jeg brukte en preset for øyebryn. Disse tingene (samt hodehår som ble laget med Maya Hair) er ikke med i presentasjonen fordi de ble laget senere enn renderne der (renderne i presentasjonen er fra tidligere i prosessen.

Lyset fra lyktestolpene lagde jeg ved å bruke glow i en lambert shader og brukte incandescence for å bli kvitt det meste av skygger på lyspæren. Jobbet en del med å få til fog i scenen, og testet mange metoder. Det som ser ut til å være den beste metoden uten å involvere Nuke eller Fusion (som jeg ikke kan enda) er å bruke Mental Ray sin transmat/parti_volume til den totale fogen og så bruke fluids til å eventuelt lage tåke som reagerer med objekter. Jeg utforsket både dette og volume primitives men rendertidene skjøt såpass i været at det ble uaktuelt.

En ting jeg lærte meg på denne oppgaven var hvor nyttig instances er. Når man lager en instance istedet for en kopi får ikke det nye objektet en egen shapenode, men istedet for så bruker det shapenoden fra originalen. Da får man ikke den samme footprinten som hvis man hadde bare kopiert alt. Ulempen er at de nye kopiene kan ikke modelleres på utover det transformnoden kan gjøre (med mindre man gjør endringer ved hjelp av displacement). Dette er kanskje noe en mer ulineær workflow kan omgå (som i Max, Softimage eller Houdini). Jeg brukte dette på gjerdene, trærne og gravsteiner.

Konklusjon

Jeg har lært enormt mye av oppgaven. Jeg har fått fordype meg mer i hypershade, jobbet med paint effects en del, fordypet meg mer i Mental Ray enn før (blant annet i forbindelse med Approximation-noder), displacement, Z-brush, anatomi (har lært veldig mye jeg ikke visste om muskler, skjelettet og generelt om formene på kroppene og ansiktene våre) og om teksturering.
En litt bitter ting ved å lære så mye i løpet av en oppgave er at jeg nå kunne gjort oppgaven mye bedre. Sånn vil det vel alltid være, men det er likevel litt surt når jeg nå ser på oppgaven og vet at jeg ville vært kjempefornøyd for noen måneder siden men kunne gjort det bedre om jeg startet nå.

Nå ser jeg fram til en sommer med mye 3D-arbeid for så å starte på andre året på Idefagskolen.

Semesteroppgaven ferdig

Da var semester levert. Jeg har ikke nådd målene mine denne gangen, jeg fikk ikke rendret ut den ferdige karakteren på den ferdige environmenten. Det gikk sånn fordi jeg gikk for mye tilbake på ting midtveis i oppgaven. Jeg var ikke fornøyd med sculpten og modellen så jeg endte opp med å gjøre en god del på nytt. Dermed brukte jeg opp tiden jeg hadde satt av på slutten til å løse de eventuelle problemene. Og problemer ble det, så jeg tok en avgjørelse og satset på å levere et noenlunde pent produkt av det jeg kunne bruke av rendere.

Noen av problemene som dukket opp var at karakteren bare ikke så korrekt ut når jeg rendret sammen med environment. Jeg luket ut render settings, indirekte lys, direkte lys, diffuse innstillinger, displacement, normaler, gamma og flere andre faktorer som kunne skape problemet, men fikk det ikke til å bli bra.

Her ser man problemet tydelig. Karakteren går ikke inn i renderen godt nok. Her rendret uten FG og bakgrunn

Her ser man problemet tydelig. Karakteren går ikke inn i renderen godt nok. Her rendret uten FG og bakgrunn

Screenshot som viser arbeidet med den endelige komposisjonen jeg hadde tenkt å levere

Screenshot som viser arbeidet med den endelige komposisjonen jeg hadde tenkt å levere

Det jeg til slutt leverte var denne presentasjonen som viser karakteren. Ingenting av environmentarbeidet er med (unntatt noen rendere fra Vue som ble brukt til lyssetting og refleksjoner), men det er dokumentert.

 

 

 

Replace Object

Nesten litt skuffet nå, trodde jeg fant et behov i Maya som jeg ikke kunne finne et script for, men det viser seg at det alt går an å gjøre natively i Maya =) Jaja, finner sikkert på noe annet jeg kan skrive et script for en dag.

Det dreide seg om at jeg ville gjøre en del kopier av et objekt om til instanskopier. Instanskopier er mye greiere i viewporten (vet ikke hvor mye det har å si for rendertid) fordi alle kopiene deler shapenode. Med replace object i Maya kan man gjøre kopiene om til instancer.

Lagde øyevipper med paint effects. Man kan lage pressure mappings som også kan brukes til å endre forskjellige ting som  f eks lengde på tubes langs lengden av kurven.

Lagde øyevipper med paint effects. Man kan lage pressure mappings som også kan brukes til å endre forskjellige ting som f eks lengde på tubes langs lengden av kurven.

Noen revisjoner

Jeg blir sittende fast med enkelte ting som feiler og må løses. I dag var displacementmapsene vrange på steder hvor jeg ikke hadde sjekket (siden det tar lang tid å rendre kan jeg ikke rendre haugevis med frames hver gang jeg gjør en endring) så jeg måtte fikse det. Poster også fordi jeg har fikset et par andre småting, samt laget tapebitene på kroppen. Disse er teksturert med procedurals. Det ser sikkert bedre ut når jeg rendrer med full kvalitet (oversampling og oppløsning).

Har fortsatt mye å gjøre før jeg er ferdig, og jobber hele dagen hver dag. Håper jeg får gjort alt før jeg må begynne å kutte hjørner.

Venstresiden

Venstresiden

Høyresiden

Høyresiden

Fronten

Fronten

Baksiden

Baksiden

Øye

Øynene har jeg konstruert av fire deler. Jeg modellerte en øyeball av en nurbs sphere, duplikerte den og scalet opp kopien bittelitt. Den første (minste) blir det hvite i øyet og jeg fjerner det framste ved hjelp av cutout opacity i mia_material_x. Innenfor dette “hullet” ligger irisen som er et polyobjekt. Bak irisen ligger det et polyobjekt for å hindre at man ser innsiden av øyet.

Geometrisetupen

Geometrisetupen

På duplikatet (den største) bruker jeg en blinn som er transparent for å simulere hinnen utenpå øyet. Vil gjerne bruke mia_material_x fordi det er veldig gode refleksjonsfunksjoner på den, men fikk det ikke til enda. Håper det ordner seg i morgen.

Slik blir det med en blinn..

Slik blir det med en blinn..

...men når jeg bruker mia_material blir det ikke bra. Man kan se "sperre"-geometrien bak iris, men ikke selve irisen. Aner ikke hvorfor, prøver å finne ut av det. Hvis ikke det blir bra, bruker jeg bare en blinn.

...men når jeg bruker mia_material blir det ikke bra. Man kan se "sperre"-geometrien bak iris, men ikke selve irisen. Aner ikke hvorfor, prøver å finne ut av det. Hvis ikke det blir bra, bruker jeg bare en blinn.

Slik ser hypershaden ut i øyeblikket

Slik ser hypershaden ut i øyeblikket

På torsdag fikk jeg hjelp av Daniel på fotolinjen. Han fotograferte øynene mine med macrooptikk og tilpasset belysning slik at jeg får minimalt arbeid med å painte ut highlights og refleksjoner. Jeg bruker altså mine egne øyne som basis for teksturene på irisen.

Jeg brukte puppet warp tool for å plassere fotomaterialet på UV-snapshoten. For å teksturere scleraen lagde jeg et UV-snapshot og tok det inn i photoshop. Jeg lagde en paint effects brush som minnet om blodårer, rendret og tok det med inn i PS. Jeg lagde der et color map og et bump map. I morgen lager jeg et bump map til for å illudere den noe ruglete overflaten på hornhinnen.

Slik er det nå. Det er ikke så ille, men skulle gjerne fått mia_material til å funke med transparency

Slik er det nå. Det er ikke så ille, men skulle gjerne fått mia_material til å funke med transparency

Fikk løst displacementproblemene

Er veldig fornøyd i dag. Tok en studiedag og fikk jobbet skikkelig mye med displacementproblemet. Jeg fikk et resultat som er ganske likt hiresmeshen. Det siste problemet jeg hadde var at jeg fikk sprekker i UV-sømmene.

Slik så modellen ut før jeg fikk løst problemet med sømmene

Slik så modellen ut før jeg fikk løst problemet med sømmene

Hofteområdet med sømproblemer

Hofteområdet med sømproblemer

Fikk løst dette ved hjelp av miExportCCMesh. Dette er et attributt som kan legges til approximationnoden. Rendertiden på denne testen ble doblet, men det er det verd for å kunne få bruke displacement. Har ikke testet hvor mye jeg har lagt til på den totale rendertiden av karakteren.

Jeg bruker nå 32-bits dispmaps, og det fungerer ganske godt. De går, som alle andre maps inn i en layered texture og inn i displacementnoden. Bruker også subdiv approximation istedet for mesh smoothing. Dette må vel være den mest produksjonsvennlige løsningen i mental ray.

Tok et screenshot av shadertreet for zombien. Dette er ikke inkludert tenner, tunge og øyne. Dette kommer i tillegg.

Hypershaden slik den er nå for zombien. Dette er i lookDev-dokumentet mitt. Kommer til å eksportere teksturene derfra etterhvert.

Hypershaden slik den er nå for zombien. Dette er i lookDev-dokumentet mitt. Kommer til å eksportere teksturene derfra etterhvert.