Teteerck Posted January 17, 2021 Share Posted January 17, 2021 (edited) 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 January 17, 2021 by Teteerck Quote Link to comment Share on other sites More sharing options...
Atom Posted January 17, 2021 Share Posted January 17, 2021 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}); Quote Link to comment Share on other sites More sharing options...
Librarian Posted January 17, 2021 Share Posted January 17, 2021 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)); } Quote Link to comment Share on other sites More sharing options...
Teteerck Posted January 19, 2021 Author Share Posted January 19, 2021 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! Quote Link to comment Share on other sites More sharing options...
Teteerck Posted January 19, 2021 Author Share Posted January 19, 2021 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! Quote Link to comment Share on other sites More sharing options...
Librarian Posted January 20, 2021 Share Posted January 20, 2021 @Teteerck just copy paste wrangle OVER numbers Have Fun ODiN.hiplc Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.