I match exactly the nodes in H16, and it all goes horribly wrong:
At this point in my newbie state, I am stumped. I have replicated exactly 2 nodes, and I get a different result. This illustrates two problems for the learner - one is the danger of not using the same version (something has changed in Houdini) and secondly and this is the really important thing: you can't learn Houdini by paint by numbers. I played paint by numbers with a handful of really enjoyable tutorials: e.g. Rohan's rocker, a rocket launcher on the old Digital Tutors, and architectural destruction recent one on Pluralsight. The harsh reality of those was that whilst I finished I did not understand the detail of what was happening. In a very troubling way, I had not learnt anything.
The next thing Rohan did was use the point node (now deprecated) to add an up vector. I knew in H16 there was a new node called attribute expression that you were supposed to use instead of the point node so I - first leap in understanding - worked out how to use that for both the normal and the up vector. It finally dawned on me that a “normal” was just an attribute that was labelled with the string “N” that could point where ever you wanted. And an attribute is just a property of, in this case, a point on a circle. The polyframe node is just one way of computing an attribute called N that points where you want, but in a really weird way: you select an attribute called tangetu and relabel it to N. The formula to compute N is buried inside the node, and will depend on the paramters.
The insight was to realise that we want a normal pointing to the center of the circle - well this the is just the position vector pointing in reverse: -@P. Usually, you would make this of unit length so: normalize(-@P). The attribute expression applies this formula to each point on the circle. Each point has a position vector, reverse and normalize each to get the desired normal:
Now I am on a roll. The attribute expression I think is a gentle introduction to writing some VEX code. Second leap - use a point wrangle node to write 2 lines of VEX:
@N = normalize(-@P);
v@upVec = {0,0,1};
The node applies these 2 lines to each point (in an efficient parallel way if you have multicore on your machine):
By the way, I worked out how to fix the polyframe: the style parameter of the node should be set to Primitive Centroid. This will trigger a computation of the tangentu to point to the center, and since we have renamed that attribute to N we have the desired normal.
Old tutorials can't be blamed for changes to Houdini. Rohan could not have explained all the above nitty gritty detail about what polyframe was doing behind the scenes without the tutorial becoming unmanageably long. But here is the rub: the learner will never understand what is happening until they have grasped this detail. I wish there was more beginner training that focused on this low level technical detail. Maybe I have reached the point where this is no longer required - but it took far too long for my liking for this to happen!
PS note the up vector should be spelt @up not @upVec. Copy to points uses the up vector to orientate the geometry being copied to the points. The z axis points along the normal, the y asiz along the up vector.