Jump to content

CurlNoise + Vex Help :(


Teteerck

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
Link to comment
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});

 

Link to comment
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));
        }


 

Link to comment
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!

Link to comment
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!

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...