I spent the last day and a half trying to figure out how to taper the sweep at the ends, and have the organ size and density dynamically adjust to that as you did in the beginning example. If you have any suggestions for that, and the time any clue would be amazing! Thanks for the tutorial though it was super helpful!
Fun fact: the "P" you're talking about in the paper, is in fact a small rho (Greek letter) Rho is the Greek letter for R, as in Receptacle. Example at 28:05 HTH. Note: I studied (Ancient ) Greek in high school.
I looked at this paper back in my early days as a 3d artist when i became obsessed with modelling a pinecone haha, excited for a refresh in houdini vs c4d. Thanks Manuel, glad to see you back!
Every time one of these amazing math-based tutorials drops from Entagma, I need to run over to Khan's academy to refresh myself on the concepts. Fun though.
Woah, amazing amazing tutorial, thank you! At the moment all the copy to point objects are facing the same direction. Wondering if there is any easy way to orient the copy to point object to follow the curvature of the curve - like a flower petal would :)
Pretty late to the party, but just a few additions to Manu's code here: 1) The organsize "p" and stepsize "deltas" have to play together. So if you fix "deltas" to say 0.001 but also choose a very small organsize you will get odd results. It then helps to decrease "deltas". 2) You don't need to use "primuvconvert" if you just divide "s" by "l". Since "s" can be "l" at max, you will always get 0...1 values.* 3) You can get rid of the count-variable "i" if you just don't reset the matrix "m" all the time. The rotate-function will then just keep rotating "m" from it's last position. Nevertheless thanks for another great tutorial and explaining phyllotaxis :) Also I hadn't heard of "primuvconvert" before. So although it's not really needed here I'm still happy to know it now :D Cheers! EDIT: *However if you do employ "primuvconvert" you could probably get rid of the measure-sop and don't care about the actual curve-length altogether, since "primuvconvert" will do all the work for you. But I didn't try that.
You guys got to stop naming your variables such meaningless names like r, l, m, etc. This does NOT help with learning or with code readability. I have no clue what's going on if I look at this in the future or even now.
Awesome as always. One day I will understand the meaning of the code I'm writing and not just copy yours.. Is there a way to orient the geometry that is copied (in your case the sphere) perpendicularly to the curve? Also how could I make the geometry expand and deform to fill the the gaps in between them?
@@Entagma yeah, brb just gonna check the container in the back of my fridge for some inspo. Seriously though, yes - this would be handy instagram.com/p/CKeA2NnhIUV/
awesome tutorial thank you Entagma but how to apply different @pscale through the mesh like in the intro video I tried everything with no luck can someone help me out please.
Tweaking the curve a bit, this seems an ideal way to generate the eyeball of a common house fly. Thanks for this tutorial though admittedly, I was mostly just copying the vex code you typed while barely comprehending the math behind it :)
When you created your primitive sphere, the default radius was probably set to 0.5 in all axis. This code operates on the idea that the spheres you're packing are all 1 unit in size. You just need to tweak that.
I have checked the code so many times and I only get 1 small sphere at 0 0 0 ... The curve is not in the negative however the subdivide doesnt seem to impact curves either.. Any ideas?
Ugh, it is so frustrating when you can't even get past step 2. Did Houdini change something in the curve node between v18.5 and v19? The curve node icon is different and when I use a subdivide node it doesn't smooth out the curve it just divides the curve between the points in a linear fashion. The most baffling thing of all is that the curve I made has 6 points but the Geometry spreadsheet and Display Point Numbers in the viewport show 15 points overlapping each other. So then I had to use a Clean Node to consolidate the overlapping points and THEN the subdivide worked properly. What a weird thing for the new curve node to do. Typing out all the code it STILL didn't work. Opening up the included project file everything worked and suprise suprise the curve node is COMPLETELY different. It is so weird.
Hi, has anyone got this working?! Such a fascinating tutorial, any help would be massively appreciated (I'm a Entagma Patreon if that helps haha): Here's the code, doesn't work for me (Houdini 18.5): float p = ch("organsize"); float l = prim(1, "perimeter", 0); float deltas = 0.1; // forward declerations float a = 0; float s = 0; float x = 0; float y = 0; float phi = radians(137.5); vector2 uv = {0,0}; vector pos = {0,0,0}; matrix3 m = ident(); int i = 0; while (s
Hi Ollie, in these instances it's great to compare your code to the scene file we provide. Doing so brings up a few things to note: - your second while loop's condition should read: while (a
didn't work for me until i realised i had the curve on the negative x. edit: once i got my head around the algorithm i could implement the size change 👍
Excellent tutorial!! Quick question to your math :) Would you not need to revolve around the y axis before calculating if there is room for a new organ? In my understanding of your logic there, we would calculate and place an organ on a newly available slice, and then go up an entire 2pi, before being able to place a new one. This would leave each slice with only one organ? I understand the core concept and the houdini part, just curious about the logic :) Cheers and thank you!
The trick here is that the we try to find an area patch that is equivalent to the are of an organ. When we place the first organ it of course extends above and below the slice. If we would continue without rotating the organs around y along the curve, the next organ would again be equivalent to the area we added, but would nonetheless intersect the first one. The principle only works, because rotating by phi makes sure that the organs are distributed without intersection around the circumference of the swept object anyway. That means after placing enough organs at different locations along the circumference that the entire thing approaches a working solution.
@@Entagma Thank you for answering! That was I was confused about math wise. That either the intersection would occur or we fill one slice up entirely and the rest of the slices wouldn't work. Not confused anymore though. Cheers - Great content!!
One of the great joys of Entagma has been learning how to tell if it'll be a Moritz or Manuel tutorial just from the thumbnail. This is so Manuel
I spent the last day and a half trying to figure out how to taper the sweep at the ends, and have the organ size and density dynamically adjust to that as you did in the beginning example. If you have any suggestions for that, and the time any clue would be amazing! Thanks for the tutorial though it was super helpful!
Fun fact: the "P" you're talking about in the paper, is in fact a small rho (Greek letter)
Rho is the Greek letter for R, as in Receptacle.
Example at 28:05
HTH.
Note: I studied (Ancient ) Greek in high school.
I looked at this paper back in my early days as a 3d artist when i became obsessed with modelling a pinecone haha, excited for a refresh in houdini vs c4d. Thanks Manuel, glad to see you back!
Every time one of these amazing math-based tutorials drops from Entagma, I need to run over to Khan's academy to refresh myself on the concepts. Fun though.
Woah, amazing amazing tutorial, thank you!
At the moment all the copy to point objects are facing the same direction.
Wondering if there is any easy way to orient the copy to point object to follow the curvature of the curve - like a flower petal would :)
Pretty late to the party, but just a few additions to Manu's code here:
1) The organsize "p" and stepsize "deltas" have to play together. So if you fix "deltas" to say 0.001 but also choose a very small organsize you will get odd results. It then helps to decrease "deltas".
2) You don't need to use "primuvconvert" if you just divide "s" by "l". Since "s" can be "l" at max, you will always get 0...1 values.*
3) You can get rid of the count-variable "i" if you just don't reset the matrix "m" all the time. The rotate-function will then just keep rotating "m" from it's last position.
Nevertheless thanks for another great tutorial and explaining phyllotaxis :)
Also I hadn't heard of "primuvconvert" before. So although it's not really needed here I'm still happy to know it now :D
Cheers!
EDIT: *However if you do employ "primuvconvert" you could probably get rid of the measure-sop and don't care about the actual curve-length altogether, since "primuvconvert" will do all the work for you. But I didn't try that.
I give it 137.154 degree, and it give me a sweetcorn. This is purely amazing!! I feel like I am in control of nature now! Thank a lot!
You guys got to stop naming your variables such meaningless names like r, l, m, etc. This does NOT help with learning or with code readability. I have no clue what's going on if I look at this in the future or even now.
Amazing tutorial Manuel! That was brilliant 🔥
This is a lesson for applied math and integrals. Kudos
Awesome as always.
One day I will understand the meaning of the code I'm writing and not just copy yours..
Is there a way to orient the geometry that is copied (in your case the sphere) perpendicularly to the curve?
Also how could I make the geometry expand and deform to fill the the gaps in between them?
Amazing, understanding these papers is straight black magic) can you make something based on mycelium growth?
Do you have an example for mycelium growth?
@@Entagma yeah, brb just gonna check the container in the back of my fridge for some inspo. Seriously though, yes - this would be handy instagram.com/p/CKeA2NnhIUV/
:-)
@@Entagma if you could review some of Ciphrd's work, an implementation in Houdini or Blender would be fantastic!
New Manuel houdini tut!!!! Wahoo! Love these TD essentials
Thank You very much, Manuel!
Hi, nice tutorial! Im a beginner but i have a small problem, i don t know how to animate this xD can you give me a little explanation?
Absolutely phenomenal!
awesome tutorial thank you Entagma but how to apply different @pscale through the mesh like in the intro video
I tried everything with no luck can someone help me out please.
Tweaking the curve a bit, this seems an ideal way to generate the eyeball of a common house fly. Thanks for this tutorial though admittedly, I was mostly just copying the vex code you typed while barely comprehending the math behind it :)
😮
Thanks again. I watched it many times
You guys are my favorite Nerds..love it.
I need an intuition explanation for the intuition part
Awesome - Thank You!
Thanks for the tutorial. I had better results with a = a-.5; instead of a = a-1; I don't know why otherwise there were still gaps
When you created your primitive sphere, the default radius was probably set to 0.5 in all axis. This code operates on the idea that the spheres you're packing are all 1 unit in size. You just need to tweak that.
amazing tutorial!
This looks so satisfying :)
I have checked the code so many times and I only get 1 small sphere at 0 0 0 ... The curve is not in the negative however the subdivide doesnt seem to impact curves either.. Any ideas?
Is your point wrangle set to ‘detail’ instead of points or prims? That got me
Can you do something based on texture deformation or texture rigidity?
What exactly do you have in mind?
Ugh, it is so frustrating when you can't even get past step 2. Did Houdini change something in the curve node between v18.5 and v19? The curve node icon is different and when I use a subdivide node it doesn't smooth out the curve it just divides the curve between the points in a linear fashion. The most baffling thing of all is that the curve I made has 6 points but the Geometry spreadsheet and Display Point Numbers in the viewport show 15 points overlapping each other. So then I had to use a Clean Node to consolidate the overlapping points and THEN the subdivide worked properly. What a weird thing for the new curve node to do. Typing out all the code it STILL didn't work. Opening up the included project file everything worked and suprise suprise the curve node is COMPLETELY different. It is so weird.
hey! make sure the curve is set to polygon before you start drawing. then the subdivide works properly. changing it afterwards doesnt seem to work
@@nightshift-lb6hv thank you so much
Hi, has anyone got this working?! Such a fascinating tutorial, any help would be massively appreciated (I'm a Entagma Patreon if that helps haha):
Here's the code, doesn't work for me (Houdini 18.5):
float p = ch("organsize");
float l = prim(1, "perimeter", 0);
float deltas = 0.1;
// forward declerations
float a = 0;
float s = 0;
float x = 0;
float y = 0;
float phi = radians(137.5);
vector2 uv = {0,0};
vector pos = {0,0,0};
matrix3 m = ident();
int i = 0;
while (s
Hi Ollie,
in these instances it's great to compare your code to the scene file we provide. Doing so brings up a few things to note:
- your second while loop's condition should read: while (a
@@Entagma ah your a star, thank you so much Mo, I just couldn’t spot the error! 🙌
It's beautiful!
didn't work for me until i realised i had the curve on the negative x.
edit: once i got my head around the algorithm i could implement the size change 👍
Did you manage to vary the size? Looking for a way to increase organ size from the centre outwards
amazing work.
wow
amazing as always!
Excellent tutorial!! Quick question to your math :)
Would you not need to revolve around the y axis before calculating if there is room for a new organ? In my understanding of your logic there, we would calculate and place an organ on a newly available slice, and then go up an entire 2pi, before being able to place a new one. This would leave each slice with only one organ? I understand the core concept and the houdini part, just curious about the logic :) Cheers and thank you!
The trick here is that the we try to find an area patch that is equivalent to the are of an organ. When we place the first organ it of course extends above and below the slice. If we would continue without rotating the organs around y along the curve, the next organ would again be equivalent to the area we added, but would nonetheless intersect the first one. The principle only works, because rotating by phi makes sure that the organs are distributed without intersection around the circumference of the swept object anyway. That means after placing enough organs at different locations along the circumference that the entire thing approaches a working solution.
@@Entagma Thank you for answering! That was I was confused about math wise. That either the intersection would occur or we fill one slice up entirely and the rest of the slices wouldn't work. Not confused anymore though. Cheers - Great content!!
❤️
Cool 😎👍
Can you upload same tutorial using blender
In Blender I would have to create a python addon to implement this functionality. Maybe I'll cover Python in Blender at some point in the future.
@@Entagma thanks for replying..
@@Entagma I would buy Entagma Patronite for that!
@@Entagma And in cinema, it's possible to replicate this?
Anybody knows why I am getting error in
Uv = primuvconvert(1, uv, 0, 10);
what error are you getting? Maybe because you have a capital U in Uv?
@@Entagma ok let me check ..
Intelligent design = God.
Interesting as a single equals sign is generally used for assignment in most programming languages and not as boolean equality check