Canning animation for Copy SOP

   22871   20   0
User Avatar
Member
436 posts
Joined: July 2005
Offline
Hello

I have Q on canned animation.
I have POP SOP which is reading the generated position. I am feeding that POP SOP into Copy SOP and template. The source is a simple circle.
I would like to animate radius of source so that when an instance is created, the animated parameters of the source activate. The position points of the POP are all created at different times.
Right now I have radius of source circle set to 0 at frame 1 and radius set to .1 at frame 5. However the animation of all the instanced circles happens from 0-5 frames. I need the animation of the circle to start at time when that circle is created. That is the animation is canned.
THanx

David Rindner
User Avatar
Member
4262 posts
Joined: July 2005
Offline
I'm not completely sure I understand your setup but I'll give it a try anyway. :?

Following your setup, circle as Input 1 on the copySOP and a POPnetwork on Input2.

With your setup change the CircleSOP's Radiusx and Radiusy channels to the following expression.
“param(”radii“,0)”

Under the CopySOP's stamping inputs add the following
“radii” & “min(($AGE*30)/50,.1)”

Breakdown of the expression.
We want to use the particle's age to determine the size of the radius. So we will use $AGE as a starting point. What we want is at frame 1 the value to be 0, at frame 2 the value to be .025, at frame 3 .05, etc, however $AGE = the current age of the particle in seconds. So we need to transform $AGE into a more useful number.

Since your working in frames convert $AGE from seconds to frames by multiplying by 30.
So $AGE*30 == how many frames old your point is.

Now to scale your $AGE*30 so you'll have .1 at frame 5. (5/.1)=50
($AGE*30)/50 is how much your want your radius to grow each frame.

In order to stop the raidus from growing past .1 you just use the min() function.

So you now have “min(($AGE*30)/50,.1)”

Hope it helps.

jim.
if(coffees<2,round(float),float)
User Avatar
Member
4262 posts
Joined: July 2005
Offline
Or if you spent a long time doing some nice keyframe animation between frames 1 and 5 and you don't want to use the linear example above you could create another circleSOP. So now you have two circleSOPs.

circle1 with your super fancy keyframed animation, :wink:
and circle2 with “param(”radii“,0)” for copy stamping.

With circle2 connected to the copySOP's input1 you would then use the following expression.

cht(“../circle1/radx”,$AGE)

cht() returns a channel's value at a certain time (in seconds).
or you could use chf(“../circle1/radx”,$AGE*30), but that requires more typing.

Choices are good.

jim.
if(coffees<2,round(float),float)
User Avatar
Member
436 posts
Joined: July 2005
Offline
I am sorry, I do not understand what you are describing. Both ways are not working.

For Reply#1, as soon as put in the expression into Circle's SOP radius fields, the SOP turns RED. So the expression is incorrect or it is in wrong field or wrong SOP. I don't know.

For Reply#2, there is no effect. But I admit I do not understand where I should put the expression “cht(”../circle1/radx“,$AGE)”.

I have animation of radius (radX, and radY) channels for 5 frames, strarting with frame #1 and ending at frame #5. The start value is .01 and end value is .1 for both radx and rady channels.
The CircleSOP is #1 input to CopySOP, while the FileSOP(reading BGEO sequence of written our particle states) is #2 input of CopySOP.
When there is no animated channells in CircleSOP it works fine. I just need to have it activate the animated channells when cirle instance is created.
In CopySOP under Stamp TAB I have “cht(”/obj/Splash/circle1/radx rady“,$AGE)” in Var1, as described in Reply#2.
But it is having no effect whatsoever. I see all instanced circles animating from frame 1 to frame 5 using same radius values, then from frame 6 to end all radii are equal. So either expression is incorrect or I have it in wrong field.

P.S. I see this a lot everywhere. People post expression text, but post no information as to what field it goes into. So the information is without context and is just as confusing. Worse when they do not include some related setting. Please post those little details, take nothing for granted.
Just a thought

