Visa ett inlägg
Gammal 2018-08-01, 01:22   #69
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 716
Standard

Vi går vidare i textureringsarbetet för att få till lite färg och karaktär på materialen i hytten.

Min tanke är att dela upp textureringsarbetet i tre steg:
1. Makroskopiska, geometriska detaljer. (Nitar, plåtkanter)
2. Material (Ojämnheter i gjutjärn, struktur och färg hos trä och metaller...)
3. Vädring (Smuts, matta ned ytor, slitage)

Just nu är det första steget till största delen klar på interiören, vilket vi såg i förra posten i denna tråd. Jag har nu börjat gå över till nästa steg.
I detta steg ska vi se till att alla platta ytor faktiskt ser ut som det material de är gjorda av, att plåtarna på pannan ska se ut som målade plåtar, att injektorn ska se ut som att den är gjord av gjutjärn med bronsfärgade detaljer. Problemet nu med PBR är att vi inte bara kan ta ett fotografi och klistra in i vår textur som vissa har gjort tidigare (kallat photo-texturing). Då får vi med statiska reflektioner som vi istället vill att grafikmotorn skapar åt oss. Här finns det lite olika vägar att gå. Antingen kan man ta sitt fotografi av en ren yta och använda mjukvara för att splittra den bilden till albedo, roughness, bump/normal, metalness osv. Exempel på gratis programvara för det är AwesomeBump (awesomebump.besaba.com/) vilket är det program jag använder för att konvertera mellan bump- och normalmaps. Lite ointuitivt, men det fungerar. Ett annat alternativ är att använda färdiga PBR-texturer. Där man får i regel upprepningsbara, färdiga texturer för olika material med alla dess maps. Detta är sättet jag till störst del använder mig av. Ett tredje alternativ är procedural textures, där man genererar (framförallt bump/normalmaps) genom att generera brus med hjälp av matematiska modeller (matematiken behöver man inte kunna något om, man behöver bara lite fantasi och tid) och sedan modifiera det på olika sätt för att återskapa till exempel ojämnheterna hos gjutjärn. Fördelen med detta tillvägagångssätt är att man får en oändligt stor "textur" som inte har några upprepningar i sig eftersom datorn genererar den "on-the-fly", så stor som behövs. Däremot är det en del fippel med att få det att fungera och bli snyggt. Sådana texturer kan man göra antingen med brusfilter och levels/curves verktygen i Photoshop eller motsvarande eller med Cycles i Blender med hjälp av nodbaserade material som sedan kan bakas ned till en vanlig textur. Ett exempel på detta i Blender/Cycles finns här: https://www.youtube.com/watch?v=lD1iGWISa2k . Som sagt så använder jag mig framförallt av färdiga PBR-texturer. Det finns flera sidor för detta på nätet som kostar mer eller mindre pengar. Själv använder jag bara gratissidor, framförallt texturehaven.com (helt gratis, ingen registrering krävs), www.textures.com (kräver registrering, begränsad upplösning och begränsat antal texturer nedladdade per dag) och www.poliigon.com/ (Enbart utvalda texturer är gratis, kräver registrering).

Under arbetets gång har jag upptäckt en negativ sida med att använda bumpmap istället för normalmaps. Det är att bumpmappens effekt är ganska odefinierad. Det finns inget som säger hur stort i verklig skala på modellen som en nyansskillnad i bumpmappen visar. Om man vill ha en 1 cm hög kant, hur många nyanser är det liksom? Detta får modellskaparen tillsammans med renderingsmotorn själva definiera. I Blender/Cycles som är rendermotorn som bilderna ni ser i denna tråd kommer ifrån kan ställa in det genom en skalningsfaktor. Men bumpmappen har också en annan negativ sida jämfört med normalmaps, upplösningen i höjdled. Bumpmappen är en svartvit bild med 8 bitars djup, alltså har vi 256 nyanser att leka med. Detta är inte särskilt mycket. Tänk er att vi vill kunna skapa en plåtkant med 1 cm tjocka plåtar och på den yttersta plåten vill vi ha en 1 cm hög nit. Då behöver vi ställa in rendermotorn på att tolka de 256 nyanserna som åtminstone 2 cm. Det innebär att den minsta detalj vi kan återskapa i bumpmappen är i storleksordningen 0.1 mm. Det kanske låter litet, men när man kommer till materialsteget som jag är på nu så är det för grovt. Med normalmaps kommer man runt detta problem genom att man inte definierar det i termer av höjd, utan istället beskriver ytans lutning i förhållande till polygonens yta, vilket är väldefinierat. Däremot tappar man begreppet höjd i normalmappen, varför man ibland använder både normal- och bumpmaps tillsammans, även om bumpmappen då går under benämningen heightmap. Detta används i kommande Trainz för parallaxmapping som jag länkat till någon video om i någon annan tråd.

