![]() |
2 bifogad(e) fil(er)
Jag har så smått tagit upp detta projekt igen. Jag har mest spenderat tiden med att försöka hitta ett bra workflow för texturering, men är inte helt nöjd. Problemet är att ett ånglok är så stor och komplext att det blir lite för tungt för det workflow jag har kikat på. Under tiden så började jag experimentera med att exportera med hjälp av FBX till TRS2019 som jag skaffade för ett par månader sedan. Detta var helt nytt för mig och det finns fortfarande lite konstigheter som händer längs vägen, men på det stora hela fungerar det bra. Jag har lyckats exportera hela loket inklusive boggier. Och när man väl är inne i simulatorn är ju steget inte långt till att man vill se skapelsen rulla, bara för att bli besviken på att hjulen står helt still.. Dags för animering alltså! :D
Jag ber om ursäkt på förhand för en lång utläggning om Blender-tekniska saker med mycket ånglokstekniska facktermer. För er som inte är insatta så får ni väl kolla på bilderna istället! ;) SJ Sa har ju en slidstyrning av system Walschaert (uttalas "wallskart") även benämnd Heusingers eller Heusinger von Waldeggs slidstyrning. Jag har experimenterat med att animera Walschaerts slidstyrning tidigare i Blender och kollat på hur andra på internationella Trainz-forumet har gjort det. Dock så har jag varit besviken då de flesta valt att förenkla (eller fuska om man så vill...) och approximera vissa delar av rörelsen. Jag har inte kunnat hitta någon som lyckats animera rörelsen på ett tillfredsställande sätt i Blender, så jag började experimentera med det själv. Man kan dela upp Walschaerts slidstyrning i två delar: dels de delar som drivs direkt ifrån drivhjulet som är direkt kopplade till drivhjulets rotation; och dels själva slidstyrningen som är beroende av den första delen och av fyllningsgraden som styrs av föraren. Den första delen som bara är beroende på drivhjulen är ganska trivial att rigga och animera. Dels är det kolvrörelsen med kolvstången och dels är det kulissens rörelse. Båda dessa kan riggas på lite olika sätt, men alla borde ge samma resultat, inga konstigheter. Den andra delen däremot, själva slidstyrningen är mer komplex, särskilt på lok med Walschaerts slidstyrning. Det första som jag tänkt på som många andra väljer att förenkla är hur rörelsen från tärningen i kulissen och rörelsen från tvärstycket vävs samman. Vad man gör är att man begränsar rörelsen av kopplingen mellan försprångsstången och tärningsstången till att bara vara horisontell, vilket förenklar hur man riggar tärningsstången. Detta resulterar dock i att slidstången börjar att röra sig upp och ned på samma sätt som den punkt man fixerat horisontellt borde ha gjort. Eftersom avståndet mellan slidstången och tärningsstångens infästning i försprångsstången är ganska kort, så märker man bara av denna rörelse om man studerar slidstyrningen mer noga (Se vänstra bilden i animationen nedan). Dessutom kan man dölja det ytterligare genom att låsa slidstångens rörelse i horisontell led, så att slidstångens infästning i försprångsstången egentligen bryts, vilket märks ännu mindre (Se mittenbilden i animationen nedan). Men ni som känner mig förstår att jag inte skulle nöja mig med sådana approximationer. Egentligen så är ju försprångsstången fast sammanbunden med slidstången och kan därför inte röra sig i vertikalled (i fästpunkten med slidstången), utan bara horisontellt, samt rotera kring fästpunkten i slidstången. Slidstångens position och den vinkeln som försprångsstången intar ska drivas ifrån tvärstyckets rörelse, samt ifrån kulissen. https://i.imgur.com/ciYGt2h.gif Från vänster: 1. Försprångsstången och tärningsstångens koppling är låst i horisontalled längs grön axel (notera hur slidstången rör sig upp och ned något) 2. Samma som den första, men med slidstångens rörelse låst i horisontalled i blå axel (notera hur kopplingen mellan försprångsstång och slidstången inte hänger ihop) 3. Korrekt beteende enligt min lösning (notera att försprångsstången och tärningsstångens koppling rör sig upp och ned på ett korrekt sätt) Detta visar sig vara ganska svårt att få till i Blender, vilket ledde mig till att generalisera problemet och fråga om hjälp på ett Blenderforum. Jag illustrerar problemet med följande bilder: Bifogad fil 80194 Bifogad fil 80195 I problemet så vill jag styra punkterna A och E och få Blender att räkna ut positionerna för B, D samt för C, där C enbart får röra sig horisontellt (längs med X-axeln i illustrationen). Låter som ett enkelt problem va? Tydligen inte. Jag diskuterade och bollade idéer med expertisen utan att få något bra sätt att lösa det på. Så jag började fundera på om man kunde formulera det hela som ett Constraint Satisfaction Problem (CSP: https://en.wikipedia.org/wiki/Constr...action_problem), alltså ett ekvationssystem med massor av matematiska villkor som måste vara uppfyllda, i detta fallet: length(A, B) = en konstant length(B, C) = en konstant length(C, D) = en konstant length(D, E) = en konstant length(B, D) = en konstant samt där x och y för A och B är kända (eftersom jag själv har positionerat dem) samt att y för C är känd. Med dessa ekvationer plus några begränsningar för att hjälpa till med det hela (B_x < A_x t.ex.) borde det gå att lösa systemet och ställa upp en ekvation för C_x, enbart beroende på A och Bs positioner. Denna ekvation skulle jag sedan kunna använda mig av i Blender för att positionera en Empty för punkten C och driva den ifrån positionerna för A och B. Sedan skulle det vara trivialt att sätta upp en eller två armaturer med inverse kinematics (IK) för att få till rörelsen A->B->D->E (Alternativt en för A->B->C och en annan för E->D->C). Jag började att försöka lösa detta ekvationssystem. Efter två sömnlösa veckor och fem fullklottrade papper så insåg jag att det faktiskt går att lösa ekvationssystemet, men att det skulle bli ett så komplicerat uttryck för C_x att jag inte kände att det var rätt väg att fortsätta. |
1 bifogad(e) fil(er)
(Fortsättning från förra inlägget p.g.a. att jag nådde gränsen för max antal tecken.. :D)
---- Det andra som folk brukar förenkla (antagligen på grund av bristande kunskap om slidstyrningar ;)) är att låta tärningens position i kulissen vara fix och driva tärningsstångens rörelse därifrån. Men detta är inte helt sant. För om man väl börjar kika noga på ånglok i rörelse (eller som jag, detaljgranskat och lekt så mycket med att rigga slidstyrningen att man insett att så måste vara fallet) så inser man att tärningen faktiskt rör sig något upp och ned i kulissen under ett drivhjulsvarv. Detta beror på att tärningsstången hänger ihop med omkastningsveven genom lyftlänken. Omkastningsvevens position är fix, den bestäms med hjälp av omkastningsveven inne i hytten och låses fast med en hake. Det gör att hela tärningsstångens rörelse blir begränsad av att den är upphängd i lyftlänken. För att allt ska fungera måste därför tärningen röra sig något i kulissen för att kompensera denna låsning. Detta började jag att hitta en lösningsväg på genom att jag insåg att man borde kunna driva tärningsstångens rörelse från kulissens teoretiska mittpunkt, istället från tärningens position i kulissen. Så istället för att armaturens första ben utgår ifrån en punkt på kulissen som de flesta verkar göra, så börjar första benet i den teoretiska mittpunkten till kulissbågen och går sedan till tärningen och därefter vidare till tärningsstången. Detta var en bra start, men sedan fastnade jag med samma problem som ovan, att jag på något sätt måste begränsa tärningsstångens rörelse på mitten av ett ben, likt hur försprångsstången B-D begränsas av punkten C som ligger mitt på benet. :( Efter att ha övergett idén om att lösa det generella problemet med ekvationssystem började jag istället utforska Blenders verktyg för IK och insåg att det faktiskt fanns verktyg för att låsa ett bens rotation i förhållande till dess förälder, samt att man kan ha flera IK-kedjor i samma armature. Detta tillsammans med en idé om att man kan approximera punkten C:s horisontellt låsta rörelse som en cirkel med tillräckligt stor radie fick alla bitar att falla på plats. Min lösning på det generella problemet ovan blir alltså: * Skapa en armature med ben A->B->C->D->E * Lägg till en IK constraint på D->E med en Empty som target * Lägg till en IK Lock på benet C->D så att B->C->D alltid hänger ihop som om det vore ett ben (Hittas under Bone properties>Inverse Kinematics när man är i Pose mode) * Extrudera ett nytt ben ifrån punkten C och dra det nedåt en bra bit * Skapa en Empty vid spetsen på det nya benet och lägg till en IK på benet och peka på Emptyn Voila! Nu kommer punkten C att vara begränsad av att den alltid måste vara på samma distans från Emptyn som ligger långt ned. Den kommer alltså att bara kunna röra sig i en cirkel runt den punkten. Naturligtvis kommer C att åka nedåt om den flyttar sig långt ifrån sin ursprungspunkt, men ju längre man gör hjälpbenet, ju mindre kommer felet att bli. Tycker man om trigonometri kan man roa sig med att räkna ut hur stort felet blir för en viss längd på benet. Detta är fortfarande en approximation, men för detta ändamål fungerar det riktigt bra då punkten C inte rör sig så långt från sin utgångspunkt. Dessutom är det inte särskilt svårt att sätta upp denna rigg heller. Dessa idéer möjliggör faktiskt att rigga hela Walscharts slidstyrning. :cool: Jag använder en armature som utgår ifrån kulissens teoretiska mittpunkt (mittpunkten är parent:ad så att den roterar runt kulissens rotationspunkt som ju drivs av excenternstången från drivhjulet) med först ett ben till tärningen. Sedan är tärningsstången uppdelad i två ben, först fram till lyftlänken och sedan vidare till försprångsstången. Det andra benet har en IK Lock för att sitta ihop med det första så att de bildar ett ben. Förprångsstången är uppdelad på samma sätt med ett ben ned till slidstången och ett från slidstången ned till försprångslänken med IK Lock. Sedan ett sista ben för själva försprångslänken till tvärstycket med en IK constraint med en Empty som target vilken i sin tur får rörelsen från tvärstycket. Därefter använder jag tricket med ett långt hjälpben som låser slidstångens rörelse horisontellt som jag beskrev ovan, vilken ju också har en IK constraint till en Empty. Till sist har vi lyftlänken som är ett ben som utgår ifrån de båda benen som utgör tärningstången. Denna har en IK med en Empty som target. Denna Empty är ju fästpunkten för lyftlänken i omkastningsveven och denna kan man sedan parenta till omkastningsaxelns rotation och här kommer nu det smått fantastiska: Med denna setup, kan man välja fyllning enbart genom att vrida omkastningsaxeln, precis som i verkligheten! Tyvärr stödjer ju inte Trainz att kunna ställa slidstyrningen i spelet, men med denna rigg kan man ju i alla fall exportera en korrekt slidrörelse för en viss fyllning. https://i.imgur.com/sneGTy2.gif Animation på hela härligheten, tärningen i toppen på kulissen, vilket den är vid backgång med SJ Sa (även om hjulen snurrar framåt på animationen... ;)). Notera drivningen till hastighetsmätaren på bakre drivhjulet! https://i.imgur.com/EVf6Rai.gif Närbild på slidstyrningen, nu är med tärningen i botten på kulissen vilket betyder att loket driver framåt Notera hur tärningen rör sig något upp och ned i kulissen, precis som den ska! :tumme_upp: En bra sak till med denna lösning är att den utan vidare stödjer alla mindre variationer av Walschaerts slidstyrning, som där man kan ha lyftlänken fäst på tärningsstången mellan tärningen och försprångsstången (som på Sa) eller bakom kulissen (se bifogad blendfil), eller där slidstången kan vara fäst i försprångsstången över fästet för tärningsstången eller under som på Sa. För er som är intresserade att titta närmare på lösningen så bifogar jag två blend-filer, en med lösningen på det generella problemet som jag visade i förra inlägget och en med hela Walschaerts slidstyrning typ så som den är uppsatt på min Sa, men efter ritning på något amerikanskt(?) lok där lyftlänken är fäst bakom kulissen. Armature:en är dock exakt likadan som på min Sa. I den första filen kan man testa genom att i pose mode röra på benen TopBlack och BottomBlackTarget och se hur riggen sköter sitt jobb med att placera punkten C. I Walschaerts-filen, starta hjulanimationen med mellanslag och rotera sedan på Emptyn ReverseArm för att ändra fyllningsgraden och gå mellan framåt och back. Sådär, det var all information jag ville häva ur mig denna gång. Hoppas att någon fann det intressant! :rolleyes: |
Otroligt intressant lösning. Har just börjat försöka sätt mig in hur du riggat, tar nog lite tid, är inte så snabb i vändningarna precis. Upptäckte också när jag kollade min egen animation av Sexans slidstyrning att kolvstången vobblar något, förmodligen har jag väl inte fått kolvstångens "ghost" i rätt position. Har också kämpat med samma problem du tar upp men inte lyckats få till det helt korrekt. I och för sig syn ju inte "fusket" i Trainz men man vill ju att det skall vara korrekt. Vad jag kan se av min lösning som bygger på "Ushi's variant från Aurans forum, så är väl problemet att tärningen inte rör sig i kulissen och att lyftlänken rör sig något i tärningsstången. Ett stort problem med Sexans slidstyrning var bristen på ritningar, hittade bara en mycket lågupplöst schematisk ritning där man knappt kunde urskilja detaljerna. Fick lov att sätta ut den med hjälp av foton och "trial and error", med hjälp av en oherrans massa cirklar.
Hoppas att jag kan komma med frågor lite längre fram när jag testat din metod. |
Kul att det är av intresse! :) Det är bara att fråga på om något är oklart!
Om du inte lyckas dissekera mina filer själv så skulle jag kunna bidra med någon steg-för-steg-instruktion med bilder på hur man gör, men sådant tar ju lite tid att göra. :D Det finns nog bättre sätt att rigga kolvrörelsen utan att använda en ghost, jag bara tog den första som jag lyckades få att fungera i mitt exempel. :rolleyes: När jag skapar ghosten brukar jag göra såhär: Jag markerar mittpunkten på armaturen (alltså kopplingen mellan kolvstången och vevstaken, den punkt som ska vara mitt mellan vevstakslagret och ghosten), flyttar dit 3D-cursorn med Shift-S>Cursor to Selected. Därefter väljer jag 3D-cursorn som Transform Pivot Point (https://docs.blender.org/manual/en/2...int/index.html) så att man roterar saker med 3D-cursorn som pivot istället för mitten på objekten eller vad man nu har inställt. Därefter kopierar jag (eller skapar och placerar) Emptyn som markerar vevstakslagret i hjulet för att skapa ghosten och roterar det 180-grader runt X-axeln (runt 3D-cursorn). Och vips så hamnar den på rätt plats! Sedan måste man ju strula lite med constrainten, eftersom ghosten flyger iväg så fort man lägger på Copy Location constrinaten. Jag brukar bara markera ghosten, flytta dit 3D-cursorn med Shift-S som ovan, lägga på constrainten och sedan flytta tillbaka ghosten till 3D-cursorn med Shift-S>Selection to Cursor. :) |
Har testat din lösning på animationen, fungerar super. Det mest frapperande är ju enkelheten i lösningen. Enda nackdelen är ju att man fastnar i att sitta och ändra på tärningenens position i kulissen hela tiden och förlorar värdefull modellerings tid :oskyldig:
Har också följt din tråd på Auran's forum, verkar ju intressant med Paul Hobbs förslag med "stretching" ihop med IK-lock. Har inte hunnit pröva än, men vad jag kan förstå är det inte så enkelt att få till som det verkar. IK-lock är också en funktion som jag tidigare inte haft koll på, har ju sett det men inte förstått hur det skulle implementeras. IK-lock verkar vara något som kan förbättra min animation av sexans eldstadsluckor, som det är nu är den inte särskilt elegant, men den fungerar. På Auran's forum diskuterades ju också om att exportera Armaturerna direkt utan att använda sig av empties som objekten är parenterade till. Har prövat själv, funkat ibland och ibland inte. Kan ju kanske vara ett problem som sitter framför tangentbordet :visslar: |
1 bifogad(e) fil(er)
Du får hojta till om du behöver hjälp med eldstadsluckorna! Har fått mersmak på IK-rigging problem efter det här nämligen! ;)
---- Idag blir det bara en kort uppdatering. Jag har äntligen fixat till ett vettigt workflow för texturering. Det är inte helt perfekt, men det fungerar ganska bra och är smidigt. Bara under dagen igår texturerade jag om hela loket (exklusive hjulen) helt från grunden! Det kommer antagligen en lång utläggning om hur jag gjort och vilka verktyg jag använt för de som är intresserade lite längre fram. :rolleyes: Tills dess får ni njuta av den första bilden av loket inne i simulatorn! Bifogad fil 80224 Det saknas fortfarande en hel del rör och slangar och glas-texturen är högst provisorisk. Men den är inne och den rullar och hela animationen av hjulen fungerar! :D |
Ser ju väldigt lovande ut, är speciellt imponerad av textureringen av slidstyrningen, du har verkligen fått fram effekten av oljig, lätt rostig metall :applad:
Ser verkligen fram emot en beskriving av ditt texturerings-workflow. Vad gäller mina eldstadsluckor så har jag animerat om dem med hjälp av IK-lock och IK-stretch a la Paul Hobbs, gick som en dans. Har även försökt att animera slidstången med hjälp av samma metod, men där gick jag bet:confused: |
Helvete va fint detta blir!!:tumme_upp::tumme_upp::tumme_upp::ber:
|
Citat:
|
Riktigt, riktigt läckert korvtiger!! :applad::drool:
|
Tack så mycket för beröm! :ber:
Som utlovat, en liten utläggning om mitt nya texturerings-workflow. :rolleyes: När jag visade en helt texturerad modell ett par sidor tillbaka i denna tråd hade jag ett helt annat workflow där jag gjorde hela PBR-textureringen i ett 2D-grafik-verktyg, nämligen Photoshop. Detta visade sig dock väldigt knöligt när man skulle måla synkroniserat i flera maps (Albedo, normal, roughness, metalness..), vilka jag hade i olika Photoshop-lager för att inte tala om att sedan manuellt exportera alla dessa map-typer. Jag har istället bytt ut detta workflow och gjort om hela den exteriöra texturen från grunden i ett verktyg som tillåter mig att arbeta i 3D-istället. Workflowet bygger på texturerings-programmet Mixer (https://quixel.com/mixer) från Quixel som jag råkat stöta på när jag letade efter gratisalternativ till Substance Painter. Företaget Quixel, för er som inte har hört om dem, sysslar med att åka världen runt och göra högkvalitativa 3D-scanningar av olika material och föremål som de sedan lägger upp i en databas som heter Megascans. Denna kan man prenumerera på (mot betalning) och använda texturer/material och 3D-scannade modeller när man gör spel eller CGI-effekter i film. Mixer är en programvara som de utvecklar för att "mixa" texturer/material. Programmet är helt gratis, bara man registrerar en email-adress. Med programmet får man dessutom gratis tillgång till en liten (men högst tillräcklig) del av Megascans-databasen, direkt i ett bibliotek i programmet. Dessutom kan man med några få knapptryckningar importera nya PBR-material från till exempel textures.com eller andra PBR-textur-sidor så man snabbt har tillgång till dem i sitt privata bibliotek i Mixer. https://i.imgur.com/2IioNcr.jpg Här har vi min modell i Mixer. Det markerade materialet "Rusted metal sheet" var ett jag hittade i Mixer-biblioteket som jag har plockat ut alla maps ifrån förutom albedo (och opacity), då jag tyckte att den var för brun. Roughness och normalmappen tillför dock någon sorts nedsmutsning till ytan. Mixer är egentligen designat för (som namnet hintar om) att mixa material, dvs att ta redan existerande PBR-texturer och mixa fram nya. Till exempel genom att ta en tegelstens-textur och en moss-textur och mixa ihop så man får en mossig tegelstensvägg. Dock har man implementerat flera funktioner i de senaste versionerna som gör det möjligt att importera egna 3D-modeller av .obj eller .fbx-format och texturera dem i 3D. Det fungerar på det stora väldigt bra, även om vissa funktioner saknas som nog hade varit betydligt smidigare i payware-motsvarigheten Substance Painter. Dock får man ha i åtanke att Mixer fortfarande (även om det funnits ett par år och verkar användas i professionella sammanhang) kallar sina nedladningar för Beta-versioner. Så nya features kommer med jämna mellanrum och det kommer förhoppningsvis att bli ännu bättre i framtiden! :) Så mitt workflow ser ut som följer: Först ritar jag displacement-mappen manuellt i Photoshop, alltså den som jag kallat bump-map tidigare. I denna gråskaletexture ritar jag alltså in höjden på alla nitar och plåtskarvar. Jag ritar inte in några ojämnheter i plåten eller sådant, det gör jag i Mixer sedan. Denna displacement-map har jag ju redan skapat, som jag visade för ett par sidor sedan i denna tråd. I Blender genererar jag två texturer, dels en ambient occlution-map som är en gråskaletextur med en approximation av ljus/skugga på modellen; och dels en material-id-textur som jag använder för att peka ut vilka lager i Mixer som ska synas på vilka ytor. Denna textur använder jag inte i spelet, utan enbart som hjälp i Mixer för att kunna maska ut vissa ytor på modellen. Material-id är alltså en RGB textur med olika färger. Jag vill till exempel att lagret med mässingsmaterial i Mixer bara ska synas på säkerhetsventilerna och ångvisslan, så dessa meshdelar ger jag då en och samma färg i material-id-texturen. Eller om jag vill att säkerhetsventilerna och ångvisslan ska ha samma grundmaterial, men att säkerhetsventilerna ska var mer slitna så kan jag ge dem två olika material-id-färger och välja båda i mässingslagret men bara säkerhetsventilernas färg i lagret med slitage. I Blender skapar jag denna material-id-textur genom att sätta emit på materialet i Cycles-noden till den färg jag vill ha i material-id-texturen och sedan baka med typ "emit" de mesher som jag vill ska denna färg i material-id-texturen. Så jag markerar till exempel säkerhetsventilerna, väljer en färg på emit i noden, bakar, markerar sotskåpet och sotskåpsluckan, väljer en annan färg på emit, bakar, osv. Om man vill kan man självklart måla enskilda polygoner, eller till och med enskilda pixlar av ett objekt så att bara de får det material-idt, men det har jag nästan inte behövt på Sa:n. I denna modell har varje löst Blender-objekt nästan alltid bara haft ett och samma material-id. Enda undantaget var buffertbalkarna, där "framsidan" ju ska vara klarröd och sidorna och baksidan/insidan ska ha ett mer svart material. Det löste jag enkelt genom att separera ut de två polygonerna som skulle vara röda till ett nytt objekt i Blender. Det finns säkert verktyg för att automatisk generera ett material-id till varje löst objekt, men jag har gjort detta för hand. https://i.imgur.com/TCG0GFj.jpg Material-id-texturen för loket. Svart är delar som jag inte har valt något material-id på, utan som får någon sorts grundmaterial Därefter är allt förarbete klart och man kan hoppa över till Mixer. I Mixer kan man sedan enkelt skapa ett nytt material-lager för, till exempel, de röda buffertbalkarna och sedan använda material-id masken för att bara maska ut de delar av meshen som är bufertbalkarnas framsida. Mixer har ett verktyg där man enkelt kan visualisera material-id-texturen på modellen och sedan bara peka på den/de material-id-färger där man vill ha sitt material. Jag har fått hoppa lite fram och tillbaka mellan Mixer och Blender för att skapa flera material-id:n när jag upptäckt att jag missat något ställe, eller behöver dela upp ett material-id i två, men detta går väldigt snabbt att göra. I Mixer laddar jag in min modell över ångloket och lägger till ett base-layer med mina tre texturer som jag nämnt: ambient occlusion, material-id och displacement. Här kommer nu en av de smidiga grejerna: man kan direkt generera en normal-map ifrån displacement-mappen, så jag behöver inte göra det manuellt varje gång jag behöver justera eller lägga till nitar i Photoshop! Så jag använder egentligen inte displacement-mappen i Mixer, utan bara den normalmap som genereras utifrån displacementen. I base-layer sätter jag därefter en grundfärg (svart) för albedo-mappen och en grundroughness. Dessa kommer sedan att modifieras eller helt döljas av de lagren som jag skapar ovanför. Därefter är det bara att börja texturera! Mixer har ett relativt enkelt användargränssnitt, men är samtidigt ganska kraftfullt om man väl förstår hur det fungerar. Det grundar sig på att man skapar lager med "surfaces" där en surface alltså är ett PBR-material med alla dess texture-maps. Sedan kan man maska ut vilka delar av meshen detta lager ska synas på, hur det ska blanda sig med lagren under osv. Dessutom finns det flera användbara maskningsverktyg som kan till exempel hitta "edges and cavities" i meshen på olika sätt för att applicera slitage bara på mesh-kanter eller smuts bara inne i hörn. Om ni är nyfikna och/eller faktiskt vill lära er programmet, rekommenderar jag att kolla in deras Youtube-kanal där det finns genomgångar hur man använder Mixer för att texturera 3D-modeller likt hur jag har gjort. Bifogar två bra exempel nedan som visar många olika verktyg, men det finns flera bra "in-depth" genomgångar av varje enskild mask-komponent också. Hur man texturerar en modell, från 3D-program via Mixer till exporterade mappar på 20 minuter: https://www.youtube.com/watch?v=kRtXIj6ENT4 Mer om Smart Materials: https://www.youtube.com/watch?v=9pFjAlU2gQw |
(Del två av inlägget ovan, pratar för mycket igen... ;))
En sak har jag dock stött på som inte fungerade lika smidigt i Mixer (ännu i alla fall), som det nog gör i mer fullfjädrade 3D-textureringsprogram, är dekaler. I mitt fall saker som SJ-loggan, lokskyltarna eller loknumret på främre buffertbalken. Det finns en del dekaler som man kan använda i Megascans-bibilioteket i Mixer, men av någon outgrundlig anledning så har de inte scannat in någon dekal med 1277:s lokskyltar eller SJ-monogrammet. Högst märkligt kan jag tycka! :D Och tyvärr verkar det inte finnas något smidigt sätt att skapa egna dekaler på än så länge. Men jag löste detta genom att skapa en textur i Photoshop med alla dekaler med en helsvart bakgrund och sedan lade jag till det i Mixer som ett solid layer med "Tiling"-mappning så att allt hamnade på rätt ställe på modellen. Sedan fick jag maska bort bakgrundsfärgen i texturen genom att använda texturen själv som en mask och maska på alla pixlar som var helsvarta. Detta fungerade och krävde inte så mycket extra jobb med tanke på att jag redan hade placerat ut nästan alla dekaler i albedotexturen när jag gjorde hela PBR-textureringen i Photoshop första gången. https://i.imgur.com/wt012dH.jpg Här använder jag texturen själv för att maska ut bara dekalerna i dekal-texturen. På 3D-modellen visas marken för lagret i svart-vitt, där det alltså bara är de vita delarna som syns i slutresultatet En annan sak som det inte finns stöd för (än) i Mixer, är att ha 3D-modeller med flera olika texturer och/eller olika UV-maps. Det innebär att jag måste texturera löphjulen, drivhjulen, loket och luftpumpen i separata Mixer-filer. Jag valde att separera lok och luftpump för att kunna ha en relativt högupplöst texture till luftpumpen nämligen. Det finns dock sätt i Mixer så att man kan spara en grupp med lager av sin mix, så om man har hittat en perfekt finnish på rundpannan och vill ha samma på luftpumpen, kan man spara de lagren som ett "Smart material" som hamnar i ens privata Mixer-bibliotek och sedan importera dessa i filen med luftpumpen. Dessutom kan man justera fritt i de lager man importerade, så man kan ändra så att luftpumpen inte har exakt samma lyster som rundpannan. Detta visas i de videos jag länkade ovan. När man sedan känner sig färdig i Mixer så är det dags att exportera sina PBR-texturer och detta kunde inte varit smidigare! Man listar helt enkelt upp de textur-filer man vill ha ut, bestämmer format (jag kör numera PNG) och sedan kan man helt fritt sätta vilka PBR-maps som ska skrivas ned i vilken färgkanal i vilken textur. Så att skapa parameter-texturen som TRS2019 vill ha med emit, roughness, AO och metalness i RGBA-kanalerna i den ordningen är inga konstigeheter! Mycket smidigare än i mitt tidigare workflow där jag fick exportera dessa PBR-mapparna som separata texturer från Photoshop och sedan försöka sätta ihop dem i Blender eller i liknande. Detta gjorde att det tog väldigt lång tid att fixa småsaker i texturen med det gamla workflowet. I Mixer ser man allt man gör direkt i 3D och man kan till och med sätta ett fast värde på emit-texturen (som ju ska vara helsvart, inga radioaktivt, självlysande ånglok här inte! :D) när man väl exporterar. När man satt upp exporteringsinställningarna en gång så är det bara att trycka på export nästa gång för att alla texturer ska trilla ut av sig själva! Hur smidigt som helst! Att byta upplösning på texturerna man matar ut ur Mixer är bara ett knapptryck. Man kan dessutom jobba i en lägre upplösning och sedan exportera i en högre om det skulle behövas för att datorn inte orkar med. Alla PBR-material och lager har ju den upplösning som de är skapade med (Förutom om man handmålar masker i Mixer, då får de den upplösning man väljer att skapa dem med) och det mesta i Mixer är procedurellt så det är inga problem att skala upp slut-resultatet i de flesta fallen. Själv hade jag dock inga problem att texturera loket med 50+ lager med 2048x2048 texturer på ett RTX 2060 SUPER grafikkort. Ytterligare en trevlig sak med att Mixer är helt procedurellt är att om man tyckte något lager fick lite fel färgton, eller något smutslager blev lite för mycket så kan man gå tillbaka och dra lite i några reglage, trycka på export-knappen och få ut nya texturer som man bara slänger in i Trainz-asseten. På det stora hela är jag nöjd med detta workflow. Det är enbart freeware-programvara, (Photoshop-delarna hade man lika gärna kunnat göra i GIMP eller Krita, jag har bara kört Photoshop så länge att jag har fastnat..) man ser resultatet i realtid i 3D, det är anpassat för PBR-texturering, det är snabbt och smidigt och framförallt, det är kul! Jag har aldrig tyckt om texturerings-biten av att bygga modeller till Trainz, men Mixer har verkligen fått mig att tycka att det är en kul del av processen! :) |
Riktigt, riktigt snyggt korvtiger! :tumme_upp:
|
Jag är mållös, otroligt snyggt!!! :ber:
|
Sedan sist har texturerat om hela interiören i Mixer. Fortfarande lite saker jag skulle vilja justera, men det börjar se rätt bra ut. :)
Just nu håller jag på och bråkar med Trainz för att försöka få in hytten i spelet. Har något konstigt fel där vissa objekt (innertaket, samt innerväggarna) får normalerna vända åt fel håll inne i spelet, trots att de är åt rätt håll (inåt hytten till) i Blender. Normalmappen är det inga konstigheter med och när jag importerar den exporterade fbx-filen tillbaka in i Blender verkar allt rätt. Jag har bara lyckats tvinga dem åt rätt håll genom att mergea ihop de objekten med något objekt som har fler normaler pekandes utåt (exempelvis ångpannan) för att det ska fungera. Är det någon annan som har stött på detta märkliga beteende? :rolleyes: Tills jag löst detta så får ni några bilder renderade inifrån Blender med hjälp av pathtracern Cycles. Riktigt så här bra kommer det ju inte att se ut i Trainz, men det visar ju på en av trevligheterna med PBR: att man kan rendera modellerna i vilken PBR-rendermotor som helst och få ett liknande resultat. :) Och nu med realtids-ray-tracing på frammarch kanske hytten automatiskt kommer att se såhär bra ut i någon framtida utgåva av Trainz! :rolleyes: https://i.imgur.com/kGn26ul.jpg https://i.imgur.com/e3ocafu.jpg https://i.imgur.com/gkREwcz.jpg |
Jäklar vad snyggt korvtiger! Ser riktigt, riktigt verkligt ut :drool:
|
Ser fantastiskt ut, ser verkligen fram emot slutresultatet :applad:
Problemet med normalerna som du beskriver har jag stött på när jag kopierat och speglat några objekt, då hjälpte det med "object - apply -all transformations" och tror att jag någon gång också använt, i edit mode "mesh - clean up - degenerate and dissolve" om jag inte missminner mig. Är nyfiken på "poly-counten" på din interiör, dina rör ser väldigt bra ut. Har tänkt att ta mig en titt på "Mixer" också, verkar ju som ett mycket intressant freeware-alternativ. |
Glöm det jag skrev om flippade normaler i förra inlägget. Vid närmare eftertanke så är ju den lösningen inte riktigt applicerbart på ditt problem. Det gällde ju objekt i slidstyrningen som var speglade. Däremot slår det mig att jag hade samma problem som du när jag exporterat en av rattarna i hytten, att det såg ut som flippade normaler i Trainz, men inte i Blender. Lösningen i det fallet var att jag triangulerade meshet i fråga och då, efter exporten såg allt ok ut i Trainz.
|
Tack så mycket! :)
tanigardi: Jag tror att jag provade att triangulera mesherna utan att det hjälpte och jag testade alla möjliga apply transform-grejer och kontrollerade att scale inte var inverterad osv. Får prova dina förslag och se om det hjälper denna gången. :rolleyes: Triangelräknaren står på 81849 för den "interiöra delen" av interiören, sedan tillkommer den "exteriöra delen", alltså lokmodellen, fast nedbantad och med mycket grejer som inte syns från hytten borttagna, på 12982 trianglar. Så totalt 94 831 just nu för hela interiören. Trodde att det skulle vara betydligt värre faktiskt! :D Jag har för mig att N3V rekommenderar 100 000 - 120 000 trianglar för LOD0 för lokmesher, så det borde ju vara samma för lokhytter. Men sedan ska det till lite grejer i koltaget, fönsterrutor, en fyrmesh och kanske lite annat. Alla rör gör jag som bezier-kurvor för att lätt kunna dra och justera dem. Sedan när jag var nöjd med alla rör gjorde jag en kopia av bezierkurvan och konverterade den till en mesh, som jag får UV-unwrappa. Originalen sparar jag i en annan collection för att ha om jag behöver justera något. Jag använder 8 vertices per "ring" för de grövsta rören, dvs- till injektorerna. Ledningar till bromsen har 6 vertices och gasledningarna har 4. Sedan får man välja hur många ringar per bezier-segment man behöver per rör beroende på hur krokigt röret är draget. Ibland har jag tagit bort en del onödiga ringar där rören är väldigt raka efter att jag konverterat till mesh för att spara in några trianglar. Vertex-slide är ett ypperligt verktyg för detta (Markera ringen, tryck "G+G" och flytta musen). :) |
Finner inga ord! WOW :tumme_upp::tumme_upp::tumme_upp:
|
Helt enastående snyggt "korvis" :ber::tumme_upp::tumme_upp::applad:.
|
Helt otroligt! :drool:
|
Fortsätter att bygga på hytten. Det har gått åt mycket tid att splitta upp hela hytten i alla reglage och mätare och saker och sedan se till att allt är korrekt riggat/animerat och exporterat till Trainz. Tyvärr blir man lite trött ibland på en del konstigheter som Trainz har för sig. Ett särskilt märkligt är att "collision" på vissa reglage inte funkar direkt när man hoppar in i hytten, men efter att man gått runt och klickat och haft sig å hoppar de plötsligt igång och går att klicka på. Vissa reglage var så när jag först lade in dem, men sedan dess fungerar de direkt varje gång jag startar om simulatorn. Dock verkar mina bromshandtag inte vilja fungera för det mesta. :mad:
En glad överraskning var dock att Blender numera verkar kunna exportera animationer med scale, Trainz FBX importer verkar stödja det! Kul, för det fungerade inte på den gamla goda tiden med .im-mesher. :D Nu är snart alla mesher inne i hytten och det återstår bara det eviga småjusterandet av collisions och därefter scriptning av lite specialsaker som inte finns med i mitt STL-ångloksscript. Och så en bild från inne i simulatorn: https://i.imgur.com/1mczixB.jpg Ganska långt ifrån kvalitén på renderingarna i förra inlägget, men i framtida Trainz-utgåvor kanske.. :rolleyes: |
Citat:
|
Ser ju väldigt fint ut tycker jag. Tyvärr så är ju textur storleken man kan använda till Trainz en begränsning. Drömmen vore ju att man kunde använde ett antal 4096 x 4096 texturer.
Är nyfiken på hur många lod nivåer du använder och polycounten i respektive nivå, sitter själv och tråkar ut mig med att dekonstruera mitt lok. |
Ja, texturstorleken är ju tyvärr en begränsning. Jag har hållit mig till 2k-texturer, vilket tyvärr gör en del liten text svårläst. Men support för 4k-texturer kommer nog i framtiden.Dessutom såg jag att N3V hade sökt programmerare med erfarenhet av realtids-raytracing så vem vet hur framtiden i Trainz kommer se ut? :)
Haha, LOD är något jag skjuter framför mig fortfarande! :D Hytten behöver ju lyckligtvis inte LOD:as. Den exteriöra tänkte jag LOD:a när jag känner mig helt klar med modellen. Det blir väl kanske 4-5 nivåer tänker jag. Får se hur jag gör med hjulen och luftpumpen som är separata modeller. Man vill ju inte börja dekonstruera sitt lok om det visar sig att man måste göra om det längre fram för att man kommit på massa saker man missat! :rolleyes: Men jag är säkert tillräckligt färdig för att kunna göra LOD:ningen, så vi får se när jag tar tag i det! Jag måste fixa interiören på den exteriöra modellen först. Tänkte ta interiör-modellen och förenkla den, samt (om det går) baka ihop de två 2k-texturerna jag använder där till en 1k eller 2k textur, vilket ju innebär att jag måste mappa om saker för att kunna kombinera texturerna. Kanske nöjer mig med skala ned dem till 1k. Hur gör du med LOD själv? :) |
oj oj oj vad snyggt... Nu behöver man ju inte köra ånglok på riktigt längre... Hoppas du byggt in doften av stenkol och varm olja oxå?
Kanske fel tråd att fråga, men går det kortfattat att beskriva hur LOD i Trainz går till eller kanske länka till nått bra ställe? Eller att jag själv söker på forumet kanske haha... :o Så inspirerande med ditt bygge! Önskar jag nångång får ut grejjer till Trainz oxå. |
Med interiören till den exteriöra modellen gick jag tillväga i motvänd ordning som du. När jag gjorde bodyn så modellerade jag också de reglage etc som skulle synas utifrån, vilket ju medförde att jag kunde baka dem till bodyns texturer. Sparade om Blend-filen på bodyn till att vara utgångspunkt till interiören som ju naturligtvis mappades om till nya texturer. Gick sen tillbaka till bodyn och förenklade insidan på hytten så mycket som möjligt.
Vad gäller lodandet så blev det 5 nivåer både på bodyn och drivboggien (har precis blivit klar med lod till både drivboggien och bodyn). Så bodyn slutade på: lod0 51540 tris. lod1 35791 tris. lod2 16938 tris. lod3 5494 tris. och lod4 154 tris. Drivboggien: lod0 27685 tris. lod1 21127 tris. lod2 11169 tris. lod3 4990 tris. och lod4 312 tris. Har använt edge slide och vertex slide till det mesta. Ett tidsödande problem har varit att man till viss del blivit tvungen att justera UV-mappen, trots att "Correct UVs" har varit markerad, speciellt när det rört sig om rundade objekt. Om det bara varit Albedon hade det väl inte spelat så stor roll men man måste ju ta hänsyn till roughness och metallic också, som kan ge lite oönskade reflektioner om öarna kommit lite utanför. Och dom reflektionerna har en tendens att bli väldigt tydliga även i de lägre lodnivåerna (eller säger man högre om lod1, lod2 etc ?). Drivboggien var väl den knepigaste att "lodda", framför allt slidstyrningen efter som de detaljerna ju har en hög andel metallic i sig och blir därför väldigt tydliga även på långt avstånd. Jag avundas inte dig som har allt loddande framför dig men du verkar ju ha en ängels tålamod och nog arbetar betydligt snabbare än jag så jag gissar att du vinner i spurten :grin:. |
Citat:
Blev lite nyfiken också - till att börja med : Vad är LOD?.:vetej: Jo det kan man läsa om här. Men hur man sedan går tillväga får någon annan sakkunnig upplysa dig om. Hälsningar |
1 bifogad(e) fil(er)
Benkegbg:
Ja, exakt LOD eller Level Of Detail som det står för är en teknik för att minska belastningen på datorn i spel, precis som beskrivs på sidan du länkar till. :) LOD innebär helt enkelt att man skapar "nedbantade" varianter av sina modeller där man förenklar eller plockar bort detaljer. Ser man till exempel ett ånglok på 1000 m håll så finns det ju inte en chans att du ser den tunna wiren som går mellan hytten och säkerhetsventilen för att manuellt kunna öppna den vid behov. till exempel. Därför kan man helt ta bort den när man ser modellen på så stort avstånd. Som Tanigardi beskriver så använder man flera steg, s.k. LOD-steg, ofta mellan 3-5 steg, där man undan för undan förenklar och tar bort detaljer. Man gör det stegvis för att det inte ska märkas för betraktaren lika tydligt när man hoppar mellan två steg när man rör sig mot/bort från föremålet. Det fenomenet när man märker hur modellen hoppar mellan olika LOD-nivåer brukar kallas "popping". Detta fenomen är ganska vanligt om man kollar på spår i Trainz när man kör. Man ser ofta hur det finns en gräns där sliprarna ändrar form/färg på ett tydligt sätt en bit framför loket. Hur man går till väga rent tekniskt beskriver Tanigardi lite grann också, man tar helt enkelt först och bygger sin modell i all sin glans med alla detaljer och finesser, precis som jag har gjort, den så kallade LOD0, 0:te LOD-nivån. Den ser man bara när man står väldigt nära loket. Sedan tar man och steg för steg förenklar modellen. I nästa steg (LOD1) som man ser om man står ett par 10-tal meter ifrån loket kanske man mest förenklar och gör små saker mer kantiga i modellen. Man tar kanske bort mini-detaljer också som inte längre kommer att synas då. Och på det sättet fortsätter man och tar LOD1-modellen och förenklar den till LOD2 som man kanske ser på runt 70-meter ifrån loket. Och sedan förenklar man LOD2 till en LOD3 modell, osv. Det hela innebär ofta en hel del manuellt (och ganska tråkigt) arbete, tyvärr. :) Mazz: Bara kul när det blir lite frågor och diskussioner! :) LOD finns vad jag förstått det som (har bara använt det en gång tidigare faktiskt på mina omgjorda G3-vagnar) i två varianter: Ett lite enklare system som man bara konfigurerar i assetens config. Man skapar en lista med avstånd i meter som de olika LOD-nivåerna ska börja på (taggen mesh-table-lod-transition-distances, se: https://online.ts2009.com/mediaWiki/...tion-distances). Sedan ställer man in i varje mesh vilken LOD-nivå den ska synas på (taggen lod-level: https://online.ts2009.com/mediaWiki/...iner#lod-level), vill man visa den på nivån LOD2 så sätter man den taggen till 2 till exempel. Detta sätt räcker och bör nog användas för allt som inte är rullande fordon. Andra alternativet är att i en mesh i mesh-tabeln ange en .lm-fil (https://online.ts2009.com/mediaWiki/...hp/LM.txt_file) som mesh istället för en vanlig .trainzmesh/.im-meshfil. Denna lm-fil är en textfil i vilken man kan ställa in olika LOD-nivåer och vilka .trainzmesh/.im mesher som ska användas vid de olika stegen. Dessutom kan man styra saker som att slå av animeringar, ta bort attachments osv. Detta sätt ska nog framförallt användas för rullande fordon, men man kan även använda det första sättet om det räcker för ens ändamål. Det intressanta är att man kan nyttja båda systemet tillsammans: https://online.ts2009.com/mediaWiki/...LOD_Techniques Är lite nyfiken, Tanigardi, vilket av systemen använder du, eller kör du båda tillsammans? ---- Nja, stenkolsdoft är jag rädd att du får fixa på egen hand än så länge! :rolleyes: Men på tal om olja och när jag ändå har dig på tråden, Mazz, kanske man kan få lov att fråga om du har någon bra koll på Friedmanns smörjpump typ N? Du borde ha använt en då det sitter just en sådan i Sb 1306 nämligen! ;) Bifogad fil 80618 Jag har ju min kära ånglokslära till hjälp och den beskriver funktionen av smöjpumpen på ett tillfredsställande sätt, men det finns vissa detaljer som man kanske bara är intresserad av i verkligheten som jag skulle vilja veta om jag ska försöka scripta och simulera pumpen. (Ja, jag har nått nästa nivå av tågsimuleringsvansinne :D) Vad jag undrar är följande: 1. Finns det någon standardordning som smörjställena är inkopplade i apparaten? Vad jag förstått så kopplas de tre vänstra pumparna till vänstra sidan på rörelsen och de tre högra till den högra sidan. Det låter ju logiskt. Men vart går de tre pumparna till på varje sida? Och är de kopplade så att de yttersta av de 6 pumparna går till motsvarande smörjställe på vänster/höger sida? Eller går pump 1 och pump 4 till motsvarande smörjställe på höger/vänster? 2. Mittenraden med rattar är ju graderade 1-10 för hur mycket olja som pumpas till just det smörjstället. Vilka inställningar brukar man ha för respektive smörjställe? 3. Hur mycket olja drar de olika smörjställena på ett ungefär (för en viss inställning med 1-10 ratten)? Kanske svårt att veta då det beror på lokets hastighet, inställning med 1-10-ratten osv, men pratar vi att man måste fylla på behållaren en gång per stationsuppehåll, eller en gång per dag, en gång per månad? 4. Med den övre ratten kan man koppla loss behållaren så att pumpen bara suger ifrån nivåröret, vilket möjliggör att man kan se hur mycket olja som sugs vid varje pumpslag. Har du använt denna funktion? Och hur snabbt på ett ungefär töms röret (igen, beror ju mycket på hastighet etc, men på ett ungefär)? Många krångliga frågor men med lite svar och volymberäkningar på ritningen så kanske man kan räkna ut ungefär hur den borde bete sig i verkligheten! :) Frågan är väl om någon är intresserad av en perfekt simulerad smörjpump i en simulerad verklighet som inte behöver mista droppe olja för att flyta på ändå :D Vore kul om du lyckas få ut saker till Trainz! Hojta till om du stöter på problem! :) |
Eftersom alla mina ånglok är anpassade för LOD, så kan ni kolla hur LOD-en fungerar genom att zooma in/ut mot ett av dessa. När LOD nivå bytes beror på mesh("siffra") i .lm filen.
T.ex så betyder mesh("0.07") ungefär täckning av 7 procent av din skärm. Se nedan utklipp av min lm fil: version 1.0 offset = 0.01; calcPoint = center; multiplier = 1.0; animationCutOff = 0.00; renderCutOff = 0.00; attachmentCutOff = 0.06; mesh("0.07") { name="asset_body_lowest.im"; } mesh("0.15") { name="asset_body_low.im"; } mesh("1.0") { name="asset_body.im"; } Vid närmare granskning borde jag fila till nåt/några värden! Antal LOD nivåer är upp till dig själv, men jag nöjde mig med 3. Observera att lowest LOD number får bestå av max 400 trianglar om man som i mitt fall kör med Buildno 4.3 eller nyare. Alltså anpassat för TANE eller nyare versioner. Annars så får ni ett genererings fel där max antalet anges. Gå till Trainz Wiki så hittar ni bra dokumentation hur göra. Lycka till! |
Nu kommer jag ihåg hur jag gjorde en första test av ånglok med LOD egenskap.
Jag öppnade CM och valde sedan "Preview asset" och vid det nya fönstrets öppnande kunde man välja "LOD distance". Minnet är inte det bästa men detta var ju trots allt för några år sedan..... Och då fann jag ut att LOD0 verkade till ungefär 100 meter i mitt fall, då LOD1 tog över. Lägsta LOD nivån blev aktiv vid omkring 400-500 meter. Så detta är bästa sättet att göra första testerna tycker jag. |
1 bifogad(e) fil(er)
Försöker svara på dina frågor;
1. Jag ska ärligen säga att jag vet inte... När man skruvat bort rören, en eller flera så är dom genom sina böjningar nästan svårt att sätta på annan plats än där de va från början. Skruva isär dom behövde man ibland göra när man i utsmörjningen konstaterat att nån kanal inte levererar olja. Det är cylindrarna som smörjs, inte rörelsen. En center och en fram och en bak. Pumpen fylls med cylinderolja och värms med ånga i "lagom" mängd. 2. Samma sak där egentligen, rör inget om man inte har ett varmgångsbekymmer. Med våra låga tågvikter och farter är det rätt förlåtande dessutom. Svag minnesbild att dom stod typ mitten-ich... 3. Man fyllde alltid upp till fullt vid varje utsmörjning, men då var det långt ifrån att det skulle börja närma sig botten. Fyllde kanske på en halvliter vid varje utsmörjing, dvs. varje morgon. Volymen berodde såklart på hur mycket som körts senaste tillfället... På Nora marknad nått år sedan körde jag 18 mil på en dag med Sb:n, men vid en beställningskörning blir ju inte mycket mer än 2 mil totalt. 4. Nix, jag har inte använt mig av den metoden. haha, vet inte om du fick så jättematiga svar... Men jag fick i alla fall ett bra ord att lägga till i mitt ordförråd... "tågsimuleringsvansinne"... :D tackar o bockar för stödet när jag väl kommer ta mig i kragen och börja exportera till Trainz! Ser fram mot det! |
Nu har ju inte jag särskilt mycket erfarenhet av just typ N däremot NS, som saknar några finesser och moderniteter som N har.
1. På våra pumpar monterade på svensktillverkade lok (från MV) är det i regel så att elementen på ena sidan av pumpen går till ena cylindern och andra sidan till andra. Om jag minns rätt så har jag kopplat följande på JGJ 9: 1 Främre slidkolv, 2 bakre slidkolv, 3 cylinder, 4 främre slidkolv, 5 bakre slidkolv och 6 cylinder. Men det varierar nog från lok till lok. 2. Här ställer vi in det efter hur slitet resp del som pumpen ska smörja är.. Det finns säkert något sätt att räkna ut hur mycket olja som ska var men vi börjar på 10 och minskar tills man når en nivå där det smörjer bra och förbrukar så lite olja som möjligt. Droppar det olja från pysar eller "snyftarna" är det för mycket olja, börjar det "roma" om cylindrarna när man kör är det för lite. Tar ganska många timmar att hitta rätt för alla smörjställen. Våra två "likadana" lok NAÄJ 4, KM NELSSON och JGJ 9 har helt olika inställningar för smörjning eftersom loken är olika slitna. 3. Nu skiljer sig säkert mängden olja som kan pumpas per slag mellan N och NS men med inställningen på 5 tar pumpen (NS) ca 1mm ur glaset när man ställt att ett visst element ska suga ur glaset. 4. När du gör detta med NS är det endast det element du satt ratten mot som suger från röret, övriga element suger från stora behållaren. Ställer du ratten mot glaset så stänger du av glaset om jag minns rätt. (Ifall glaset skulle gå sönder) Nu har ju NS bara ett glas, så det fungerar säkert på ett annat sätt på N. |
vovven:
"Preview asset" i CM är ett bra tips, jag använde det verktyget när jag gjorde LOD till mina G3-godsvagnar kommer jag ihåg. I det fallet så testade jag även att sätta ut flera godsvagnar på olika spår i Surveyor och bara flytta kameran fram och tillbaka för att se hur tydliga övergångarna mellan LOD-nivåerna var. I fallet ånglok har man ju oftast bara en sådan per tågset, medan G3-vagnar kan förekomma i långa rader. Det gör ju att det kan vara svårare att dölja LOD-övergångarna, då det lätt märks när man kan jämföra utseendet på två vagnar som står bredvid varandra. Mazz: Tackar för svar, för visst gav det lite mer information i saken i alla fall! :) Rely: Ah, hade ingen aning om att du pysslade med verkliga tåg också, kul! Tack för mycket nyttig info! Det låter som att NS fungerar snarlikt som N, bara att NS har enbart ett glasrör som alla 6 pumpar får samsas om, medan N har ett glasrör per pump. Nu blir det lite räknande, för sådant tycker jag är kul! :) Jag kollade lite närmare i Ånglokläran och upptäckte att det faktiskt står angivet hur mycket olja ett pumpslag ger! Inte första gången man upptäcker att de mest till synes oväsentliga detaljer finns beskrivna. Bra bok det där! :rolleyes: Det är angivet till 0.4 cm³ per slag för inställning 10 och en tiondel av det på inställning 1. Då kan man börja räkna lite: För en Friedmann typ N så är volymen på glasröret ungefär 9.5 cm³. Dessutom så är volymen på en behållare (alltså för en av de 6 smörjställena) ungefär 1350 cm³ enligt ritningen i Ånglokläran. Dessutom så styrs smörjpumpen av en vickaxel som drivs av drivhjulen plus ett spärrhjul som roterar pumpens axel. Så pumpen pumpar alltså snabbare ju snabbare man kör. Enligt mina uppskattningar på min modell över Sa-loket där jag hjälpligt modellerat drivningen med vickaxeln inne i hytten med ögonmått så är utslaget på vickaxeln som driver spärrhjulet ungefär 15 grader per drivhjulsvarv. Så det ger att vi har 24 drivhjulsvarv per helt smörjpumpsslag. Sb:n drivhjulsdiameter är 1.75 meter, vilket ger en omkrets på ca 5.5 meter. Med lite matte får jag det till ~7.6 smörjpumpslag per kilometer. På inställning 10 innebär det att en tur på 18 mil på inställning 10 drar 546 cm³ (=ca en halvliter), alltså ~40% av den totala mängden i behållaren för en pump. Det låter ändå rimligt baserat på Mazz uppskattningar. Enligt mina beräkningar innebär det att 2 mil med inställning 10 på alla rattarna ger en total oljeåtgång på 0.36 liter för alla de 6 pumparna, vilket stämmer hyfsat med Mazz uppskattning om hur mycket han brukar fylla på vid varje utsmörjning också. Kanske att jag tog i lite för lite med 15 grader per drivhjulsvarv på utslaget till vickaxeln plus att man ju rullar lite till och från stall och kanske vevar lite på pumpen manuellt osv. :rolleyes: Enligt mina beräkningar skulle ett helt varv med veven på en Friedmann typ N på inställning 5 suga ca 1.8 mm ur cylindern. Så det låter även rimligt med Relys uppskattning. Mätte lite på typ NS i Ånglokläran och de verkar ha typ samma mått på glasröret som N, men det är lite svårt att mäta på en så liten ritning. Hittade ingen angivelse om mängd olja per slag för NS, men misstänker att den är snarlik typ N. Nu ska jag ta med mig det här och se om det går att få till någon simulering av detta i spelet. :) |
1 bifogad(e) fil(er)
Sedan sist har jag fortsatt att greja med olika saker. Har bland annat scriptat/simulerat Friedmann pumpen. Kanske visar någon video på det längre fram.
En sak som jag inte riktigt gjorde klart på den exteriöra modellen var luckorna till kolboxen och vattentanken. Jag fixade kolboxen efter att ha detaljgranskat en drös med bilder och videos. Detta var inte jättesvårt då man ofta verkar lasta Sa-lok med så pass mycket kol att luckorna inte går att stänga. Bra, för då kan vi modellerare lätt se hur luckorna ser ut! ;) Luckorna till vattentankarna var desto svårare att klura ut hur de såg ut. Och så plötsligt häromdagen så tipsades det om en kortfilm på SVT play där man faktiskt ser det hela uppifrån! Det löste de sista pusselbitarna till hur luckorna skulle utformas och animeras. :D Såhär ser det ut i spelet: Bifogad fil 80724 Har varit lat och inte mappat om de nya ytorna, så texturerna ser inte så bra ut (än) Testade även displacementmapping på kolet i kolfickan. Kanske ska prova att köra det på hela loket för att få detaljerna att bli lite tydligare. :) Och filmen tycker jag också att ni ska kolla in! Det är en 14 minuters skildring om en liten pojke som åker tåg från Malmö och Simrishamn runt år 1960. Väldigt fina vyer på tåget och allt runtomkring. I filmen förekommer flera olika Sa-individer (eller bara S som de hette 1960), dock inte 1277 som gick i Kristinehamnstrakten vid denna tiden. Man ser att det är flera olika individer om man kikar närmare på detaljer som vattentankens utformning, gasbehållarens placering, tanklocket på sidan av kolfickan osv. Loket som tar vatten har samma utformning på tanklocket som 1277 i alla fall och är något av de senare loken. Flera vyer från hytten och när man ser från loket framåt mot banan är dock filmade ifrån ett E-lok ifall ni inte får ihop var sidotankarna tog vägen! :rolleyes: https://www.svtplay.se/video/31248586/sommartag |
Roligt att se att ditt projekt går framåt, kommer att bli ett otroligt fint lok.
När det gäller displacementmap på hela mesh så har jag lite dåliga erfarenheter av det, problemet är att få "höjden" att stämma överens mellan de olika objekten och texturerna. Dessutom blir det gärna förskjutningar i hörnen utanför uv't när man roterar och kan då ge väldigt konstiga effekter. Jag förmodar att du med displacement menar alfakanalen i normalmappen. På enstaka ganska flata objekt som t.e.x. som kolet i kolboxen eller fyren fungerar det bra. I fyren märkte jag också att en ganska överdriven displacementmap kan ge effekten av små lågor. Är också nyfiken på hur du konfigurerar (och scriptar) kolboxluckorna eftersom BLJ 6 också har lucka över kolboxen (i alla fall under BLJ-tiden). |
Exakt, med displacement menar jag att ta med alphakanalen i normal-mappen. Intressant med dina erfarenheter av det. Märkte att det var svårt att veta hur kraftfull effekten skulle bli när jag gick från Mixer till TRS2019, de har två helt olika tolkningssätt av höjden. Jag har inte hittat någonstans om det finns definierat hur stor en nyansskillnad i displacementmappen motsvarar i Trainz, men det kanske står någonstans så man kan räkna ut hur hög kontrast man vill ha. :rolleyes:
Intressant att du tar upp fyren som exempel. Jag hade tänkt att ge mig på den snart också och skulle vilja ha den animerad på något sätt så att den flammar och gärna så att färgen ändras beroende på fyrens temperatur. Kollade på hytten till QR PB15 loket som finns med i simuatorn, som har snygga sådana effekter. Tyvärr är texturerna i .texture-format så det är lite svårt att se hur man har gjort. Där har man i alla fall scriptat för att få till flammorna tror jag. Ska kolla närmare där sedan. Vill minnas att det fanns något inbyggt att man skulle namnge meshen till något speciellt för att detta skulle ske automatiskt på gamla TRS2006-tiden, men det kanske man har slopat? Hur har du gjort med fyren? :) Jag har animerat och exporterat höger och vänster tanklucka samt kolboxluckorna som separata mesher. Animationen går från stängda vid frame 0 till öppna vid frame 29. Sedan håller jag på med scriptingen. Jag stötte på ett problem där. När lastningen startar och stoppar så får man ett anrop från Trainz till lokets script som säger att en lastning håller på att sättas igång/stoppas som låter en göra saker som att starta/stoppa animationer eller rökeffekter, m.m. Det anropet skickar med en LoadingReport som ska innehålla vilken Queue som produkterna flyttas från och vilken Queue de flyttas till. Hade den faktiskt innehållit den datan så hade det varit trivialt att kolla om de flyttas till vatten- eller kol-queuen och bara öppna/stänga rätt lucka. Men tyvärr verkar så inte vara fallet, för den queuen är inte definierad (Eller satt till null som det heter). Jag ska undersöka saken närmare och kanske fråga om det på internationella forumet. Men det går att lösa på ett lite krångligare sätt genom att man kollar vilka produkter som producern (vattenskastaren/kolbryggan/etc.) erbjuder och ser om det är antingen en water eller coal asset. När jag klurat ut hur jag ska göra kan jag naturligtvis dela med mig av scriptet här för de som är intresserade! :) Om det är någon som har koll på något bra lok/tender där olika luckor öppnas beroende på om man lastar vatten eller kol, så får ni gärna säga till! |
1 bifogad(e) fil(er)
Kolbädden har jag satt upp ett material med emission i Blender.
Bifogad fil 80728 Bakade ut emission materialet, sparade av det för att kopiera över det till albedon i materialet för trainz (maskade förståss av allt utom kolbädden), sedan gjorde jag en svartvit version av mitt emission-materialet som sparade av för att sedan kopiera in det i det slutliga materialet för Trainz. Resten av fyrens, valvets och väggarnas material satte jag upp med "area light" under kolbädden och bakade ut och gjorde på samma sätt med kolbädden. Materialet till Trainz består av både kolbädden, fyrens väggar och valvet. Vad gäller displacementet på kolbädden använde jag mig av AO-mappen som ingick i PBR-materialet som jag laddat ned. Justerade den i Gimp så att de högsta punkterna var helt vita. Bakade ut den till lämplig ställe på Principeld BSDF (tror att jag valde metallic) och lade in den i normalmappens alphakanal. Vad gäller nivåerna i height i normalmappen så har jag förstått det så att Trainz tolkar det så att 100% vitt är i nivå med meshet och alla mörkare nyanser hamnar lägre än meshets nivå, vilket gör det ju väldigt svårt att få att fungera när det är ett komplicerat objekt som är texturerat. |
1 bifogad(e) fil(er)
Hade tänkt att lägga upp en bild på fyren i Trainz, men forumet ville tydligen inte att jag skulle posta den:mad:
Här kommer den (förhoppningsvis). Bifogad fil 80729 |
Alla tider är GMT +2. Klockan är nu 18:08. |
Powered by vBulletin® Version 3.7.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
© Svenska 3D-Tåg 2001-2009