Notifications
Clear all

[Closed] Can impossible be possible? (The real challenge)

Oh, I hid the link in my post as well. Highlight the underlined ‘.

-Eric

I gave this challenge a try but didn’t succeded.
I first made a test script to get the concept.

delete $*
slidertime = 0
Pa = Point pos:[0,0,0] wirecolor:(color 200 0 0)
Pb = Point pos:[0,0,100] wirecolor:(color 200 0 0)
Offset = Pb.transform*inverse(Pa.transform)
Pb.transform = Offset*Pa.transform
Pa.transform = Pb.transform*inverse(Offset)
parentWay = 0
oldParentWay = 1

at time 10 (Pa.transform = (matrix3 [0,0,-1] [0,1,0] [1,0,0] [0,0,0])) 
at time 20 (Pb.transform = (matrix3 [0,0,-1] [-1,0,0] [0,1,0] [100,0,0])) 
for i in 0 to 20 do
(
at time i
	(
	if (i == 11) then (parentWay = 1)
	if (i == 21) then (parentWay = 0)
	if (parentWay == 0) then
		(
		Pb.transform = Offset*Pa.transform
		Offset = Pb.transform*inverse(Pa.transform)
		)
	if (parentWay == 1) then
		(
		Pa.transform = inverse(Offset)*Pb.transform
		Offset = Pb.transform*inverse(Pa.transform)
		)
	--format "% %
" i Offset
	oldParentWay = parentWay
	)
)

Couldn’t find a way to store transformation beetwen changing state of the system in real time.

I tried something simpler to get new ideas and here’s where I stop.
I created a controller based sytem who work but only with position.
Just feeding values from the 2 nodes with constraint list
B.parent = A
A.pos[2] get B.pos[1] in poslist[2] (move A when B moving)
B.pos[2] get -B.pos[1] in poslist[2] (counter animate)

I did several tests with Proxy Manipulator Controller and it seems I got good start with this task. It also seems stable with Biped.

Step-by-step.

  1. Create two objects (can be in same position)
  2. Assign Proxy Manipulator(PM) controller to one of them.
  3. Add another object to PM controller
  4. Switch on “Enable Rotation” and “Rotate about Manipulator”
  5. Set “Num keys” = 1

Any way is needs more test. So will be good if someone will test it too.

p.s. Personally I’m looking solution for “link” Biped with CAT rigs what to have possibility to control as by one unit.

1 Reply
(@archangel35757)
Joined: 11 months ago

Posts: 0

I don’t believe the ProxyManipulator Controller will work (unless the code has been revised for later versions of Max)… I’ve tried to do this with the ProxyManipulator… IIRC, when animating the rotation of the target object it does orbit properly (because it acts like the parent)… but when animating the rotation of the object with the proxymanipulator controller… the target object’s motion is linear between the keys and it “pushes” the proxymanipulator object away from its pivot point during the rotation to maintain the fixed distance (because their distance apart is locked– though can be edited in a sub-mode). Setting the keys to 1 to fake the interpolation is a workaround, but isn’t ideal… and you can still notice the proxymanipulator object jittering while it’s replaying the animation– but it’s still an awesome plugin (…wish I had the coding skills to achieve it– but I was able to at least recompile it for Max8)!

I’ve tried wiring the rotation of an object (with a TCB controller) to it’s own position track (using a second bezier controller under a position list controller) and then in the expression add the matrix I want to “orbit” around. I can get it to work for one object… but can’t get a second object to point back to the first due to illegal referencing, dependencies. I need to set up some custom attribute stuff… But I’m still working on this as time allows…

I’ll throw $100 dollars into this pot… for a solution that is backwards compatible with Max8.

I didn’t read the whole thread but I think I have solution to original problem just have a look http://www.youtube.com/watch?feature=player_embedded&v=5Oip-YiKuik

Download:
http://www.4shared.com/zip/MqwiOuUt/multiParent_1.html ?

if you are interested in math behind have a look here http://tomsmathjourneys.blogspot.cz/

few points:
I will reference to the scene that I have in video i.e. two control locators and box which is controlled.

  1. I am not doing any kind of parent switching to break evaluation loops! You can rotate around two points simultaneously. I do some funny math to figure out what actually means to rotate around two points at the same time.
  2. Because of 1. directly moving locators is disabled. Imagine you rotate around locator1 so locator 2 get translated therefore the whole system has to move. But you just wanted rotate around locator1.
  3. Rotation of locator1 is not altered by locator2 and vice versa. You have full control of locators rotation. This way I can break the dependency loop. If you need something fixed with system just link it to the box.
  4. Position and rotation of system depends on history of locator’s rotation. So you have to specify state of the system at some time t0 and than the node do some numerical integration from time t0 to time t. In current implementation the integration is done from time t0 to time t each time you change something. So even when you change from time t to time t+dt it will recalculate everything from time t0 to (t+dt). But It could just do one more step in the integration. But the advantage of current solution is that you can randomly jump in time.
  5. It would be cool to have one move controlel which would be fix with the system but for now I don’t know how to do this. If you need some move control just edit parent start position of the multiParentNode

wow… beautiful

Ok… @lecopivo, I read your revised method you posted in your updated blog (two pivot nodes A and B, and one helper node H). I do understand your math… and I have implemented a MAXscript DLX extension that calculates the matrix exponential (using angleaxis values to first construct the required cross-product matrix…)– thus allowing me to sum the rotations of nodes A and B (regardless of order, as you explain in your blog) and apply the total rotation to node H…

…BUT I’m struggling with how to actually implement your “update equations” in a 3ds Max construct while avoiding illegal-self referencing or circular dependencies. I’m not sure if I should try and do all of this in a custom attribute definition on the helper node H. Or try and use wire expressions or script controllers???

Any ideas or guidance from anybody would be greatly appreciated. It would save me some headaches… :banghead:

Page 5 / 5