Jump to content


Photo

WIP: Bike (interactive prop)


  • Please log in to reply
34 replies to this topic

#1 jamoram62

jamoram62

    Master Director

  • Members
  • 874 posts
  • Gender:Male
  • Location:3724'21.05"N 00559'14.69"W

Posted 31 January 2017 - 07:43 PM

I've just started to work in a new held prop, an animated bike. I'm planning to include animations for the puppet walking while steering the bike and, of course, riding it.

 

I can't say when it will be finished, though, if ever... For a change, I'd like to devote some time to my own movie projects, abandoned for so long.

 


ars longa vita brevis - Hippocrates (attributed)
 
If you want to tell jokes then use Muvizu; if you want to make 'Movies', use iClone; but if you want to tell stories, use Moviestorm - PrimaveraNZ
 
Shared addons & stuff for Moviestorm: https://drive.google...aTNsSFBuN0sxZHM


#2 primaveranz

primaveranz

    Master Director

  • Pioneers
  • 5350 posts
  • Gender:Male

Posted 31 January 2017 - 08:32 PM

Another brilliant idea!
I don't know if you will have much luck animating the puppet with its feet off the floor (unless you put it on a navmesh, but if it is possible, then I'm sure you will figure it out ;)

"If we only use 1/3 of our brain, what's the other 1/3 for?"


#3 jamoram62

jamoram62

    Master Director

  • Members
  • 874 posts
  • Gender:Male
  • Location:3724'21.05"N 00559'14.69"W

Posted 01 February 2017 - 06:10 PM

I don't know if you will have much luck animating the puppet with its feet off the floor (unless you put it on a navmesh, but if it is possible, then I'm sure you will figure it out ;)

 

You've raised a very interesting question and I can't give you an answer right now. I can only offer some speculation. AFAIK interaction with held props are transitions of the Animation kind and should have no issues driving the root bone, as far as they also include some transformation of any of the bones in the legs. To be honest, I'm not sure if I've ever seen a held prop involving a translation/rotation of the puppet's root bone, but today I'm a bit under the weather and my memory's not at its best either. So may be I'm wrong and it's not possible at all.

 

Besides, I'm thinking about trying to implement this thing as an interactive prop, instead of a held prop, though again I can't remember any asset of this kind involving a transformation of the objects's root bone.

 

Anyway, I'll try to sketch the animations I'm planning and see whether they work as intended or not, so  I'd need to resort to the navmesh routine again.

 

 

 

 

 


ars longa vita brevis - Hippocrates (attributed)
 
If you want to tell jokes then use Muvizu; if you want to make 'Movies', use iClone; but if you want to tell stories, use Moviestorm - PrimaveraNZ
 
Shared addons & stuff for Moviestorm: https://drive.google...aTNsSFBuN0sxZHM


#4 aroundworld

aroundworld

    Master Director

  • Pioneers
  • 878 posts
  • Gender:Male
  • Location:USA
  • Interests:Film - writing - directing - aviation - traveling - machinema - reading - acting -

Posted 04 February 2017 - 12:21 AM

Such an innovative Idea!  I hope you find time to finish it!

 

Cheers!!!!


There is no try, only do or do not.

 

Learn story telling in the MOVIESTORM education forum. 

 

START HERE:  http://www.moviestor...showtopic=13153


#5 jamoram62

jamoram62

    Master Director

  • Members
  • 874 posts
  • Gender:Male
  • Location:3724'21.05"N 00559'14.69"W

Posted 05 February 2017 - 06:53 PM

 

Besides, I'm thinking about trying to implement this thing as an interactive prop, instead of a held prop, though again I can't remember any asset of this kind involving a transformation of the objects's root bone.

 

 

 

It's almost definitive: animations of the Held Prop class should not involve any kind of transformation of the puppet's root bone in any way, ie, just the same as Gestures. Doing otherwise, Moviestorm's animation engine will get confused and the most weird things will happen. Clearly, Movistorm is trying all the time preserve the relative position between the root bones, so, for example, the puppet may walk without the prop being left behind.

 

So my next try: the bike as an Interactive Prop. The big question remains: will Interactive props accept local translations of the root bones? We'll know soon.
 


ars longa vita brevis - Hippocrates (attributed)
 
