ICE procedural model using strands. It follow a curve and twisting in different frequencies to create various patterns. This project is based on tutorial "strands from strands".
The first step is to create strands that follow the path exactly.
Make sure that the curve parameter is from 0 to 1 and it works best if the curve points are evenly spaced. You can rebuild the curve using "Fit on Curve" option and use "reparameterize" from modeling menu to make sure that it is from 0 to 1.
In an empty point cloud, create points at the beginning of the curve. We need to query the curve position using "UV to location" node and set the U value of 0.
"rate" determine how many strands created.
Place a "create strands" node to initialize strands attribute. Make sure that the loft option is enabled. Change particle shape to either cylinder, capsule, or segment. Not all shapes can be lofted.
Query the point position along the curve and connect it to strand position. The "Build Linearly Interpolated Array" create an array of U location along the curve. Example on the left: the node is querying point position every 1/600 of the curve.
Next step is to calculate the braid using sine wave on the Y axis. Depending on the orientation of the curve, you might choose different axis for the wave.
A braid is constructed from 3 different wave with a specific angle offset value, 120 degree offset. To modify the strand position we have to access its index using "array sub indices".
However many strands created in the point cloud, they need to be sorted out into 3 groups. It is done by calculating the remainder of point ID divided by 3 ( modulus).
a = amplitude of the wave
f = frequency
ID = strand ID
b = modulus
Y = a * sin ( (ID * f ) + (b * 120 )
The rest of the axis (X, Z) are also calculated in the same manner with double the frequency and reversing the modulus. The result then multiplied with the curve's point normal.
Then add the result of X Y Z positions to the original strand positions before the wave. Add some randomize node.
Quick fix: At this point, the particle's point position at the beginning of each strand hasn't been offset according to the wave position. They are still at the original curve location. To fix this, you can query the first strand position and use it to set the particle's point position.
Using recursive method, the user can choose different level of complexity of the rope. Details coming soon.