Visa ett inlägg
Gammal 2021-01-27, 21:45   #81
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 716
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