Clear["`*"];
pts = {{{0, 0, 0}, {1, 0, 0}, {1, 0, 0}, {2, 0, 0}}, {{0,
4/3, 0}, {2/3, 4/3, 2}, {4/3, 4/3, 2}, {2, 4/3, 0}}, {{0, 2/3,
0}, {2/3, 2/3, 0}, {4/3, 2/3, 0}, {2, 2/3, 0}}, {{0, 2, 0}, {2/3,
2, 0}, {4/3, 2, 0}, {2, 2, 0}}};
a = Graphics3D[BSplineSurface[pts], Boxed -> False];
b = ParametricPlot3D[BezierFunction[pts][u, v], {u, 0, 1}, {v, 0, 1},
ColorFunction -> "Rainbow", Mesh -> False, Boxed -> False,
Axes -> False];
{a, b}
能否对 a 直接用 VertexColors 着色,从而达到 b 的效果。

(浏览器有问题,暂时不支持用代码框)