Notifications
Clear all

[Closed] Adding large rotation incremets on controllers

Hi there,

I’m having huge issues with my scripted controller for a car’s torque wheel.

I mean, all the automatic rotation calculations and such works just fine, that’s not what I’m having issues with.

What my issue is is I have a specific controller on my rig that adds additional “burn-out” torque to the specific rotation controller so that I can have wheels spinning extremely fast and “sliding” if I want to.

The problem becomes with very large rotation increments, suddenly the controller stop registering incremets greater than 360 degrees and registers only the values that somehow stop in-between the 0-360 degree range, so, in reality the wheel doesn’t spin, but jitters.

I noticed that the values returned by the controller are actually that, between the 0-360 degrees, but the scripted controller is adding extremely large values, correctly, as I’d expect (the multiplier on the spin of the wheels).

Do you have any idea how to solve this issue?

I’ve read about angleAxis values, but I’m not really sure how I can apply these to my rotation on a single axis on the controller.

Thanks in advance for any tips and hints. Cheers…

3 Replies
 PEN

What controller and which track are you trying to use? What does your code look like?

Hey, Paul, thanks for looking at this! I appretiate it.

As for a controller, it’s a standard Bezier_XYZ controller in a rotation track, though it’s a part of a listed controller which has:

  • base frozen rotation Bezier_XYZ
  • procedural Bezier_XYZ controller with a float_script controller on the X rot. axis
  • generic Bezier_XYZ controller to which I’m trying to writhe the resulting procedural animation from the controller below, essentially baking it down to this layer.

I figured out a work-around, though, in the mean time. I’m not directly assigning from the second controller’s value to the third’s, I’m asking for the current X_rotation value on the second controller (the procedural one, float_script) and assigning this value to the thirh one’s x_rotation.

This works as the x_rotation value keeps adding up to great numbers (above 4000 and so), however, the entire controller’s value, being a quaterninon, was only between the range -Pi and +Pi, so that’s why I was only getting a partial rotation on the wheel, not a 360 degree + spin.

I hope I’m making any sense It’s rather simple, but difficult to explain in words.

honestly i don’t completely understand the problem. but maybe wiring of controllers can help:


(
	tp = Teapot radius:10
	c = tp.rotation.controller = rotation_list()
	s = c.available.controller = euler_xyz()
	tp.rotation.controller.weight[2] = 0
	scr = s.z_rotation.controller = float_script()
	scr.SetExpression "10*F" 
	rot = c.available.controller = euler_xyz()
	paramWire.connect s[#z_rotation] rot[#z_rotation] "Z_Rotation"
)

if it’s not what you are looking for, please make a simple scene to illustrate the issue.