DaveR
User Avatar
Member
121 posts
Joined: July 2005
Offline
DavidRindner
For Reply#1, as soon as put in the expression into Circle's SOP radius fields, the SOP turns RED. So the expression is incorrect or it is in wrong field or wrong SOP. I don't know.

Hi david, if you read this short tutorial you will understand the use of stamping and how to set it up.

http://www.grahamdclark.com/Studentresources/tutorials/copyOP/index.html [grahamdclark.com]


Also in the geometry pdf there is some info about stamping.
Achim
User Avatar
Member
4262 posts
Joined: July 2005
Offline
DavidRindner
In CopySOP under Stamp TAB I have “cht(”/obj/Splash/circle1/radx rady“,$AGE)” in Var1, as described in Reply#2.
But it is having no effect whatsoever. I see all instanced circles animating from frame 1 to frame 5 using same radius values, then from frame 6 to end all radii are equal. So either expression is incorrect or I have it in wrong field.

“cht(”/obj/Splash/circle1/radx rady“,$AGE)”
This is causing a error. cht() can only reference one channel while this is attempting to reference two. In my example I only used radx, I'm sorry for being unclear. ops:

CIRCLE1 SOP (Not Connected to anything).
Radius X and Y both have their parameters animated by hand.

CIRCLE2 SOP (Connecting to input1 of the COPY SOP)
Radius X expression is param(“radiiX”,0.01)
Radius Y expression is param(“radiiY”,0.01)

POPnet SOP (Connects to input2 of your COPY SOP)

COPY SOP
For Var1 put radiiX,
For Param1 put cht(“/obj/Splash/circle1/radx”,$AGE),
For Var2 put radiiY,
For Param2 put cht(“/obj/Splash/circle1/rady”,$AGE),


jim.
if(coffees<2,round(float),float)
User Avatar
Member
436 posts
Joined: July 2005
Offline
Thanx.

To put it mildly, I don't get it. I don't understand this tutorial at all.
Makes no sense to me whatsoever. I tried to match his settings, but its not working at all. Completely muddy.

DR
User Avatar
Member
4262 posts
Joined: July 2005
Offline
DavidRindner
P.S. I see this a lot everywhere. People post expression text, but post no information as to what field it goes into. So the information is without context and is just as confusing. Worse when they do not include some related setting. Please post those little details, take nothing for granted.
Just a thought

Its impossible to know the knowledge base of the person asking the questions so in general I think most people just post the quickest most direct answer simply because its fastest. If these quicky solutions aren't satisfactory then more specific questions are asked. At which point others might jump into the foray. Personally I think its works out better this way. The turn around will be a little slower for the person who needs help but can you imagine how long every post would be if everyone said click here, then here, then type this, then this, etc. We would be reading forever.

My advice is don't let the initial answer deter you, if you still have questions keep them coming.

jim.
if(coffees<2,round(float),float)
User Avatar
Member
4262 posts
Joined: July 2005
Offline
Try this.

http://stickylight.com/FLinks/splat.zip [stickylight.com]

This was done in 6 btw.

jim.
if(coffees<2,round(float),float)
User Avatar
Member
436 posts
Joined: July 2005
Offline
Wolfwood


THe effect is not happening.
All circles, regardless at the time at which they were created, have the same radius. So the result of CopySOP looks like its flashing.
So a circle which is 1 frame old has same radius as one that is 4 frames old. The radX and radY animation happens over 5 frames.
Also I think you misspelled some syntax , you put radiiX where radX shoulb be, that is you have two extra ii.
But either way, I have no result.

DR
User Avatar
Member
436 posts
Joined: July 2005
Offline
The effect is straighforward as is SOP network.

I have a source SOP, a circleSOP.
I have templateSOP which is a FileSOP reading bgeo sequence. THe bgeo geometry is a bunch of points created by GeometryROP in Output from a POPNET.
I am instancing the circle using the FileSOP as template using CopySOP.
If he radii of circle are constant the CopySOP works fine. But I need the radii of instances to animate, but from their creation time.
That is what I cannot get working, and all the advice has been for naught.
All circles have the same radius at same time, regardless of creation time.
This is the aspect of Houdini I dislike. I have to dig way to deep for simplest effects, as nothing is apparent or intuitive.

