Welcome to od|forum

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

caskal

Curly Abstract Geometry

Hey guys, hows going?

I'm trying to figure out how to do this kind of stuff, as you already may know, these artists are Cristoph Bader, and Simon Holmedal, two genius.

I know there's an easy way to do in cinema 4d, with x-particles, a followsurface node and a turbulent noise, but the more I learn Houdini, the less I want to go back to my older apps, and the more I want to study fractals, nature, maths (always a hard thing for me since I'm a designer), but proceduralism is da bomb!

Sam welker posted a tut on creating swirly patterns on a plane, entagma has some on fractals, as well as for loop subdivision depending on attributes.

My questions, are these done with particles and solver? I really want to achieve this kind of complexity, If someone has a good tutorial or resource on stuff like "this particle goes here, and when spot this one the next do this" and stuff, pop behaviors explained for a 1 month houdini user, could be also a ray sop involved here to get the shapes?, at the same time they are uniform, noise?, trying to figure out but its driving me crazy, some key words to google would be very helpful, lately I'm more in abstract stuff than anything, started looking nature more closely, probably there's VEX involved here, thats my biggest fear, I guess I'll had to learn if I want to make power stuff.

Thanks for reading!

 

8516611972_48c8d7079b_b.jpg

tumblr_mz1ccxAUMX1ravlb0o1_500.jpg

swirl01.jpg

swirl04 (1).jpg

swirl04.jpg

1 person likes this

Share this post


Link to post
Share on other sites
5 hours ago, f1480187 said:

curlypig2.pngcurlypig.png

 

Use VDB point advection to output geometry. You need to compute a velocity vector, it's up to you. For example, just a curl noise (first image) is a good starting point, as well as cross product of @N and position delta using point cloud (second image, some noise applied also). It may be anything you could imagine, from fluid trails to volume thickness.

 

curlypig.hipnc

Dude, you are a beast, I was actually waiting for your comment, you helped me in all my posts and I really appreciate that, gonna analize that file now, and then, search all your posts, you share amazing stuff, thanks again man, cheers from Argentina

Share this post


Link to post
Share on other sites

@f1480187 

Finally got (the simple setup lol)

A question about the simplest point wrangle

// Project onto a tangent plane.
@v = @v - @N * dot(@v, @N);
//@v = normalize(@v);

Googled tangent and readed its the rect that touches a curve in a certain point (as I said math is not my fort), is this what this snippet is doing? Why we have to rest the velocity by the normal? and what does the "dot(@v,@N)" stuff does?

Understanding this first setup will be enough for now, I get some parts of the other point wrangle, but I better start reading more the tokeru cgwiki, I hate coding, but its needed for achieve the results Im looking for, plus is multithreaded.

Btw, how old are you?

Share this post


Link to post
Share on other sites
@v = @v - @N * dot(@v, @N);

This projects the "noisey" velocity vector back into the tangent of the surface. Take a look at the file and compare wrangle A and B. (Remember to enable Visualizer "Vel")

-b

tangent.hip

Edited by bonsak
1 person likes this

Share this post


Link to post
Share on other sites
3 hours ago, bonsak said:

@v = @v - @N * dot(@v, @N);

This projects the "noisey" velocity vector back into the tangent of the surface. Take a look at the file and compare wrangle A and B. (Remember to enable Visualizer "Vel")

-b

tangent.hip

@bonsak perfect, got it now! thanks for the sample file!

Share this post


Link to post
Share on other sites

In fact, you don't have to project anything, you can still use VDBs. Compute Closest Point from the surface SDF (not v) using VDB Analysis node and then use it as a third input of VDB Advect Points SOP, switching it to Constrained Advection mode. It doesn't allow for jittered input, but it can be added later by pushing points along N on random distance computed from primitive number.

2 people like this

Share this post


Link to post
Share on other sites
13 hours ago, f1480187 said:

In fact, you don't have to project anything, you can still use VDBs. Compute Closest Point from the surface SDF (not v) using VDB Analysis node and then use it as a third input of VDB Advect Points SOP, switching it to Constrained Advection mode. It doesn't allow for jittered input, but it can be added later by pushing points along N on random distance computed from primitive number.

I'll try this later today, I "think" I get the whole process.

One question it comes to my mind, so using vdbs, like in this sample were a curl noise is projected on a surface, it is possible for example, if I made a pattern, lets say some geometric pattern in illustrator and then import to houdini, can I use this workflow to project the pattern on the surface?, but not the way the ray sop does, instead making a certain pattern/design follow the velocity vector to get some crazy abstract shi*.

The way it comes to my mind is insead of using a curl noise in point vop, importing a pattern/curve, is this possible? 

Share this post


Link to post
Share on other sites

You need uvs and input geometry dense enough to capture details. To bring values, use Attribute from Map node. Remap the color from 0..1 to -1..1 range and use it to create velocity VDB. Should be sufficient enough to reveal pattern.

1 person likes this

Share this post


Link to post
Share on other sites

Hey f1480187

Beautiful solution using advect points. Checking the wrangle nodes in your scene, some of the code lines don't make sense to me. That said, would you know where i can grab more info about how you came up with that solution?

 

Share this post


Link to post
Share on other sites

Hi @Marcola. You can ask here. Which lines make no sense? There is no definitive source, I think. It's a compilation of techniques learned from the multitude of examples made by odforce users.

Share this post


Link to post
Share on other sites

Thanks for the info, @f1480187. This forum seems to be one of, if not the best, resources out there for Houdini. Great stuff!

 

My question is more regarding where to begin understanding VEX. I'm fairly new to wrangling but almost 20 of 3D and also do have a little background in python.

 

You know, one can spend days, maybe years researching programming languages but I wanted to know what would be a good way to start learning geometry manipulation through Houdini or where to start, at least, learning more about how to use VEX in Houdini and how to use that data to manipulate geometry (i.e.: extrusion with ramp, grid creation, for each loops etc.). I've been watching Jeff Wagner's and Rohan Dalvi's videos but i'm catching myself watching them repeatedly. They are definitely good materials and are helping a lot. Houdini's learning curve is pretty steep but i'm impressed with what this software can do, incredible.

 

Regarding the coding lines on your example, i didn't quite understand lines 4 and 5. What is the delta for? What the cross function is doing? Is it acting on the particle velocity channel? Last, what is the reason for using the "fit" function on the noise, how come @P * 25 ?

 

Newbie questions....any help would be appreciated. Thanks 

Share this post


Link to post
Share on other sites

VEX is very simple, it's like basic C. No need to spend years to master it. Try @mestela's wiki. Help has a good basic reference too. I would recreate examples for 5-6 weeks, and gain critical mass of basic knowledge, before trying to make something I personally wish.

I suppose you are talking about this snippet:

vector near = point(1, "P", nearpoint(1, @P));
vector delta = @P - near;
delta = normalize(delta);
@v = cross(@N, delta);
@v += fit01(vector(noise(@P * 25)), -1, 1);

"delta" is a common variable name for things like difference between two positions. Here it will output radial directions from points towards scattered centers.

cross() function outputs vector perpendicular to both arguments. It is commonly used to compute transform matrices or just to get something perpendicular. Here it redirects deltas to be concentric.

Fit functions (there are fit and shortcuts fit01, fit10, fit11) remap values from old range to the newer range.

I computed pretty frequent vector noise. Therefore noise's "xyz" argument was multiplied by 25, which is same as using any VOP noise and set it's frequency to 25. The noise return positive values within 0..1 range, it is not suitable for randomizing vectors in all directions. So it need to be mapped to -1..1. This allow to get random evenly distributed direction.

Then I randomized velocity using resulting noise.

For debugging, you should output variables to attributes and visualize them. Older and simplest way is to visualise with @Cd and @N. I usually create visualizers using gear menu at Parameters pane, it allows to quickly setup visualizer to the current node.

Edited by f1480187
typo
1 person likes this

Share this post


Link to post
Share on other sites

Thank you so much for the explanation, really clear and easy to understand. I'll keep digging Houdini and will definitely check Matt Estela's website, great material in there too. Many thanks to Matt for putting all of that together! 

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