Muscle question

   3875   8   1
User Avatar
Member
104 posts
Joined: March 2008
Offline
Hi

I have a question, i put 2 geometry to Muscle input, and both have expression in transform session, tx ty tz, the expression is:
centroid(“.”,0)
centroid(“.”,1)
centroid(“.”,2)

and something weird happen is, when i connect to the muscle, the input perform like tx ty tz is point to 0,0,0, why?

sometimes it happens in the first input and sometimes it happen in 2nd input or 3th input.



thanks
User Avatar
Member
7735 posts
Joined: July 2005
Offline
You're performing infinite recursion evaluation. The centroid() expression takes the *OUTPUT* of the node and computes the centroid. Using “.” means that you're trying to take the centroid of the current node, and feed it back onto itself. This is a big no-no.
User Avatar
Member
104 posts
Joined: March 2008
Offline
hi , i found out the reason, i work many times in centroid() and always work. normally.

and then i found out one thing is, the GEO who work, (every GEO inside have a ObjectMerge SOP) was the ObjectMerge SOP who set the Transfrom to “into specified Object”

and the object who doesn't work is the ObjectMerge who set the Transform as “Into This Object”

what can i do if i need to use “into this object” bcs i need the transformation of the object i wanna input to this GEO.


thanks
User Avatar
Member
7735 posts
Joined: July 2005
Offline
Running into infinite recursion will seemingly work at times depending on the network setup. Have you tried removing the centroid expressions?
User Avatar
Member
104 posts
Joined: March 2008
Offline
yes, i have try to remove centroid() expression. The Probelm will only happen when I use ObjectMerge SOP with “into this object” or I use “into this specific object” with transform object write with “.”

in this 2 case, the Musle SOP will not work correctly, i guess what happen is the ObjectMerge SOP effect the GEO tx ty tz, bcs when i move my Another GEO, then muscle also moving.
For Example

GEO_A
GEO_B/ObjectMerge(GEO_A, “into this object” or “into this specific object”,“.”)

MUSCLE <—– GEO_B
<—– GEO_C

then the muscle that refer to GEO_B will go to 0,0,0.

tx ty tz of GEO_B is totally unuseful, but if i move tx,ty,tz of GEO_A, the Muscle will refer to GEO_A but not GEO_B.

now, actually i figure out another way to settle my probelm is

GEO_Bath Object = “GEO_A”

this is not the way i want exactly but it can work like what I want but not perfectly what I want. if there is no other solution then i will do with this way.

Hope to hear from you soon



thanks
User Avatar
Member
8595 posts
Joined: July 2007
Online
if you objectmerge objA into objB with IntoThisObject mode
then no matter what obj transforms the objB has, its geometry will be compensated to be at exactly the same world space as objA
and since Muscle Object computes its anchor positions from objB transforms not its internal geometry, it will not follow if you move objA (and this way moving objB's geometry)

making objA a path object of objB is very uneffective, better job would be to just parent objB under objA, but then the IntoThisObject could be changed to none (assuming the objB transforms are reset to default)

but i just wonder what are you trying to do, because you can just use objA as muscle input since it has the same geometry and object level transforms
Tomas Slancik
FX Supervisor
Method Studios, NY
User Avatar
Member
104 posts
Joined: March 2008
Offline
hi, actually is OBJ A is in other SUBNET of GEO and OBJ_B is in another SUBNET so i have to use Object Merge.

i just figure out a solution that is in GEO_B Using “object merge” import the GEO_A, then use a NULL that path is refer to ../GEO_B. then connect the NULL to the Muscle, well everything work fine the only problem is when i rotate or transform the GEO_A, the Muscle will disapear, but then when i use a U key or I key to go to different path, then the Muscle will appear again.


this is not the perfect solution, bcs i need to use the muscle to deform some surface, so muscle disapear or appear without control will cause me some serious probelm. but atleast it work sometimes, i still waiting for the best solution.


PS: this is a very complex HIP files (now is more than 30MB and using more than 20,000 node already, so it work in a unnormal way bcs too much ch() is using)
User Avatar
Member
8595 posts
Joined: July 2007
Online
you can use Fetch Object node to fetch ObjA's transforms into subnet where objB lives, and use that Fetch Object as an input to the muscle
then you can use objectmerge SOP inside ObjB
and either
set to IntoThisObject
or
set it to None and parent ObjB under the Fetch Object

i am assuming that the ObjA's transforms are what you want to use as muscle anchor, but in different network and that you want ObjA's geometric reperesentstion in that object too

do not use Path Object parameter unless you need to animate something along path, because that is what it is for. Since houdini can represent Polygonal object as a curve object in some way it makes you able to use ObjA or ObjB in Path Object Parameter, but if you really want to link muscle directly to the point on the objB geometry use Rivet Obj instead
Tomas Slancik
FX Supervisor
Method Studios, NY
User Avatar
Member
104 posts
Joined: March 2008
Offline
Oh thanks very much, Rivet and Fetch Work Fine, Before that i try Fetch but i make a simple mistake it was i refer the FETCH to OBJ_B, and now i refer FETCH to OBJ_A, then connect FETCH –> OBJ_B –>NULL –> MUSCLE then everything work fine.

when there is some probelm (bcs OBJ_A using SoftXform in some part to reform the shape) sometims it doesn't show correctly and what i done is with RIVET to catch The Location then RIVET –> NULL –> MUSCLE

now everything is working very very fine

thanks alot!!
  • Quick Links