If you want to tell jokes then use Muvizu; if you want to make 'Movies', use iClone; but if you want to tell stories, use Moviestorm - PrimaveraNZ
 
Shared addons & stuff for Moviestorm: https://drive.google...aTNsSFBuN0sxZHM


#6 Xolotl

Xolotl

    Master Director

  • Pioneers
  • 429 posts

Posted 06 February 2017 - 06:38 PM

Phew! That looks amazing.

I've always wanted my actors to ride around on a bike!

 

 



#7 jamoram62

jamoram62

    Master Director

  • Members
  • 874 posts
  • Gender:Male
  • Location:3724'21.05"N 00559'14.69"W

Posted 07 February 2017 - 08:45 PM

Lesson learned #15371: when creating an interactive prop, be sure the root bone of the object prop is centered at the origin before starting to animate, especially if animation includes any translation of the subject puppet's root bone. Then check it again thrice.

 

 


ars longa vita brevis - Hippocrates (attributed)
 
If you want to tell jokes then use Muvizu; if you want to make 'Movies', use iClone; but if you want to tell stories, use Moviestorm - PrimaveraNZ
 
Shared addons & stuff for Moviestorm: https://drive.google...aTNsSFBuN0sxZHM


#8 jamoram62

jamoram62

    Master Director

  • Members
  • 874 posts
  • Gender:Male
  • Location:3724'21.05"N 00559'14.69"W

Posted 08 February 2017 - 06:12 PM

Got some work done!  Still incredible crude and preliminary, with lots of things to fix, but it has taken a bit more than expected because of an unexpected issue which I have finally identified and managed to devise a way to fix, though I don't know yet what's its reason: when the root bone for the puppet is translated its y-relative increment for its world position relative turns out to be inverted, so a translation backwards in the animation environment generates a translation forward in the .caf generated!

 

A very preliminary clip: https://drive.google...VFB5T0RQbFZSVUU

 

 

 

BTW, forget about lesson #15371: according to my recent experience, it's the puppet the one which must start the animation sequence centered.


ars longa vita brevis - Hippocrates (attributed)
 
If you want to tell jokes then use Muvizu; if you want to make 'Movies', use iClone; but if you want to tell stories, use Moviestorm - PrimaveraNZ
 
Shared addons & stuff for Moviestorm: https://drive.google...aTNsSFBuN0sxZHM


#9 jamoram62

jamoram62

    Master Director

  • Members
  • 874 posts
  • Gender:Male
  • Location:3724'21.05"N 00559'14.69"W

Posted 10 February 2017 - 09:38 AM

... it has taken a bit more than expected because of an unexpected issue which I have finally identified and managed to devise a way to fix, though I don't know yet what's its reason: when the root bone for the puppet is translated its y-relative increment for its world position relative turns out to be inverted, so a translation backwards in the animation environment generates a translation forward in the .caf generated!
 

 
UPDATE: it seems the issue is related to a disagreement between FragMotion/Milkshape 3D and Moviestorm about the arrangement of the X & Y axis. This image illustrates the deducted arrangement for both environments:
 
Attached File  Clipboard01.jpg   64.87KB   1 downloads
 
 
What's most puzzling about this is that it only shows up when executing an animation of a prop or puppet (solo or interaction) which includes a translation of the root bone. Rotations of the root bone and local translations and rotations of child bones behave as expected.
 
So, in order to get the animation executed as intended in Moviestorm, these transformations should be applied to every keyframe in the track for the root bone in the animation file (.caf):
 

TranslationXMoviestorm   <-  TranslationYFragMotion

TranslationYMoviestorm   <-  -1 * TranslationXFragMotion

 
 
NOTE: original text of the post deleted.

ars longa vita brevis - Hippocrates (attributed)
 
If you want to tell jokes then use Muvizu; if you want to make 'Movies', use iClone; but if you want to tell stories, use Moviestorm - PrimaveraNZ
 
Shared addons & stuff for Moviestorm: https://drive.google...aTNsSFBuN0sxZHM


#10 jamoram62

jamoram62

    Master Director

  • Members
  • 874 posts
  • Gender:Male
  • Location:3724'21.05"N 00559'14.69"W

Posted 13 February 2017 - 05:31 PM

BTW, work is progressing now at a good pace...

 

Attached File  2017-02-13_183220.jpg   70.35KB   0 downloads

 

