Thanks @Mahdiyar. I am having issues implementing it on my side? The offset needs to create a solid but when tolerance is set to 0,0 the result is null.
Remove the multi-knots from the surface and the extra control points will vanish. The surface will change shape. For some shapes the change will be very small. For others it may be significant. In Rhino use the command RemoveMultiKnot I don’t know what the equivalent is in RhinoCommon.
In general the exact offset of a NURBS curve or surface cannot be represented by a NURBS curve or surface. Rhino adds knots and/or multi-knots to create a NURBS offset which is within the requested tolerance of the exact non-NURBS offset. Loose=Yes over rides the addition of knots and/or multi-knots.
I often prefer to use the overlooked “MoveUVN” tool as a replacement to the loose offset. Check out the following video to see how the loose offset fails at the 14th minute. I purposely did that, in order to show the messy results that sometimes happen with loose offset. Then, I used an alternative method with the “MoveUVN” tool by offsetting the control points instead. Note that at the 14:22 mark I wrote the exact number of the desired offset, then I moved the “N” slider to the end (moving it just partially will result in a shorter offset). Of course, this is not an exact offset and there is always some amount of deviation, however, in many cases that particular trick performs much better than the “Offset” tool with “Loose” option.