DR
User Avatar
Member
4262 posts
Joined: July 2005
Offline
Ack, I think I figured out the problem. Since your using .bgeo files you don't have access to the $AGE variable.

The sample file I provided works since its being cooked on the spot. Instead you are going to have to use your life point attributes instead of $AGE.

jim.
if(coffees<2,round(float),float)
User Avatar
Member
4262 posts
Joined: July 2005
Offline
What are some of the attributes that have been cooked out into the BGEO files? So we know what we have to work with.

jim.
if(coffees<2,round(float),float)
User Avatar
Member
4262 posts
Joined: July 2005
Offline
All you should need to do is change this
cht(“/obj/Splash/circle1/radx”,$AGE)
cht(“/obj/Splash/circle1/rady”,$AGE)

to this

cht(“/obj/Splash/circle1/radx”,point(“../file1”,$PT,“life”,0))
cht(“/obj/Splash/circle1/rady”,point(“../file1”,$PT,“life”,0))


jim.
if(coffees<2,round(float),float)
User Avatar
Member
436 posts
Joined: July 2005
Offline
Wolfwood

I don't know which attributes were baked into bgeo sequence. Sence I did not append any attribute POP, I assume its either all of them or none of them. PErsonally I do not understand the concept of point attributes. I do not understand what they do, or what they are used for. I find the documentation PDFs to be ununderstandable. The text is cryptic and to me its just gibberish.
So when I see you guys posting syntax expressions, I have to take them as they are.

DR
User Avatar
Member
436 posts
Joined: July 2005
Offline
I don't know, its just not working.

Here is the set up.
Geometry Object is called Rain
Instance SOP- Circle2 with following in Radius fields
Radius X param(“radx”,0.5)
Radius Y param(“rady”,0.5)

Circle1 SOP has animated radius fields over 4 frames, and this SOP is not connected.


FileSOP is reading a BGEO sequence, written out using GeometryROP, and is consists only of points.
Appended to FileSOP is is ClipSOP that is clipping some extraneous points.
The name of that SOP is clip1

clip1 is serving as template intput to CopySOP, and circle2 is source input.

In CopySOP under Stamp tab I have following expressions;
Var1 radX
Param1 cht(“/obj/Rain/circle1/radx”,point(“/obj/Rain/clip1”,$PT,“life”,0))

Var2 radY
Param2 cht(“/obj/Rain/circle1/rady”,point(“/obj/Rain/clip1”,$PT,“life”,0))

The intention is for animated instance to start animating from time that it is created, right now all instances are animating at the same time.
Now likely, some tiny detail, in some tiny field is misplaced, or some expression is mistyped. As I am learning, Houdini is overengeeneered and underdeveloped. By that I mean that is supremely powerfull, yet supremely unforgiving.
Really I don't feel like an animator, I feel like a programmer in this app. I have no aptitude for programming.

Dave R
User Avatar
Member
436 posts
Joined: July 2005
Offline
One of the worst things is that I cannot make a logical connection as to whats affecting what. For example, I see the circles beggining at size 0 and ending at size 3. Yet the animated parameters in Circle1 are from .5 to 2. So where is CopySOP getting those values is a mystery.
I don't know what to make of this. The expression syntax is a cryptic. This is the most confusing application I have ever seen.

DR
User Avatar
Member
639 posts
Joined: July 2005
Offline
Hi David,

Expression language is probably one of the easier “language” to learn if you compared it to VEX or HDK (or even MEL). Most of the time, if you know the expression language of one package, you should be able to learn other package's with ease.

If you don't understand what the expresstion function is, you can type “exhelp” in your textport to find a bit of info on it. (i.e. “exhelp point”)

Anyhow, whenever you see something that's all capped and has a “$”, this is a variable. This can either be a local variable or global variable. Generally, you can click on the helpcard and some OPs will list its local variable along with its short description at the bottom of the help card.