See also: http://www.moviestor...w&vid_id=111920

 

 


ars longa vita brevis - Hippocrates (attributed)
 
If you want to tell jokes then use Muvizu; if you want to make 'Movies', use iClone; but if you want to tell stories, use Moviestorm - PrimaveraNZ
 
Shared addons & stuff for Moviestorm: https://drive.google...aTNsSFBuN0sxZHM


#11 aroundworld

aroundworld

    Master Director

  • Pioneers
  • 878 posts
  • Gender:Male
  • Location:USA
  • Interests:Film - writing - directing - aviation - traveling - machinema - reading - acting -

Posted 13 February 2017 - 08:39 PM

This is just stunning Jam!... Wow!   I am envious of you're work and skill. Thank you!


There is no try, only do or do not.

 

Learn story telling in the MOVIESTORM education forum. 

 

START HERE:  http://www.moviestor...showtopic=13153


#12 Nahton

Nahton

    Master Director

  • Pioneers
  • 927 posts

Posted 14 February 2017 - 05:14 AM

I agree, this is amazing stuff. Great bicycle animation Jam.

 

I'm shaking off the rust to try to figure out what you are saying about the translation and the axis. From your bike screenshot it looks like you using the same alignment in Fragmo I used to use.

 

I made a prop that was carried,the staff in my giant fantasy pack (that consists of only the staff) which was carried and used in a jumping animation. That should be the same concept as riding a bike, unless I'm confused and missing something.  I never had to transform any root bone transformations. It followed along the lines of the the held prop tutorial with animations for the puppet and prop with the same name put in the appropriate folders....but...I think you may be missing the setting of the verbs in Moviestorm if there is any movement at all of the root bone from it's original position to the end position. 

 

Hmmmm.... I just took some time to look through some of your threads. You are using Reacher's puppets, same as me. And I see you know about setting verbs, so I guess I'm most likely wrong on that point. 

 

Anyway,  it looks like you found your solution with the transform action. That's a scripting solution I wouldn't have arrived at :-)

 

It makes me wonder if you could have solved some of the issues I ran into importing animations to the Moviestorm puppets.



#13 jamoram62

jamoram62

    Master Director

  • Members
  • 874 posts
  • Gender:Male
  • Location:3724'21.05"N 00559'14.69"W

Posted 14 February 2017 - 08:10 AM


I'm shaking off the rust to try to figure out what you are saying about the translation and the axis. From your bike screenshot it looks like you using the same alignment in Fragmo I used to use.

 

...

 

You are using Reacher's puppets, same as me. And I see you know about setting verbs...

...

 

I think so: z-axis upwards from the puppet's point of view. Here you the layout:

 

Attached File  2017-02-14_074450.jpg   195.51KB   1 downloads

 

This is the StateMachine file, with machine states and the definition of the transitions for both the puppet (subject) and the bike (object):

 

 

