Jump to content
Teteerck

CurlNoise + Vex Help :(

Recommended Posts

Hi there! Houdini noob here ^^ 

Some days ago I found this image on the internet and I really liked it so I thought about trying to replicate it but maybe animating it hehe to me it seemed like it could be made using curl noise fields so I followed the entagma's vex 101 tutorial and I manage to make this little animation as a test, and I really liked it. I think is pretty close to the image, BUT i have 2 issues with it that i don't really know how to fix or adjust a little, so i was wondering is maybe some of you guys could help me a bit or at least guide me to the right path.

https://imgur.com/a/wyg2zMS

First: Looping it, is it possible to loop The curlnoise or the curlxnoise? Or is there any other noise function that would produce a similar result but easier to loop

Second: Is there any way to soften the curlnoise behavior in these spots? https://imgur.com/a/rLB40Hf

 My best idea so far i just placing the camera in a place where these intersections aren't in frame haha but would love to know if it's possible at least to make those somewhat less dramatic?

 

CurlNoiseTest_v1.hip

Edited by Teteerck

Share this post


Link to post
Share on other sites

You could call the more extended version of curl noise directly. There is a periodic version that might help with the tiling. You need to include the voplib.h to access these extended functions, which are basically what VOPs wraps.

vector freq = chv("Frequency");
vector off = chv("Offset");

#include <voplib.h>
vector noise = vop_curlNoiseVP(@P, freq, off, { 0, 0, 0 }, "pnoise", "", 3, 0, 1, 0.5, 1, 1, 1, 0.0001);

// Laydown along an axis.
v@N = cross(noise,{0,0,1});

 

Share this post


Link to post
Share on other sites

Run Over Numbers I like It make some Noise  ,Have Fun @Teteerck

float height(vector p; float f; float a){
        return a *anoise(p*f,3,0.1,1);
        
        }
float dim = sqrt(@numelem);
 float f = 0.1;
 float a = 0.2 *dim;
 
 vector cur_p;
 
 cur_p.x = @elemnum% dim;
 cur_p.z = @elemnum/ dim;
 cur_p.y = height(cur_p,f,a);
 
 if (cur_p.x < dim -1 && cur_p.z <dim-1){
      
        
        vector next_p1;
        next_p1.x = (@elemnum+1)% dim ;
        next_p1.z = (@elemnum+1)/ dim ;
        next_p1.y = height (next_p1.y,f,a);
        float slopex = ( next_p1.y -cur_p.y)/(next_p1.x-cur_p.x);
        
        vector next_p2;
        next_p2.x = (@elemnum+1)% dim ;
        next_p2.z = (@elemnum+1)/ dim ;
        next_p2.y = height (next_p2.y,f,a);
        float slopez = ( next_p2.y -cur_p.y)/(next_p2.x-cur_p.x);
        
        vector n = set (slopex, 0, slopez);
        
        
        setpointattrib (0,"N",0,n);
        addpoint (0,cur_p/(dim-1));
        }


 

Share this post


Link to post
Share on other sites
On 1/17/2021 at 7:12 PM, Atom said:

You could call the more extended version of curl noise directly. There is a periodic version that might help with the tiling. You need to include the voplib.h to access these extended functions, which are basically what VOPs wraps.


vector freq = chv("Frequency");
vector off = chv("Offset");

#include <voplib.h>
vector noise = vop_curlNoiseVP(@P, freq, off, { 0, 0, 0 }, "pnoise", "", 3, 0, 1, 0.5, 1, 1, 1, 0.0001);

// Laydown along an axis.
v@N = cross(noise,{0,0,1});

 

Wow, thank you so much for the help! I ended up doing something similar just using a mountain node and i think i managed to do almost exactly what i wanted but i still looking how to loop it. I'm trying the blendshape node for that.

 

I tried this vex and loved the result! I didn't know about the extended noise functions, thank you again!

Share this post


Link to post
Share on other sites
On 1/18/2021 at 12:10 AM, Librarian said:

Run Over Numbers I like It make some Noise  ,Have Fun @Teteerck


float height(vector p; float f; float a){
        return a *anoise(p*f,3,0.1,1);
        
        }
float dim = sqrt(@numelem);
 float f = 0.1;
 float a = 0.2 *dim;
 
 vector cur_p;
 
 cur_p.x = @elemnum% dim;
 cur_p.z = @elemnum/ dim;
 cur_p.y = height(cur_p,f,a);
 
 if (cur_p.x < dim -1 && cur_p.z <dim-1){
      
        
        vector next_p1;
        next_p1.x = (@elemnum+1)% dim ;
        next_p1.z = (@elemnum+1)/ dim ;
        next_p1.y = height (next_p1.y,f,a);
        float slopex = ( next_p1.y -cur_p.y)/(next_p1.x-cur_p.x);
        
        vector next_p2;
        next_p2.x = (@elemnum+1)% dim ;
        next_p2.z = (@elemnum+1)/ dim ;
        next_p2.y = height (next_p2.y,f,a);
        float slopez = ( next_p2.y -cur_p.y)/(next_p2.x-cur_p.x);
        
        vector n = set (slopex, 0, slopez);
        
        
        setpointattrib (0,"N",0,n);
        addpoint (0,cur_p/(dim-1));
        }


 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Hi! Thank you so much for your help! I copied this code but I wasn't capable of making it work properly, should I just copy and paste? looking forward to seeing this in action. Thank you again so much!

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

×