I remember having a similar problem once.
CatmullRomCurve3 must create a balance between the points. You have very few points. Try setting few points on the straight sections and very close distances on the curves.
Depends on what you call ‘a radius’. If you mean the radius of the cross section of the tube, it is the radius parameter of TubeGeometry. If you mean the radius of bending around the corners, it is the tension parameter of CatmullRomCurve3. But tension is not versatile. Try different values instead of 0.025 to experience its limitation. It’s better to use cubic Bézier curves.
I though the issue is with the overall shape. So my examples demonstrated the shape with rounded corner. I’m sure you can adapt the code to work with tubes and change the tube’s radius the way you want. If still not working, do not post code fragments, but a working minimal demo in codepen.io or another place, that allows debugging and editing.
Ok, so actually I am working on this.
I want to make this dynamic for height.
I think I can make steps easily, and vertical railings is also doable…
But I have no sense how to make above railings and kickplate actually…
Perhaps you can instance smaller mesh chunks along a path…
Each stair type has a beginning piece… N number of middle pieces, and an end piece… all together curved to a path like this: