Jump to content

Cascading Text Animation


odforceuser42

Recommended Posts

came across a tutorial on creating an animated cascading text effect in C4D and AE and i'm trying to do it in Houdini. The tut can be found on greyscale gorilla's blog. he includes part of the the clip this effect is based on in his tut, but for the eager it is Pompeia by Santa Motion.

so far i have a Font SOP + a Divide SOP ( with "Bricker Polygons" checked on ) plugged into the left side of a Cookie SOP. the right side has an animated ( translated in Y ) polygon curve. all of that is piped into a PolyExtrude. it works, but not perfectly and the Cookie seems .... overworked.

i haven't been successful in getting a Nurbs or Bezier version going.

As for the cascade animation, should i be writing bgeo's to disk and ref different bgeo's based on an expression stamped in a Copy SOP or a TimeShift or TimeWarp or something else?

what can i do to improve cook time? any other suggestions or tips or things to look into?

thanks in advance.

Link to comment
Share on other sites

I don't know how this tutorial makes you do this effect, but here is an example file of what would be a good approach in Houdini... Bascially you make the apparition effect with some cookie sop and then you copy it and offset it for each copy with a timeshift sop...

You can replace the cache sop in the network by a ROP SOP in order to write the geometry to disk and then load it with a file SOP to be more efficient...

CascadingText.hip

Link to comment
Share on other sites

@ Div - thanks. a couple q's: 1- what can be done to fix the artifacts on frame 11? and, 2- is there anything to help speed up the cook times?

other than that, the method used in C4D was to do the boolean on the curves first and then extrude after the fact. wouldn't that be faster? regardless, i haven't been consistently successful in this approach. any suggestions?

Edited by odforceuser42
Link to comment
Share on other sites

@ Div - thanks. a couple q's: 1- what can be done to fix the artifacts on frame 11? and, 2- is there anything to help speed up the cook times?

other than that, the method used in C4D was to do the boolean on the curves first and then extrude after the fact. wouldn't that be faster? regardless, i haven't been consistently successful in this approach. any suggestions?

The artifact at frame 11 can be solved by just changing the level of detail of what you put into the cookie. ExtrudeVolume after the mountain gives a slightly cleaner geometry and a slight offset in the bricker poly in the divide sop will give some more evenly spaced vertexes. You just have to play around with those settings a little. I find a boolean operation allways a little tricky in pretty much any program, you sometimes just have to tweak the inputs a little.

For question 2, i don't know if extruding after the cookie will speed up the process but you can sure try. On my machine it's quite fast either way. I set this up in the file attached so give this one a try if you will.

CascadingText2.hip

Link to comment
Share on other sites

@Rudine - thanks. it's rather purdy. if i may, i am curious what "quite fast" is... could you close and open your file, clear the cache and then reset it to frame 1. how long did it take to cook?

that's for 50 frames so i'm probably just getting impatient. ;o)

other than that, i've spent some time trying to get this to work with nurbs curves and the Trim SOP, but when i go to use the Bridge SOP it doesn't use what the Trim did. work-around?

i suppose the attached quicktime is the workaround. instead of using the Bridge SOP, i went from the Trim to a Convert ( to polys ) and made sure to have enough detail before the Extrude... but it isn't enough or i'm missing something as sometimes parts of the geo just disappear.

oh and a quick Q about the Bridge SOP and "profile curves" how to access them? they aren't groups, but are used in the group field and have the "x.y" nomenclature. are they the same as the original prims that existed in the Font SOP before the Convert SOP? in trying to use the Bridge SOP procedurally i came up with:

set j = ""
for i = 1 to `nprims("../font2")`
set j = `strcat($j, " 0.$i 1.$i ")`
end

then use $j as the string.

but it seemed $j wouldn't get reset and it would pick up some of the hscript.

either way this might not matter as they aren't the Trim'd curves.

thanks again for the help guys.

post-3851-126873945968_thumb.jpg

post-3851-126873946739_thumb.jpg

extrude.mov

Link to comment
Share on other sites

@Rudine - thanks. it's rather purdy. if i may, i am curious what "quite fast" is... could you close and open your file, clear the cache and then reset it to frame 1. how long did it take to cook?

that's for 50 frames so i'm probably just getting impatient. ;o)

Quite fast is allways relative, but the whole process takes less then 30 seconds here. For a 50 frame animation i think that's reasonable. You could choose to lower the details a little to get faster results. I usually err on the save side when it comes to detail.

Link to comment
Share on other sites

Quite fast is allways relative, but the whole process takes less then 30 seconds here. For a 50 frame animation i think that's reasonable. You could choose to lower the details a little to get faster results. I usually err on the save side when it comes to detail.

may i borrow you computer? just kidding. the cook time for me was over 3 minutes. i am not making this up. H 10.0.528 on Vista 64.

this is the very reason i've tried to boolean the curves first and then extrude. it just seems more efficient in my mind. it may not be, but for a while there i was getting cook times of about a second a frame before extrusion. roughly 2 seconds per frame to extrude. i'll need to test it out completely. it wasn't an apples to apples test ( it wasn't the same text string and i didn't test out the full 50 frames ).

i'll post a cleaned up hip file shortly. edit: it seems the poly method is more stable after all. if i can get a nurbs method that works more consistently i'll post it later.

Edited by odforceuser42
Link to comment
Share on other sites

well, here's my Nurbs version. it is certainly not perfect and i'm still not sure about Bridge. it's wrong to say this is faster when it doesn't work, but it is faster. ;oP

no animated gif's, eh? ( OK, you have to click on it to see it. )

@pclaes - nice. i like the animated offset on the mountain. also, i was thinking about using the Partition etc instead of my not quite working hscript loop for the profile curves, which would help w/ chars with multiple curves...

post-3851-126885907035_thumb.gif

cascade_09.hipnc

Edited by odforceuser42
Link to comment
Share on other sites

You might want to look into the Curvesect SOP too.

Dragos

yessss! ok, well sorta. i've been trying to get it to work, but even with the Join SOP i'm still getting multiple bezier curves. ExtrudeVolume works, but will not Cap the ends. The point numbers are not in order either. any hints on how to get the point numbers fixed? or even if it is necessary?

i'm also getting "flashing" or improper clipped curves in some circumstances. Initially this was fixed w/ a higher tolerance, but i'm curious if "keep odd" needs to be changed in certain circumstances and if so, how to know?

not on my pc at the moment. will post a hip file later.

Link to comment
Share on other sites

so far CurveSect seems rather fast, but i'm only testing one char and a bezier circle...

the Keep Even / Keep Odd issue is popping up more often as i'm now seeing prim numbers shifting. other choices are "keep none" and "keep all" ... would it be possible to keep everything and then do a test to see if curve A is inside curve B? since it appears to be doing the clipping correctly, i could test against one point, yes? as long as it wasn't on the boundary edge? suggestions?

curvesect_04.hipnc

Link to comment
Share on other sites

file...

Hi Peter, could you please explain the use of expressions in

1) text_number

2) delet1

3) copy1 and copy2 nodes

I have gone through the exhelp but still not able to figure it out (beginner, not good with expressions :()

The other thing that I didnt understand is getting the output even after bypassing the text_number & delet1 nodes. Could you please explain this scene file in brief.

Thanks

Link to comment
Share on other sites

1) text_number works together with copy1 and will process every letter individually, rather than trying to do the entire text in one go.

This is often a better workflow as some sops can get a bit confused if you have more geometry than that is being affected (specifically an unstable sop like the cookie sop).

Sure processing everything in one go could work (but bypassing those nodes will make you end up with a lot more geometry (turn on your point numbers and you will see that you are having a lot of points that lie on top of eachother - unless you do not use the copy1 as well)), but is more risky for certain operations and if you can split it up in different chunks that can get processed separately, you can make your system more parallel, which for more heavy types of operations would allow you to send each copy to a different computer to be processed (typical for a farm).

If you don't know what copy stamping does, you need to have a look at this tutorial or some examples that come with the copy sop - it allows you to process certain pieces of geometry individually:

http://www.sidefx.com/index.php?option=com_content&task=view&id=881&Itemid=254

for expressions:

http://www.sidefx.com/index.php?option=com_content&task=view&id=1500&Itemid=132

more copy stamping:

http://www.sidefx.com/index.php?option=com_content&task=view&id=1399&Itemid=261

-> the partition basically will create a group for each letter. The group name is something like: letter_grp_0

In a textport you can type "exhelp argc" and it will give you help on that expression.

*) the primgroupmask returns searches for groups with "letter_*" in them. This returns a string which contains all the matching groups: "letter_grp_0 letter_grp_1 letter_grp_2 ..."

*) the argc() will count the arguments in a string. In this case it will count the groups returned by the primgroupmask().

*) the "copynum" stamp value will be passed upstream as a specifier for which group to use.

*) in the "delete1" now that we have that number of the group, I rebuild the group string by concatenating the "letter_group_" with the number which I get from the "text_number" null. The reason why I did not concatenate straight away with the stamp expression is because if I ever want to cache this kind of operation out to disk through a number of wedges, whereby each wedge represents a different number, it is much easier to adjust the number in one location ie. the "text_number" null then trying to adjust all the expressions that might use that number.

*) copy2 will do a copy operation of the geometry, but will offset each copy both in space and in time. The offset in time is done with the timeshift, the offset in space is done on the copy sop itself. How much do I want to offset it in time? -> artistic control. How much do I want to offset it in space? -> at least by the thickness of the polyextrude so all the pieces do not sit on top of each other.

Hope this makes it more clear for you.

Link to comment
Share on other sites

Hope this makes it more clear for you.

Thanks a lot Peter :). I got to see your relpy after posting my scene file.Thanks for the detailed explanation. i was working on the same effect for last couple of hours. Now I understood it. :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...