<StateMachine>
  <NameMap>
    <State>
      <name>JMHBP_BIKEHELD</name>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </State>      
    <State>
      <name>JMHBP_WALKING</name>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </State>    
    <State>
      <name>JMHBP_MOUNT</name>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </State>        
    <State>
      <name>JMHBP_RIDING</name>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </State>      
 
 
 
  </NameMap>     
 
  <NameMap>

    <AnimTransition>
      <menuPath>Interact/Bike/bike_get</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_get</name>
      <startState>IDLE</startState>
      <nextState>JMHBP_BIKEHELD</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>  
    <AnimTransition>
      <menuPath>Interact/Bike/bike_hold12</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_hold12</name>
      <startState>JMHBP_BIKEHELD</startState>
      <nextState>JMHBP_BIKEHELD</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>     
    <AnimTransition>
      <menuPath>Interact/Bike/bike_hold24</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_hold24</name>
      <startState>JMHBP_BIKEHELD</startState>
      <nextState>JMHBP_BIKEHELD</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>     
    <AnimTransition>
      <menuPath>Interact/Bike/bike_leave</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_leave</name>
      <startState>JMHBP_BIKEHELD</startState>
      <nextState>IDLE</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>  
 
    <AnimTransition>
      <menuPath>Interact/Bike/bike_walk_start</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_walk_start</name>
      <startState>JMHBP_BIKEHELD</startState>
      <nextState>JMHBP_WALKING</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>
    <AnimTransition>
      <menuPath>Interact/Bike/bike_walk_loop</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_walk_loop</name>
      <startState>JMHBP_WALKING</startState>
      <nextState>JMHBP_WALKING</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>
    <AnimTransition>
      <menuPath>Interact/Bike/bike_walk_stop</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_walk_stop</name>
      <startState>JMHBP_WALKING</startState>
      <nextState>JMHBP_BIKEHELD</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>    
    
    <AnimTransition>
      <menuPath>Interact/Bike/bike_mount</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_mount</name>
      <startState>JMHBP_BIKEHELD</startState>
      <nextState>JMHBP_MOUNT</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>
    <AnimTransition>
      <menuPath>Interact/Bike/bike_mounted12</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_mounted12</name>
      <startState>JMHBP_MOUNT</startState>
      <nextState>JMHBP_MOUNT</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>     
    <AnimTransition>
      <menuPath>Interact/Bike/bike_mounted24</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_mounted24</name>
      <startState>JMHBP_MOUNT</startState>
      <nextState>JMHBP_MOUNT</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>     
    <AnimTransition>
      <menuPath>Interact/Bike/bike_ride_start</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_ride_start</name>
      <startState>JMHBP_MOUNT</startState>
      <nextState>JMHBP_RIDING</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>     
    <AnimTransition>
      <menuPath>Interact/Bike/bike_ride</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_ride</name>
      <startState>JMHBP_RIDING</startState>
      <nextState>JMHBP_RIDING</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>
    <AnimTransition>
      <menuPath>Interact/Bike/bike_ridenp</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_ridenp</name>
      <startState>JMHBP_RIDING</startState>
      <nextState>JMHBP_RIDING</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>     
    <AnimTransition>
      <menuPath>Interact/Bike/bike_ride_stop</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_ride_stop</name>
      <startState>JMHBP_RIDING</startState>
      <nextState>JMHBP_MOUNT</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>     
    <AnimTransition>
      <menuPath>Interact/Bike/bike_umount</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>interact/bike/bike_umount</name>
      <startState>JMHBP_MOUNT</startState>
      <nextState>JMHBP_BIKEHELD</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </AnimTransition>     

    
    
    <AnimTransition>
      <menuPath>bike_get</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_get</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    <AnimTransition>
      <menuPath>bike_hold12</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_hold12</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    <AnimTransition>
      <menuPath>bike_hold24</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_hold24</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    <AnimTransition>
      <menuPath>bike_leave</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_leave</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>

    <AnimTransition>
      <menuPath>bike_walk_start</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_walk_start</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    <AnimTransition>
      <menuPath>bike_walk_loop</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_walk_loop</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    <AnimTransition>
      <menuPath>bike_walk_stop</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_walk_stop</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    
    <AnimTransition>
      <menuPath>bike_mount</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_mount</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    <AnimTransition>
      <menuPath>bike_mounted12</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_mounted12</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    <AnimTransition>
      <menuPath>bike_mounted24</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_mounted24</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    <AnimTransition>
      <menuPath>bike_ride_start</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_ride_start</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    <AnimTransition>
      <menuPath>bike_ride</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_ride</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    <AnimTransition>
      <menuPath>bike_ridenp</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_ridenp</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>    
    <AnimTransition>
      <menuPath>bike_ride_stop</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_ride_stop</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>        
    <AnimTransition>
      <menuPath>bike_umount</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>1.0</soundLevel>
      <interest>0</interest>
      <name>bike_umount</name>
      <resources class="enum-set" enum-type="Resource"></resources>
    </AnimTransition>        
  </NameMap>
</StateMachine>

 

And the Verbs file:

 

 