Now, the cht() you see from Jim's post will allow you to “steal a channel value at a given time” from other channel to this channel where you are typing this expression. If you type “exhelp cht” you'll see that cht() require both “(string channel, float time)” The “string” and “float” in there is just a type of value this variable will accept. Hence “cht(”/obj/Rain/circle1/radx“,point(”/obj/Rain/clip1“,$PT,”life“,0)) ” simply means:
Take circle1's radius-x channel at a particular time.

The “point(”/obj/Rain/clip1“,$PT,”life“,0)” that you see within the cht() is another expression. The point() will allow you to steal ANY point's attribute. If you open up a geometry spreadsheet, you'll find a list of points with all its attributes (i.e. positions (x,y,z), diffuse color, custom_attributes). So if you type “exhelp point” you'll see that it's requirements are: “(string SOP, float point_number, string attribute, float index)”

The “string SOP” is where you input the SOP name. The “float point_number” is where you specify the point number (its ID). The “attribute” is where you specify the name of the attribute you want to find out. The “index” is just a numerical number (starting from 0) that represent x (0), y (1), z (2), w(3).

So essentially, point(“/obj/Rain/clip1”,$PT,“life”,0) simply means:
At the SOP called “clip1”, I want to find EVERY single point (hence $PT) with an attribute named “life”, and I want its first channel only (hence “0”) to be returned to the user about a particular point.

So… that's basically what it is. Remember, use exhelp for any expression help.

Hope this helped.
Alex
User Avatar
Member
436 posts
Joined: July 2005
Offline
I want to thank everyone for their help. I am going through Houdini growing pains under deadlines. It may not have been a wise move to do self OJT with H on a job, but I am aggressive.
This is my first commercial project with H and 1st on which I am a CG team leader. We developed a hybrid solution. Becouse of speed and density of CG rain, and respective skills, we divided the job into falling/flowing rain and splashes. The falling and flowing rain is being done by my team member in Maya 4.5, I am doing the splashes. The camera motion control and camera matching is done in Maya ,and then camera data is exported to Houdini through MEL scripts by Steve and Alex. Motion control is from Marc Roberts MCC device, the only one in Asia, and same device that was used to shoot motion control for Matrix sequels. By that , I mean, it is the same machine, shipped from Australia. It outputs Maya and Softimage files.
I finally found my own solutions to splash simulation using rapidly appearing and disappearing circle primitives, birthed on particle systems, splash particles using 3 face primitives and metaballs. The three passes are then filtered in COPS and in AE to soften them up. Really all my filtering work on particles from H and Maya is done to the alpha of the passes, and to sharpen the highlight. I don't care about diffuse color of rendered particles as RGB channels of rain passes are not used.
In compositing stage, I took the A-copy(rough live action edit in D1 format uncompressed), and used the particles passes alpha as matte for the D1. The spec. hit is then dodged on that layer. This is followed by some distortion filters, and other 2d effects. The end result is a rain pass that has alpha of rendered particles, which includes splashes, and distorted/refracted color of the live action footage. VEX SuperMaterial was usefull as it alpha roll, fresnel, and parrallel and perpendicular transparency all can be used to alter the edge transparancy of the water droplets. Separating falling rain and splashes was usefull as both need different filters. Splashes refract alot more so distortion values for that layer, in 2d, were higher. We decided to do refraction as 2d effect as I just did not want to rt refraction.
The completed rain passes are due to be transfered to Inferno artists, so they can apply their own tricks. Sence they have the original alpha, they can throw away out our rain color or mix it with their own.
Once the add airs, I let you guys know. It should be soon. It was for a small Ford sedan.

Dave Rindner
User Avatar
Member
67 posts
Joined: July 2005
Offline
DavidRindner
Thanx.

To put it mildly, I don't get it. I don't understand this tutorial at all.
Makes no sense to me whatsoever. I tried to match his settings, but its not working at all. Completely muddy.

DR
Modeling for Digital Visual Effects and Animation

that's got to be the funniest review for a tutorial I've ever had. Thanks David I put the review up on my site : )

good you figurd out a way to get your project done
  • Quick Links