Visa ett inlägg
Gammal 2017-09-09, 14:15   #34
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 716
Standard

Som utlovat en i en annan tråd, en liten utläggning om material och framtiden med PBR (Physically Based Rendering).

Börjar närma mig den punkt där jag fastnade i mitt förra ångloksprojekt, nämligen material- och textureringssteget. Denna gång är jag dock beväpnad med en arsenal av ny kunskap och nya verktyg som förhoppningsvis kommer att hjälpa mig.
Den gången så tänkte jag, "TGOJ-lok, de är ju gröna! Vi målar texturen till tankarna och hytten helgrön och slänger på TGOJ-loggan så blir det säkert bra!". Men det såg rent ut sagt fördjävligt ut.

Varför? Låt oss kika på hur motsvarande skulle se ut på Sa 1277:
WIP9_material_noref.jpg

Detta är alltså enbart den diffusa komponenten, bara en nära helsvart textur utan några som helst detaljer, förutom SJ:s väldigt vackra monogram som de använde fram till 1942.
Men det ser inte realistiskt ut alls!

Och anledningen förklarade jag i min utläggning om PBR i förra tråden; alla, ALLA material har en reflekterande komponent! Och i detta fallet är det ju målad plåt vilket innebär att materialet är dielektriskt och alltså ska ha både denna diffusa komponent med färgen i (även om den är mest svart i detta fallet...) och en reflekterande komponent.

Detta hade jag delvis fattat när jag byggde mina plåtvagnar. Jag visste att det saknades något som reflekterades i plåten, det såg man tydligt om man jämförde leveransbilder på blankpolerade vagnar med mina helbruna modeller. Trainz har sedan flera versioner tillbaka ett visst stöd för att reflektera saker med olika metoder som jag aldrig använt, men jag beslöt att lösa det genom att rita in statiska reflektioner i texturen istället. (varför lära sig något nytt när man får chansen liksom? ) Jag tog en panoramabild av ett landskap, gjorde den suddig/oskarp och applicerade den på min helbruna textur på vagnssidan och såg till att den var väldigt subtil. Resultatet blev ganska bra om jag får säga det själv! Men det är ju fejk, så det ser bara bra ut på bilder. Om man börjar röra kameran så ser man hur statisk reflektionen är och har man bilder från höga eller låga vinklar ser man att horisonten i reflektionen inte är korrekt, då den borde höjas och sänkas med kamerans höjd.

Men eftersom det går redan nu i Trainz att ha mer korrekta reflektioner, vilket kommer bli ännu bättre i framtiden, låt oss nu lägga till en riktig reflektion på modellen för att se hur det ser ut! Den diffusa texturen är precis samma som i första bilden, men jag har ställt in materialet på att ha en reflektiv komponent också, alltså är detta ett korrekt dielektriskt material. De diffusa och reflekterande komponenterna blandas på ett fysikaliskt korrekt sätt (något som kommer med PBR till Trianz) baserat på något som kallas Fresnel-effekten (uttalas Frenell, efter en fransk fysiker Augustin-Jean Fresnel som bland annat gjort sig känd i järnvägsvärlden som uppfinnare av de linser vi använt i ljussignaler de senaste hundra åren )

Detta ser ut såhär:
WIP10_material_ref.jpg

Stor skillnad! Det ser fortfarande inte ut som ett ånglok, men det ser klart realistiskare ut! Lite åt plasthållet och pannan ser ut att vara blankpolerad, målad metall. En modell av ett plastmodellsånglok kanske?

Nästa steg mot realism är att använda de åtskilliga timmar jag ägnade åt att peta dit varenda synlig (och osynlig...) nit på loket genom att göra om texturen till en korrekt bumpmap.
En bumpmap är alltså en gråskaletextur där ljusa partier markerar att punkten är upphöjd och mörka partier att den är nedsänkt. Genom att jämföra intilliggande pixlar kan rendermotorn räkna ut en lutning på ytan och använda den för att få till små höjdskillnader och ojämnheter på hyfsat plana ytor. Här används det för att få nitarna att dyka upp.
Jag har också kombinerat bump-texturen med mina handritade nitar med att lite hastigt slänga på en lätt vågig yta för att ge sken av bucklig plåt.

Resultatet av detta ser ut som följer:
WIP11_material_ref_bump.jpg
Voilà! Plötsligt känner vi stenkolsdoften i näsan! Detta är hur ett ånglok ser ut! För reflektioner är små ojämnheter i ytan väldigt viktiga, de gör otrolig skillnad!

Vidare kan man förbättra detta ytterligare genom att lägga till smutsfläckar och med en till textur styra roughness, alltså hur skarp reflektionen är. Smuts är ju också dielektriskt men har en mycket otydligare reflektion. Jag kommer också spendera lite mer tid på att få bumpmappen snygg genom att jämföra bucklighet och struktur på förebilden och försöka efterlikna det. Sedan måste bump-mappen konverteras till en normal-map vilken innehåller samma information, men är snabbare för datorn att jobba med då lutningen är färdigberäknad och nedskriven som färger i en texture. Jag ritar dock bumpmappen istället för en normalmap direkt för att det är enklare att tänka i termer av höjd än tredimensionella koordinatsystem mappade som färg...

Sedan kommer ju resultatet i simulatorn inte att bli lika fantastiskt som dessa bilder är, som är framräknade av en riktig pathtracer. Dessa tog en minut att räkna fram, men hyfsat likvärdiga resultat borde gå att få i Trainz i framtiden i realtid!
__________________
-k-

Senast redigerad av korvtiger den 2017-09-09 klockan 19:29.
korvtiger besöker inte forumet just nu   Svara med citat