<vector>

  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_get</animA>
    <animB>bike_get</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Get bike</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>
  </PropVerb>
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_hold12</animA>
    <animB>bike_hold12</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Hold 0.5 sec</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>
  </PropVerb>   
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_hold24</animA>
    <animB>bike_hold24</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Hold 1 sec</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>
  </PropVerb>   
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_leave</animA>
    <animB>bike_leave</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Leave</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>    
  </PropVerb>   
 
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_walk_start</animA>
    <animB>bike_walk_start</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Start walk with bike</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>    
  </PropVerb>  
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_walk_loop</animA>
    <animB>bike_walk_loop</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Walk with bike</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>        
  </PropVerb>
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_walk_stop</animA>
    <animB>bike_walk_stop</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Stop walking with bike</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>        
  </PropVerb>   
 
 
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_mount</animA>
    <animB>bike_mount</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Mount bike</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>        
  </PropVerb>
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_mounted12</animA>
    <animB>bike_mounted12</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Mounted 0.5 sec</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>        
  </PropVerb>
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_mounted24</animA>
    <animB>bike_mounted24</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Mounted 1 sec</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>        
  </PropVerb>  
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_ride_start</animA>
    <animB>bike_ride_start</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Start Riding</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>        
  </PropVerb>   
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_ride</animA>
    <animB>bike_ride</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Ride</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>        
  </PropVerb>
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_ridenp</animA>
    <animB>bike_ridenp</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Ride (not pedaling)</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>        
  </PropVerb>   
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_ride_stop</animA>
    <animB>bike_ride_stop</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Stop Riding</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>        
  </PropVerb>   
  <PropVerb>
    <modelB>Bike</modelB>
    <animA>interact/bike/bike_umount</animA>
    <animB>bike_umount</animB>
    <rot180Subj>false</rot180Subj>
    <name>Bike/Get off the bike</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>        
  </PropVerb>   

 
</vector>

 

What I've found about Puppet-Prop interaction animations thus far:

1) Puppet should start the animation sequence centered and in its default pose (IDLE state).

2) Prop should start displaced in relation to the puppet.

3) No transformation (ie, translation or rotation) of the Prop's root bone will work when executed on Moviestorm. For example, for the tilting of the bike, at first I used a rotation of the root bone to no avail. I needed to create a new bone (and made it the parent for every else bone) at the same position of the root bone to this only purpose:

 

Attached File  2017-02-14_075504.jpg   39.21KB   1 downloads

 

This means the prop can be moved only by using one of these approaches:

- flagging it as mobile prop, but, CAVEAT EMPTOR: puppet won't follow him!

- placing it (and the puppet) on a navmesh. I've been wondering if making a navmesh part of it will work... Have to try.

 

I don't know whether this is always the case or there are some conditions to be met for the transformations of the prop's root bone being executed (in a similar fashion as it happens with the puppet's: they're ignored unless they concur with a transformation of any leg bone in any keyframe of the animation)

 

 

4) Both rotations and transformations can be applied to the puppet's root bone and they will work... somehow. No issues at all with rotations. But translations is a completely different thing, because of this apparent disagreement in the orientation of the x & y axis.

 

 

I made a prop that was carried,the staff in my giant fantasy pack (that consists of only the staff) which was carried and used in a jumping animation. That should be the same concept as riding a bike, unless I'm confused and missing something.  I never had to transform any root bone transformations. It followed along the lines of the the held prop tutorial with animations for the puppet and prop with the same name put in the appropriate folders....but...I think you may be missing the setting of the verbs in Moviestorm if there is any movement at all of the root bone from it's original position to the end position.

 

In a held prop animation you shouldn't (though from a technical point of view I think they're not strictly forbidden) apply any transformation to the puppet's bone root, but this is an character-prop interaction animation. In this case, some translations (and rotations) of the puppet's root bone were required throughout the animation of the puppet mounting the bike:

 

https://drive.google...aWVIRFJGU2pPWVU

 

 

And here you are a clip demo'ing the axis disagreement (sequence: -Y -X +X +Y Note the puppet's pointing in the expected direction of the translation - also pointing with a finger extended means a movement along the X axis, and two fingers extended, the Y axis; a thumb up means a movement in the positive direction, and a thumb down, in the negative direction):

 

https://drive.google...aUk2QnZBZm5FbUE

 

 

And the same once the .caf file is applied the transformation to every keyframe of the root bone:

 

TranslationXMoviestorm   <-  TranslationYFragMotion

TranslationYMoviestorm   <-  -1 * TranslationXFragMotion

 

https://drive.google...SV9ySm9BR3RSVGc

 

 

The current look of the Cal3D Toolbox with the new functionality for batch transformation of animation files:

 

Attached File  2017-02-14_132355.jpg   42.54KB   1 downloads

 

 

 

 


ars longa vita brevis - Hippocrates (attributed)
 
