While listening to "Pixies - Where is my Mind?" today, my mind wandered off to some rather strange places. Started thinking about brain signals, nerve threads, how we're all put together, and how it all can be visualized in so many interesting ways. A bit back to reality, I got inspired to create a procedural DNA strain. Figured if i can do that, it's not that far fetched to build on the same setup for other very interesting and organic assets. I won't be able to share the file for this one, yet, but figured I'd do a quick rundown, half tutorial if you want.
As always with my scenes, I want it to be as easy as possible to use, and highly re-usable. Houdini is just so perfect for these kind of setups! My input is a single NURBS curve. Thanks to the great team at Entagma, I pulled up a saved wrangle I had created earlier from their Parallel Transport tutorial. Link to their tutorial here.
Shortly told, Parallel Transport are tangents/vectors that follows the direction of the spline. Having three vectors - or a matrix - defining the direction, you avoid having 180 degree flips and such things a single vector like the @tangentu attribute might cause. These can be piped in the @orient matrix for full control of the rotation at each point on the curve. With the orient matrix as input, I could easily add a few degrees rotation per point with a simple Point VOP and export this point normal.
Once I had the rotation per point set, I displaced the line along the new normal, getting a nice twisty look. For the second edge curve I just branched off, duplicating the line, and inverted the displacement. Now I was left with two twisting lines rotating around each other. Since they both have the same amount of points and live in two separate threads, I knew both curves would have the same @ptnum position lining up. Creating the bonds where just a matter a simple VEX snippet. Looping through each point, getting that point number position from each curve and creating a poly line connecting them.
As a final touch I added some randomness and curve controls for the thickness and detail, and collecting all adjustable parameters in a single Control Object for easy use.