Jump to content
michael

Challenge : Rubix Cube

Recommended Posts

Yeah, you have to model a hand and the collision between the hand and the cube has to cause the pieces to move.

And while you're in there you might as well run a muscle sim on the hand with surface area preservation for the skin.

stu

Share this post


Link to post
Share on other sites

Step by step approach...just a series of special ops.

Not so clever...but it works

post-136-1114250547_thumb.jpg

Share this post


Link to post
Share on other sites

Is it an op per rotation? Kinda like e.d.w.a.r.d.'s solution?

Share this post


Link to post
Share on other sites

Nice. AndrewVK, I see that there's a Start Frame parameter. Does the user need to be careful to not overlap the frame ranges?

Share this post


Link to post
Share on other sites

I got mine working! I guess you could say I "rigged" it, it's using a super-simple capture+deform that continuously locks the geometry and recaptures it, depending on which side of the cube you're turning, Arctor and I had similar ideas about this... Had to do some really cheesy stuff to get around recursion errors, like scripted locking, forced-cooking of geometry. Jumped through a few other stupid hoops to make the interactive feedback a little nicer, but it seems to work OK... check it out!

JS_Rubiks_Cube.zip

Share this post


Link to post
Share on other sites

Looks like Andrew and I are on similar paths... I'm going to try to finish mine up tonight.

Nice work Jason.

Share this post


Link to post
Share on other sites

nice one jason...

one thing that doesn't seem to work is rotating 2 'faces' 45 deg...selecting a second face resets the first....

I had some ideas about getting around the recusion but it's not panning out...

I have a crappy brute force idea that I'll try to get done tomorrow...

Share this post


Link to post
Share on other sites
nice one jason...

one thing that doesn't seem to work is rotating 2 'faces' 45 deg...selecting a second face resets the first....

17733[/snapback]

Yeah, that was by design actually, but it's not supposed to "reset" the first face, it should be snapping to the nearest 90 degree increment before you could rotate another face, it's part of the script that's run whenever you select a control...kind of a safety check so you can't mangle the puzzle too badly...

...Ed, I had to keep the HDA unlocked because the scripts are modifying the contents of the OTL by locking+unlocking nodes... p'raps I coulda written out to an external file instead and kept the OTL sync'd?

Share this post


Link to post
Share on other sites
Is it an op per rotation? Kinda like e.d.w.a.r.d.'s solution?

17721[/snapback]

This question already was set few years ago in russian-speaking community.

I only have a little changed my previous approach in the decision. (expression vs keys)

>>Does the user need to be careful to not overlap the frame ranges?

It is not necessary for user to track it because he (she)

can use expression in each subsequent operator for "Start Frame" parameter

detail("../"+opinput(".",0),"start",0)+3

detail("../"+opinput(".",0),"start",0)+4

detail("../"+opinput(".",0),"start",0)+6

detail("../"+opinput(".",0),"start",0)+1

detail("../"+opinput(".",0),"start",0)+7

where 3,4,6,1,7 is just a small delay.

Share this post


Link to post
Share on other sites
...Ed, I had to keep the HDA unlocked because the scripts are modifying the contents of the OTL by locking+unlocking nodes... p'raps I coulda written out to an external file instead and kept the OTL sync'd?

17738[/snapback]

Maybe you could use a hidden string parameter?

Share this post


Link to post
Share on other sites
It is not necessary for user to track it because he (she)

can use expression in each subsequent operator for "Start Frame" parameter

17740[/snapback]

That's what I thought. Wouldn't it be easier for the use if the parameter was simply be a "Delay" parameter from the last rotation? I don't see any reason why someone would want overlapping frame ranges?

Share this post


Link to post
Share on other sites
That's what I thought. Wouldn't it be easier for the use if the parameter was simply be a "Delay" parameter from the last rotation? I don't see any reason why someone would want overlapping frame ranges?

17751[/snapback]

You might want over lapping frame ranges to turn multiple rows in the same plane simultaneously. It makes for a much more interesting looking animation to rotate multiple rows at different rates simultaneously than turning a single row at a time.

I'm working on doing this in a single locked OTL. I'm still stuck on a few points, but it's real easy to check which rows are currently being rotated using !(ch("pathtoanimationchannel1")%90) && !(ch("pathtoanimationchannel2")%90)... you put an expression like this in a hidden parameter in the OTL (one parameter for each of the 9 rows comparing against it's 6 opposing rows) and use the result to enable/disable animation controls at the top level of the OTL.

Share this post


Link to post
Share on other sites
That's what I thought. Wouldn't it be easier for the use if the parameter was simply be a "Delay" parameter from the last rotation? I don't see any reason why someone would want overlapping frame ranges?

17751[/snapback]

B) You are right :rolleyes:

It will be much better.

Already done :P

Share this post


Link to post
Share on other sites
I got mine working!  ... check it out!

17728[/snapback]

ACK, I forgot to mention I did mine in Houdini 7, it doesn't appear to work in v6.x ... also need to turn "select entire subnet" OFF in the viewport... BAH.

Share this post


Link to post
Share on other sites
B) You are right  :rolleyes:

It will be much better.

Already done :P

17766[/snapback]

Mike had a good point though. But a Delay parameter is probably still more artist friendly. To introduce overlap, we can just allow negative delay values.

Share this post


Link to post
Share on other sites

hmmm...

what build did you make it in?...it fails here in 6.x

anyway....

I'm going to have to concede defeat over here....this battle anyway, not the war :mad:

the solutions that most people have come up with are, IMO, not successful...

either a new OTL per rotation or an unlocked OTL with locked nodes or writing to disk...

I had a bit of something working with straight rotations and dynamic parents but it got way too complex really fast....

there must be a way to do this without anyone getting hurt.......

Share this post


Link to post
Share on other sites

Well, here is my attempt on the rubix cube challenge. This was a very nice one for getting back to houdini after quite some time :-) I should mention, that I didn't look at any other solutions before finishing my scene.

P.S.: It was made with Houdini 7.

FF_Rubix.zip

Share this post


Link to post
Share on other sites

I like Franks solution so simple, definately gets my vote. Very smart. B)

And it works with the asset locked too. Arctor I think you spoke too soon. :P

Do you know if there is a way to include the custom expressions into the otl?

I always end up avoiding them because they are specific to the hip file, I know you can save them out to a file but in a case like this how much nicer would it be if they were in the otl like a callback script. Is that possible already, does anyone know?

Maybe if the exread function could be used to source them from an otl, then you could include it in the "before first create" event to read them in, Ed?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×