If you want to tell jokes then use Muvizu; if you want to make 'Movies', use iClone; but if you want to tell stories, use Moviestorm - PrimaveraNZ
 
Shared addons & stuff for Moviestorm: https://drive.google...aTNsSFBuN0sxZHM


#14 jamoram62

jamoram62

    Master Director

  • Members
  • 874 posts
  • Gender:Male
  • Location:3724'21.05"N 00559'14.69"W

Posted 14 February 2017 - 08:53 AM

This is just stunning Jam!... Wow!   I am envious of you're work and skill. Thank you!

 

Thank you so much. And I'd swap them without hesitation for your craftmanship and talent for screenwriting, 'cause a bad director will easily make an entirely forgettable movie of a superb script, but the best director in the world won't be able to make a good film of a lousy script.

 


ars longa vita brevis - Hippocrates (attributed)
 
If you want to tell jokes then use Muvizu; if you want to make 'Movies', use iClone; but if you want to tell stories, use Moviestorm - PrimaveraNZ
 
Shared addons & stuff for Moviestorm: https://drive.google...aTNsSFBuN0sxZHM


#15 BrianGray

BrianGray

    Director

  • Members
  • 143 posts
  • Gender:Male
  • Location:California

Posted 14 February 2017 - 05:01 PM

GREAT Work My Friend...

 

 

Brian

 



#16 Nahton

Nahton

    Master Director

  • Pioneers
  • 927 posts

Posted 15 February 2017 - 12:18 AM

 

I think so: z-axis upwards from the puppet's point of view. Here you the layout:

 

Yes, that's the same orientation.

 

This is the StateMachine file, with machine states and the definition of the transitions for both the puppet (subject) and the bike (object):

I'm afraid this isn't going to help me for a quick response. i was looking at my fantasy pack StateMachine file last night and asked myself "Do I do this?" I know it's put together in the workshop but still, I'm a kind of far removed from remembering all the details. With all the detail you've provided here I'm reassured I'm waaaaay out of my league speaking to this but here goes. 

 

And the Verbs file:

 

 

What I've found about Puppet-Prop interaction animations thus far:

1) Puppet should start the animation sequence centered and in its default pose (IDLE state).

2) Prop should start displaced in relation to the puppet.

3) No transformation (ie, translation or rotation) of the Prop's root bone will work when executed on Moviestorm. For example, for the tilting of the bike, at first I used a rotation of the root bone to no avail. I needed to create a new bone (and made it the parent for every else bone) at the same position of the root bone to this only purpose:

 

1 & 2 make sense. For #3 are you saying you made a new root bone and made the original root bone and the new root bone was the one you rotated? I wonder if this is similar to the puppet having a root and a pelvic bone in the same location and something that is required due to the script.

 

This means the prop can be moved only by using one of these approaches:

- flagging it as mobile prop, but, CAVEAT EMPTOR: puppet won't follow him!

- placing it (and the puppet) on a navmesh. I've been wondering if making a navmesh part of it will work... Have to try.

 

I don't know whether this is always the case or there are some conditions to be met for the transformations of the prop's root bone being executed (in a similar fashion as it happens with the puppet's: they're ignored unless they concur with a transformation of any leg bone in any keyframe of the animation)

It's too bad Ben isn't around to answer this. Because I think you are engaging in an animation technique that I'm not sure has been done with any proprietary assets. Do you know of any or do you also believe you are breaking new ground here? 

 

4) Both rotations and transformations can be applied to the puppet's root bone and they will work... somehow. No issues at all with rotations. But translations is a completely different thing, because of this apparent disagreement in the orientation of the x & y axis.

 

I believe I employed a translation of the root bone to execute a jump and did not have an issue with the intended direction. Most my animation was done with the skeleton animation widget using the rotation and transform tools. I only used transformation when I merged or imported mocap animations and I stumbled about a good bit when trying to work with that tool. 

 

 

In a held prop animation you shouldn't (though from a technical point of view I think they're not strictly forbidden) apply any transformation to the puppet's bone root, but this is an character-prop interaction animation. In this case, some translations (and rotations) of the puppet's root bone were required throughout the animation of the puppet mounting the bike:

 