De flesta PBR-material levereras med nomalmaps och inte bumpmappar. Så efter lite experimenterande har jag kommit fram till att det är enklare att konvertera min nuvarande bumpmap med alla handritade nitar till en normalmap och arbeta vidare än vad det är att konvertera alla PBR-texturers normalmaps till bumpmaps och fippla för att få skalan rätt för att sedan konvertera tillbaka hela den färdiga bumpmappen till en normalmap. Jag slipper ju inte ifrån konverteringen till normalmap hur jag än gör, eftersom Trainz använder normalmaps.

----------

Jag tänkte visa med två bilder hur två av parametrarna i PBR fungerar, nämligen roughness och metalness.
Först har vi metalness som är en gråskaletextur som nästan enbart skall bestå av helsvarta (0.0) eller helvita (1.0) värden. Svart betyder dielektriskt (icke-metalliskt) och vitt betyder metalliskt. I verkligheten är alla material antingen eller, men inom PBR och 3D tillåts gråskalenyanser, för att jämna ut övergångar mellan material. Här visas en sfär med en textur som antingen är helt svart eller helt vit, vilket alltså ger en dielektrisk respektive metallisk yta.
metalness.jpg

Roughness är alltså en modell för de mikroskopiska ojämnheterna som finns i alla material. Detta är också en gråskaletextur där helsvart (0.0) betyder att ytan är väldigt jämn och ger en tydlig reflektion. Helvit betyder å andra sidan att en inkommande ljusstråle har lika hög sannolikhet att reflekteras åt vilket håll som helst, vilket ger en väldigt diffus yta med otydliga reflektioner. Här visas en dielektrisk sfär med en helröd albedotextur med roughness från 0.0 till 1.0. Med roughnesstexturen styr man var i texturen man vill ha vilken diffushet.
roughness.jpg

Ifall det inte varit tydligt tidigare så tillåter alltså PBR att man har i princip ett enda material i 3D-editorn som används på alla delar av modellen, där varje dels materiella karaktär (som metall och trä) styrs med hjälp av texturerna. Man behöver enbart olika material om man har speciella saker som glas eller självlysande objekt.

Mitt tillvägagångssätt vid textureringen är följande: Jag har bakat ned UV-mappen till en textur i Blender. Denna använder jag sedan för att se var alla ytor är mappade i min 2D-grafikeditor. Jag markerar de delar av texturen jag vill måla med ett material där, till exempel alla plåtar på pannan. Jag letar sedan fram PBR-texturer som liknar det material jag vill återskapa. Jag plockar in de mappar jag behöver (albedo, roughness och normal, ibland även metalness) och skalar ned dem så de passar den yta de ska appliceras på. Ofta behöver jag upprepa texturen för att detaljerna ska bli tillräckligt små. Därefter använder jag masken för att maska bort alla delar av PBR-mapparna som jag inte behöver.

Efter att ha applicerat material på en del saker så ser det ut som följer:
WIP22.jpg
WIP23.jpg

Är långt ifrån nöjd, men det är en början i alla fall. Just nu ser materialen väldigt rena och skinande ut. Detta är något som jag måste åtgärda, vilket jag tar i det sista steget, nedsmutsningen. Om man använder sig av kraftfulla PBR-program som Substance Painter så kan man låta programmet själv skapa smuts med hjälp av olika verktyg. Man kan med ett enkelt musklick få kanter på modellen att bli skavda, eller skapa ett virtuellt regn för att räkna ut vilka ytor som blir smutsiga av just regn eller andra nedfallande partiklar. Vissa sådana saker går att göra med hjälp av Blender, men kräver betydligt mer manuellt arbete. Jag återkommer nog till det i en framtida post.

Sedan har jag börjat fundera lite på storlek på texturer. Hittills har mina modeller hållit sig till texturer av storlekarna 1024x1024 och 2048x1024 på passagerarvagnarna. Tänkte att jag drar till på stort för detta projekt och körde till att börja med på två 2048x2048 texturer till interiören, men har nu hoppat upp till 4096x4096 på båda för att man ska kunna läsa alla små texter på skyltar och manometrar. Tänker att det är lättare att förminska än förstora texturer i efterhand. Dagens grafikkort börjar ju få så mycket minne att man utan problem kan hantera denna storlek på texturer till saker som förekommer i ental på en bana. Har dock märkt att datorn börjar knorra lite över att editera bilder i Photoshop med den storleken och mer än 140 lager samtidigt som man har lite andra program igång i bakgrunden. 8 GB RAM-minne börjar bli lite snålt... Den exteriöra modellen har fortfarande 2048x2048 texturer. Funderar på om man borde gå upp i storlek även här för detaljrikedomens skull, även om det blir en del arbete med att göra om alla skyltar och texter.
__________________
-k-
korvtiger besöker inte forumet just nu   Svara med citat