Visa ett inlägg
Gammal 2018-06-25, 00:51   #66
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 715
Standard

I vanlig ordning när jag bygger så är det något med datorn som inte fungerar. Låter det vara osagt om det visar på hur dåligt datorer fungerar i allmänhet, eller hur lång tid det tar för mig att bygga. Denna gången har jag varit utan fast internet i över två månaders tid. Som tur är har jag ritningar och bilder sparade offline, så det har gått bra att i maklig takt bygga vidare ändå. Nätverket är i alla fall återställt nu, om än temporärt. Vi får se hur länge det håller.

Sedan sist har jag delat upp hytten i två delar, en med de stora Sa-specifika delarna och en med alla vanliga reglage som finns i de flesta ånglokshytter. Jag har i princip UV-mappat klart båda delarna, vilket i runda slängar alltså handlar om 70000 trianglar.

Jag hade dessutom lovat att berätta om hur jag jobbar med material, texturer och framtidshoppet PBR - Physically Based Rendering.
Som jag redan nämnt flera gånger använder sig PBR, (specifikt metalness-workflowet som är ett av de vanligaste sätten att jobba med PBR) av flera texturer, många fler än vad vi har varit vana vid att använda. Tidigare hade vi en diffuse texture där vi klämde in allt: färger, smuts, statiska skuggor, fejkade reflektioner osv.
Eventuellt kunde man även ha en normal-map för att skapa ojämnheter i ytan, vilket är något jag personligen aldrig använt.

I PBR har vi istället flera texturer, framförallt dessa fyra:
* Albedo (ibland felaktigt kallad diffuse)
* Normal (eller bump)
* Roughness
* Metalness

Som jag diskuterat tidigare är reflektioner otroligt viktiga för realism. Därför låter man helt och hållet rendermotorn ta hand om dessa och i sin albedotexture som kan liknas med det vi är vana att kalla diffuse, målar man enbart in färgerna, utan några skuggor eller reflektioner. Jämför med bilden jag postade ett par sidor tillbaka på sidotanken; på bilderna är albedotexturen helt enfärgad i en mörk grå nyans! Hela materialets karaktär skapas av reflektionen vilken blir levande med ojämnheterna från bumpmappen i det fallet! Sedan skulle man lägga till oljefläckar och liknande genom att måla i roughness och lite i albedo och normal.

Som sagt tidigare så använder jag mig för tillfället av bumpmaps istället för normalmaps. En bumpmap talar om hur relativt sett högt en yta sticker ut. Notera ordet relativt, all höjd i en bumpmap är relativt andra delar i texturen. En helsvart eller en helvit bumpmap ger alltså exakt samma resultat: en plan yta. Det är gradienter och skarvar i bumpmappen som ger lutningar och kanter. En normalmap innehåller i princip samma information som en bumpmap, men är kodad i RGB-formatet istället för gråskala och visar själva lutningen som pixeln har relativt ytans normal. Det är med andra ord en riktning (vektor på matematiskt språk) kodad som en färg, då både färg och riktningar i en 3D-rymd har just tre dimensioner. Både bump och normalmaps innehåller på sätt och vis samma information, men normalmappen tar mer plats då den innehåller två extra fägkanaler. Däremot är normalmaps snabbare för datorn att arbeta med, då lutningen redan är uträknad och inkodad i texturen. Därav använder man oftare normalmaps i realtidsmotorer. Men som jag konstaterat tidigare är det mycket enklare att måla bumpmappar som beskriver ojämnheter i termer av höjd istället för vektorer i ett tredimensionellt tangenrum till ytan, kodade som normaliserade färger. Att konvertera en bumpmap till en normalmap som Trainz använder är inga svårigheter, det finns flera gratisprogram som stödjer detta.

Det första steget i mitt nuvarande workflow är vad jag vill kalla makroskopiska ojämnheter. Jag skulle vilja dela upp ojämnheter i ytorna i tre kategorier. Detta är ett högst personligt tankesätt och inget som lärs ut allmänt vad jag vet. Kategorierna som jag ser det är:
* Stora ojämnheter - Huvuden på nitar/skruvar och kanter på plåtar, etc. Ritas i bump/normalmappen.
* Mellanstora ojämnheter - Bucklor/ojämnheter i ytor, grov struktur på material (ex. gjutjärn), etc. Ritas mest i bump/normalmappen.
* Mikroskopiska ojämnheter - ojämnheter på molekylnivå som bestämmer reflektionen hos ytan. Skiljer till exempel en vitmålad plåt (ganska skarpa reflektioner) från papper (väldigt otydliga reflektioner).