So I realized after I posted that you were not using a held prop workflow because I had another unfinished mod for dynamite where one of the animations was for the character to pick it up off the ground and throw it. The only problem was that the dynamite moved in synch with the character's breathing until you shut it off. Again, I believe you are breaking new ground here unless I'm missing something. 

 

https://drive.google...aWVIRFJGU2pPWVU

 

 

And here you are a clip demo'ing the axis disagreement (sequence: -Y -X +X +Y Note the puppet's pointing in the expected direction of the translation - also pointing with a finger extended means a movement along the X axis, and two fingers extended, the Y axis; a thumb up means a movement in the positive direction, and a thumb down, in the negative direction):

 

https://drive.google...aUk2QnZBZm5FbUE

 

 

And the same once the .caf file is applied the transformation to every keyframe of the root bone:

 

TranslationXMoviestorm   <-  TranslationYFragMotion

TranslationYMoviestorm   <-  -1 * TranslationXFragMotion

 

https://drive.google...SV9ySm9BR3RSVGc

 

 

The current look of the Cal3D Toolbox with the new functionality for batch transformation of animation files:

 

attachicon.gif2017-02-14_132355.jpg

 

 

Someday I may have to take a closer look at this tool. It looks awesome.

 

Keep up the good work!!

 

 



#17 Nahton

Nahton

    Master Director

  • Pioneers
  • 927 posts

Posted 15 February 2017 - 04:18 AM

I had one follow-up thought.what is your workflow now using your CAL3D toolbox?

I used to go from Fragmo export to MS3D, import to Misfit and convert to CAL3D from Misfit. Maybe Misfit provided the needed corrections on the axis.

#18 jamoram62

jamoram62

    Master Director

  • Members
  • 874 posts
  • Gender:Male
  • Location:3724'21.05"N 00559'14.69"W

Posted 15 February 2017 - 06:54 AM

I had one follow-up thought.what is your workflow now using your CAL3D toolbox?

I used to go from Fragmo export to MS3D, import to Misfit and convert to CAL3D from Misfit. Maybe Misfit provided the needed corrections on the axis.

 

Never thought of it. I use to go thru Milkshape 3D for exporting to Cal3D.

 

I've tried as suggested and the animation runs without a glitch on Misfit, though in the end the results are the same, ie, translations along the X & Y axis need to be transformed in order to be correctly executed on Moviestorm. The only difference I've noticed is Milkshape 3D interpolates between keyframes and Misfit doesn't. 

 

Thank you anyway for your suggestion: at least now we know Milkshape's not the one to blame.
 


ars longa vita brevis - Hippocrates (attributed)
 
If you want to tell jokes then use Muvizu; if you want to make 'Movies', use iClone; but if you want to tell stories, use Moviestorm - PrimaveraNZ
 
Shared addons & stuff for Moviestorm: https://drive.google...aTNsSFBuN0sxZHM


#19 jamoram62

jamoram62

    Master Director

  • Members
  • 874 posts
  • Gender:Male
  • Location:3724'21.05"N 00559'14.69"W

Posted 15 February 2017 - 08:45 AM

This is the StateMachine file, with machine states and the definition of the transitions for both the puppet (subject) and the bike (object):

I'm afraid this isn't going to help me for a quick response

 

Sorry, I realize it was a bit too long and boring quote... Conceptually, interaction animations are not that complicated: they just involve two actors and the transitions (and states) for both of them must be defined in the StateMachine file. So far so good: thery're exactly the same as a held prop animation, with only one difference: in held prop animations, puppet's transitions sequences should start in (and ideally end into) the NEUTRAL state, ie; on the other hand, in interaction animations, the sequence may start in the IDLE state, though it seems this is not strictly necessarily or it's taken for granted, eg: in Shirley Martin's interactive assets, the sequences seems to start directly from a specific state (ie, MRailing_Lean01_Start, STARTUSEALARM_FEMALE, etc).

 

Regarding the Verbs file, the verbs for these kind of animations need to specify both the subject (a puppet) and the object (the prop, in this case -may be a second character), and the transitions for each one of them, if any, eg:

 

  <PropVerb>
    <modelB>Technology/Computing/Computer_on_Desk_01</modelB>
    <animA>interact/computer_on_desk/3_gaming</animA>
    <animB>3_gaming</animB>
    <rot180Subj>false</rot180Subj>
    <name>Computer/Play Game</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>
  </PropVerb>

 

 

  <PropVerb>

    <modelB>Music/Keyboard/Music_Keyboard_02</modelB>
    <animA>interact/piano/piano_loop_01</animA>
    <rot180Subj>false</rot180Subj>
    <name>Keyboard/Keyboard Loop 1</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>
  </PropVerb>

 

