Svenska 3D-Tåg - Forum  
 

Om det här är ditt första besök, se till att gå till vår FAQ (finns även länk till FAQ i navigeringsmenyn ovan). Du kan behöva att registrera dig innan du kan posta (finns även en länk till registrering i navigeringsmenyn ovan). För att titta på inlägg, välj det forum som du vill besöka från de som är listade nedan.

Gå tillbaka   Svenska 3D-Tåg - Forum > N3V Trainz > 3D-design - Trainz

Svara
 
Ämnesverktyg Visningsalternativ
Gammal 2020-05-26, 20:51   #1
Hawk
Veteran
 
Reg.datum: Aug 2001
Ort: Mölndal
Inlägg: 4 267
Standard

Citat:
Ursprungligen postat av korvtiger Visa inlägg
Som Lan säger så har detta projekt tagit en långpaus. Visst är jag lite sugen att någon gång i framtiden bygga klart den, men just för tillfället saknar jag dator som kan köra Trainz och som är tillräckligt kraftfull för att köra Blender. Men om några år kanske?
Tack för svar, så får man vänta...
__________________

Hawk besöker inte forumet just nu  
Svara med citat
Gammal 2021-01-27, 21:45   #2
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 728
Standard

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å!

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.


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:
rigging_question4.jpg
rigging_question3.jpg

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.
__________________
-k-
korvtiger besöker inte forumet just nu   Svara med citat
Gammal 2021-01-27, 22:04   #3
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 728
Standard

(Fortsättning från förra inlägget p.g.a. att jag nådde gränsen för max antal tecken.. )

----

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.
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.


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!


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!

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!
Bifogade filer
Filtyp: zip rigging_walschaerts.zip (233.6 KB, 30 visningar)
__________________
-k-
korvtiger besöker inte forumet just nu   Svara med citat
Gammal 2021-01-28, 17:34   #4
tanigardi
Medlem
 
Reg.datum: Nov 2009
Ort: Gävle
Inlägg: 163
Standard

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.
tanigardi besöker inte forumet just nu   Svara med citat
Gammal 2021-01-28, 18:34   #5
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 728
Standard

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.

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.
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.
__________________
-k-
korvtiger besöker inte forumet just nu   Svara med citat
Gammal 2021-02-01, 16:54   #6
tanigardi
Medlem
 
Reg.datum: Nov 2009
Ort: Gävle
Inlägg: 163
Standard

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

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
tanigardi besöker inte forumet just nu   Svara med citat
Gammal 2021-02-08, 17:50   #7
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 728
Standard

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.

Tills dess får ni njuta av den första bilden av loket inne i simulatorn!
Ingame_1.jpg

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!
__________________
-k-
korvtiger besöker inte forumet just nu   Svara med citat
Gammal 2021-02-09, 16:27   #8
tanigardi
Medlem
 
Reg.datum: Nov 2009
Ort: Gävle
Inlägg: 163
Standard

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

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
tanigardi besöker inte forumet just nu   Svara med citat
Svara


Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av
Forumhopp



Alla tider är GMT +2. Klockan är nu 16:19.


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