Det kan kännas lite märkligt att gå ned på molekylnivå, men det är faktiskt nödvändigt. Vi behöver inte modellera ut molekylerna - det skulle kräva alldeles för stora beräkningar - utan vi använder fysikaliska och statistiska modeller för detta. Tänk på två plana ytor, en spegel och ett papper. Båda är till synes helt platta, men spegeln har en väldigt tydlig reflektion, medan pappret knappt verkar reflektera alls. Tittar man med mikroskop på ytorna kommer man att märka att pappret visst reflekterar riktigt bra, bara att ytan är mikroskopiskt skrovlig - tänk en mikroskopisk variant av lustiga huset - vilket resulterar i att ytan för oss inte alls har en tydlig reflektion. Ljuset studsar istället helt ostrukturerat åt alla möjliga håll efter att ha träffat pappret. Detta modellerar man med roughness, vilket jag kommer prata om någon annan dag.

I den exteriöra modellen av loket är jag ganska klar med första kategorin och har börjat så smått på den andra kategorin. Svårigheten är att vissa saker kan kräva att man målar i flera texturer synkroniserat. Exempelvis repor i målad metall, där blank metall lyser igenom i repan. Då ska repan målas in i metalness då målad metall är dielektriskt men blank metall är metalliskt; den ska målas i roughness för att blank metal har skarpare reflektion än målad metall; i albedo för att den målade metallen ska ha rätt färg och slutligen i bump/normalmappen för att få till en liten kant på repan och kanske några mindre ojämnheter i den blankskrapade metallen. Det är det här som är svårigheten med PBR, att måla och tänka i flera lager.

Men först tar vi ett steg tillbaka till första kategorin med de stora ojämnheterna då vi enbart måste bry oss om bump-/normalmappen. Jag börjar med att skapa fyra tomma texturer, dvs, albedo, bump, roughess, och metalness, alla med standardvärden. Albedo, bump och roughness får en mellangrå nyans och metalness helsvart, dvs dielektriskt/icke-metalliskt, vilket det mesta är.
Bumpmappen målar jag med 50% grå för att både kunna skjuta in saker (mörkare än mellangrå) eller få saker att sticka ut (ljusare än mellangrå). Om jag har en yta där saker enbart ska sticka ut kan jag lika gärna grundmåla den med helsvart så har man mer nyanser att styra höjden med. Som sagt är det de relativa ljushetsskillnaderna mellan två intilliggande pixlar som används, inte nyansen i sig. Sedan målar jag ut de stora detaljerna, vilket i hytten har varit två saker: huvuden på nitar/skruvar samt kanter på plåt. Plåtkanter får man till genom att måla den plåten som ligger över med ljusare grå färg (eller den under med en mörkare). Nitarna och skruvarna ritar jag ut för hand (ett riktigt pill-göra, men det ger verkligen resultat!) som klarvita prickar av rätt diameter. Därefter ser jag till att mjuka till nitarna så att de går över till den färgen som den mellangråa bakgrunden har. Det ger dem ett rundare och mjukare utseende. Skruvskallarna låter jag vara helvita med skarpa kanter, då de ju har skarpa kanter. Vissa skruvhuvuden är redan modellerade, så det gäller att överväga vilka skruvar som ska modelleras och vika som bump/normalmappen ska ta hand om. I regel så behöver man inte modellera nitar, då dessa inte sticker ut särskilt mycket och drar många polygoner per nithuvud, vilket ofta kostar mer än det smakar. För att kunna kolla resultatet har jag satt upp ett PBR-material i Blenders inbyggda path-tracer renderingsmotor Cycles. Det tar ett par sekunder för bilden att konvergera och bli tillräcklig brusfri för att man ska se resultatet, men det visar tydligt hur resultatet blir med en riktigt bra renderingsmotor. Bilderna nedan har tagit 5-15 minuter styck att räkna fram. Nästa version av Blender (version 2.8) kommer med en ny viewport kallad Eevee som är byggd med modern spelmotorteknik där man kan rendera PBR-material i realtid och vilken stödjer långt mycket mer features än vad som lär finnas i nästa Trainz. Detta kommer verkligen att underlätta texturerande av spelmodeller, då man snabbt kan se resultatet i Blender utan att behöva dra igång Trainz! (Se exempelvis följande klipp ifrån Eevee i prealpha-versionen av Blender v2.8: https://www.youtube.com/watch?v=-mxJzQ9Jquk, allt i videon är i realtid! )

Så här följer två före/efter bilder med fram och bakskärmen i hytten. Först utan bumpmap, sedan med bumpmap.
Kom ihåg att det är exakt samma geometri vi kollar på! Det är exakt lika många trianglar på båda bilderna, enbart bumpmappen skiljer.

WIP21_interior_no_bump.jpg
Utan bumpmap.

WIP21_interior_bump.jpg
Med bumpmap. Ett utsnitt av bumpmappen syns infälld i bilden.

WIP20_interior_no_bump.jpg
Utan bumpmap.

WIP20_interior_bump.jpg
Med bumpmap.

Öppna bilderna i var sin flik och bläddra fram och tillbaka så är det lättare att se skillnaden.

Det var allt för denna gången, återkommer med hur man skapar karaktären till de olika materialen.
__________________
-k-
korvtiger besöker inte forumet just nu   Svara med citat