In the second example, no animation is specified for the object (piano), but only for the puppet. 

 

 

It's too bad Ben isn't around to answer this.

 

BTW I think Ben was paying a visit to the forums yesterday...

 

 

Because I think you are engaging in an animation technique that I'm not sure has been done with any proprietary assets. Do you know of any or do you also believe you are breaking new ground here?

 

Well, I've mentioned before one the most interesting and complex assets of this kind: the Desktop Computer by Chris Ollie. In some respects, it's kind of a conumdrum wrapped inside a riddle to me, for it has some oddities I've never seen before. To start with: the initial animation starting the sequence is defined as a gesture transition (!?):

 

    <GestureTransition>
      <melodrama>0.5</melodrama>
      <weights/>
      <tags/>
      <menuPath>Interact/Computer_on_Desk/SitDown</menuPath>
      <soundTime>0.0</soundTime>
      <soundLevel>0.0</soundLevel>
      <interest>0</interest>
      <name>interact/computer_on_desk/sitdown</name>
      <startState>IDLE</startState>
      <nextState>SAT_AT_COMPUTER</nextState>
      <resources class="enum-set" enum-type="Resource">LEFT_ARM,RIGHT_ARM,TORSO,LEFT_LEG,RIGHT_LEG</resources>
    </GestureTransition>

 

And the verb remarks the same:

 

  <PropVerb>
    <modelB>Technology/Computing/Computer_on_Desk_01</modelB>
    <animA class="gesture">interact/computer_on_desk/sitdown</animA>
    <animB class="gesture">sitdown</animB>
    <rot180Subj>false</rot180Subj>
    <name>Computer/Sit Down at Computer</name>
    <subjectClass>mscope.things.Character</subjectClass>
    <objectClass>mscope.things.Prop</objectClass>
  </PropVerb>

 

That alone is might puzzling. But there's another thing. Look at the animation: https://drive.google...cHRvZ1l0amV2dEU

 

First, note that the puppet starts the animation out of the coordinate origin. Every time I've tried this with my bike thing, the puppet's always moved and started the animation from the origin. I've tried everything I've been able to think of in order to reproduce the same schema, to no avail.

 

I noticed the prop in Chris Ollie's contraption included a floor piece, and thought it may be the key to success. So I copied it and made it part of the bike prop, but once again the smegging smeghead of the puppet smegged it and started from the origin as usual. So I gave up and sticked to the approach I've described before: starting the puppet animation sequence from the centered idle position and displacing the prop. It's the only approach that has worked for me. Maybe there is some option or configuration setting in Fragmotion I'm missing but thus far. I'm still working on it.

 

 

I believe I employed a translation of the root bone to execute a jump and did not have an issue with the intended direction.

 

To be honest, it's the first time I've created an animation involving a root bone translation in the XY plane; in the past I've used rotations and translations along the Z-axis with no issues.

 

 

So in the end it seems other approaches are possible; I'm mostly intrigued by Chris' in his desktop computer. Why it hasn't worked for me, I can't say. Maybe it's an issue with the animation tools I'm using, maybe I'm just stupid enough to miss what's obvious.

 

More research is needed. And this is good...

 

 

 

 

 

 

 

 

 


ars longa vita brevis - Hippocrates (attributed)
 
If you want to tell jokes then use Muvizu; if you want to make 'Movies', use iClone; but if you want to tell stories, use Moviestorm - PrimaveraNZ
 
Shared addons & stuff for Moviestorm: https://drive.google...aTNsSFBuN0sxZHM


#20 Nahton

Nahton

    Master Director

  • Pioneers
  • 927 posts

Posted 16 February 2017 - 03:06 AM

Interesting. You've identified another puppet-prop animation that is similar in nature. I'm not sure I can provide an explanation unless the source code was altered somehow. Chris did work for Moviestorm at one time before providing his own independent mods. He must have had enough inside knowledge or help to make it work. 




  • Please log in to reply


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users