Obter normais consistentes a partir de um caminho de bezier cúbico 3D

Estou escrevendo uma classe BezierPath que contém uma lista de BezierPoints. Cada BezierPoint tem uma posição, um inTangent e um outTangent:

O BezierPath contém funções para obter posições lineares e tangentes do caminho. Meu próximo passo é fornecer funcionalidade para obter os normais do caminho.

Estou ciente de que qualquer linha em 3D terá um número ilimitado de linhas perpendiculares, portanto não haverá uma resposta definida.

Meu objetivo é que o usuário possa especificar normais (ou um ângulo de rotação?) Em cada BezierPoint com o qual interpolarei para obter normais ao longo do caminho. Meu problema é que não sei escolher uma tangente inicial (qual deve ser a tangente padrão?).

Minha primeira tentativa de obter as tangentes iniciais é usar o método Unity3DQuaternion.LookRotation:

Quaternion lookAt = Quaternion.LookRotation(tangent);
Vector3 normal = lookAt * Vector3.up;
Handles.DrawLine(position, position + normal * 10.0f);

Isso resulta no seguinte (linhas verdes são tangentes, azuis são normais):

Na maioria das vezes, isso parece ser um bom resultado base, mas parece que há mudanças repentinas em determinadas orientações:

Então, minha pergunta é: Existe uma boa maneira de obter normais normais consistentes para linhas em 3D?

Obrigado, Ves

questionAnswers(1)

yourAnswerToTheQuestion