iTranslated by AI
Notes from the 25th Houdini Casual Meetup

This is a retrospective and introduction of the presentation materials for the 25th Houdini Yuru Yuru Meetup.
I was extremely busy this month as well, but I managed to give my presentation. Phew, that was close. Let's start with the retrospective.
This Month's Theme
'Nature'
The theme for this session was 'Nature'. It was a very broad theme, so various ideas and expressions were gathered.
My Presentation
This time, I presented on the Fibonacci sequence, which is often seen in nature, and the Fibonacci spiral, which is one of its manifestations.
Dividing two consecutive numbers in the Fibonacci sequence approaches the golden ratio, and the shape itself is beautiful. It's also an interesting theme that infinite zoom can be achieved due to self-similarity.

Implementing the Fibonacci Sequence
First, let's create a point cloud that holds the Fibonacci sequence as an attribute using VEX. RunOver is set to Detail.

int a = 0;
int b = 1;
int temp = 0;
int max = chi('max');
for (int i = 0; i < max; i++) {
// printf('%d,',b);
int pt = addpoint(0, 0);
addpointattrib(0, 'pid', '');
setpointattrib(0, 'pid', i, itoa(b));
temp = b;
b = a + temp;
a = temp;
}
Nothing particularly difficult. The part where the sequence is passed to the FontSOP uses the Copy StampSOP, which is a legacy mechanism.
By the way, in many programming languages, swapping values requires a temporary variable like temp, but Python allows a simpler syntax. I think this is one of Python's strengths.
a, b = 0, 1
while b < 150:
print(b, end=' ')
a, b = b, a+b
Implementation with For-Each

After trying the Fibonacci sequence implementation above, here is a previous work example. Due to space limitations, I will omit the explanation and only introduce the network.
Implementation with Wrangle

This uses the first VEX-based implementation of the Fibonacci sequence. A brief explanation of the implementation points follows:
- Create primitives with a
whileloop. By dividing the primitives per arc, they are used later for creating bounding boxes. - Draw the arcs with a subsequent
forloop.
This node also has RunOver set to Detail.
int fibo0 = 0;
int fibo1 = 1;
int fibo2 = 1;
int count = 0;
int spiral_polyline = -1;
vector center = 0;
vector direction = {1, 0, 0};
float theta = radians(270);
vector opposite = center + qrotate(quaternion(theta - radians(45.0), {0,0,1}), direction * sqrt(2.0) * fibo1);
while(fibo1 < chi("max"))
{
int arc_pts = 24;
float r = float(fibo1);
float start_angle = theta - radians(90.0);
float end_angle = theta;
spiral_polyline = addprim(0, "polyline");
for(int i=0; i<=arc_pts; i++)
{
float t = float(i)/float(arc_pts);
float ang = lerp(start_angle, end_angle, t);
vector p = center + set(cos(ang), sin(ang), 0) * r;
addvertex(0, spiral_polyline, addpoint(0, p));
}
// Update center position
vector move = qrotate(quaternion(theta + radians(90.0), {0,0,1}), direction * float(fibo0));
center += move;
// Update Fibonacci sequence
fibo0 = fibo1;
fibo1 = fibo2;
fibo2 = fibo0 + fibo1;
// Update movement direction
count++;
theta = radians(270.0) - radians(90.0) * (count%4);
opposite = center + qrotate(quaternion(theta - radians(45.0), {0,0,1}), direction * sqrt(2.0) * fibo1);
}
Summary
The other presentations were also excellent, with everyone passionately sharing their learning outcomes and areas of expertise.
There were a wide variety of presentations this time as well, including comparisons with C4D, terrain manipulation using COPs, integration with game engines, examples of using ML, and Solaris scenes, all of which were very stimulating.
This study group is a closed event, so if you would like to participate, please contact me via my account Mentaiko (@kickbase) / X.
Discussion